Project Stick In The Mud

If I knew for a certainty that a man was coming to my house with the conscious design to do me good, I should run for my life...
Henry David Thoreau

I feel the same way about “helpful” software, thus was born Project Stick In The Mud. A collection of links, tips, tricks, and even software designed to make linux computers less “helpful” and more useful. Note: Most of this customization was done on Fedora systems, so there are many Fedora references scattered about.

My favorite window manager is FVWM. On fedora, you can get it via yum install fvwm.

For the longest time, the window manager standards on the freedesktop.org site contained text which explicitly forbid window managers from paying any attention to the context (root window, client window, titlebar, etc) when responding to keystrokes. I can't seem to find that text anymore (perhaps they finally realized how utterly stupid it was). In any case, FVWM always proudly refused to kow-tow to foolish standards, and thus became the only useful window manager I could find, allowing me to do things like have the cursor keys switch workspaces in root context, yet still be able to use the cursor keys inside text editors. Come to think of it, the things that annoy me the most about linux can almost always be traced back to freedesktop.org. Perhaps someday someone will produce a new linux distro that uses freedesktop.org as a guide for what not to do (maybe Potksedeerf linux?) It might turn out to be the single most useful linux distro ever produced :-).

I use FVWM in a plain X session started from my own ~/.xsession file, no GNOME or KDE need apply. As a result, I get the entire screen to use for my own windows, no massive eye candy clutter of panels and icons and distracting pop-ups annoying the heck out of me.

Naturally, the most “helpful” Fedora release ever made (Fedora 9) had to save a staggering 8K on the release DVD by leaving out the xorg-x11-xinit-session rpm. So in order to use the standard ~/.xsession technique (which had worked since the beginning of the X-age) you have to manually yum install xorg-x11-xinit-session (sheesh!).

There are plenty of both GNOME and KDE apps I still want to use even though I am not using the full environments. With KDE apps, this is not much of a problem, you just run the program, and it works. With GNOME, the situation is more complex. It takes some serious de-gnoming efforts to run GNOME apps without a GNOME desktop. For example, fonts will typically look absolutely terrible without a gnome-settings-daemon running in your X session to provide font settings for GTK apps.

Unfortunately, if you start gnome-settings-daemon, it insists on dragging in lots of extraneous crap, starting screen savers, loading X resources which will do things like give your emacs window a giant fuzzy neon I-beam cursor and change the default colors and behaviors of old Motif apps, etc. No one asked GNOME to do this, it is just being “helpful”.

So, my ~/.xsession file gets a little complicated to to do all my de-gnoming:

#!/bin/bash
exec >> $HOME/.xsession-errors 2>&1
echo ''
echo Starting X session `date`
#
# Recent versions of GNOME or GDM or something
# somewhere start this unwanted gnome-keyring-daemon
# process. I have no idea where it gets started, so it
# seems simpler to just kill it off than try and track
# it down.
#
killall -9 gnome-keyring-daemon
#
# Unlike gnome-keyring-daemon, ssh-agent has a man page
# and a documented useful function. Get it running
# during the rest of the session if it isn't already
# running.
#
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
export SSH_ASKPASS
kill_agent="no"
if [ -z "$SSH_AUTH_SOCK" ]
then
   echo .xsession starting ssh-agent
   eval `ssh-agent -s`
   kill_agent="yes"
else
   echo ssh-agent already started
fi
#
# Neither GNOME nor KDE apps seem to be able to survive
# without a dbus session daemon running, might as well
# give in and start one if there isn't one running
# already.
#
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]
then
   echo .xsession starting dbus
   eval `dbus-launch --sh-syntax --exit-with-session`
else
   echo dbus already started
fi
#
# Tricky bit - the /usr/libexec/gnome-settings-daemon
# program is good to run to revive the font settings,
# but it also revives all sorts of useless crap I don't
# want, so start it, wait a bit and then remove all the
# crap it adds to the xrdb database.
#
# Breaking news! Every damn time I connect from work
# via VNC, the next time I login to the console X
# session, I get a $#@!  popup about "The X system
# keyboard settings differ from your current GNOME
# keyboard settings." After near infinite amounts of
# poking sticks in random holes, I finally discovered
# that the $@#! gconf keys under
# /desktop/gnome/peripherals/keyboard/kbd.sysbackup
# need to be reset to make this go away, so just always
# reset that key before starting gnome-settings-daemon.
#
/usr/bin/gconftool-2 --recursive-unset \
   /desktop/gnome/peripherals/keyboard/kbd.sysbackup
/usr/libexec/gnome-settings-daemon &
sleep 5
#
# Hopefully, the gnome-settings-daemon has had enough
# time with the 5 second delay to have finished
# polluting my X resources with all the crap it
# adds. Remove all the resources it just added, and
# then stick just the ones I actually want back into
# the database.
#
xrdb -all -remove
xrdb -load $HOME/.Xdefaults
#
# Not shown, but this is where my custom startup goes,
# now that I have the environment setup correctly.
#
#
# Once I exit the X session, kill off the ssh-agent if
# I was the one who started it (above).
#
if [ "$kill_agent" = "yes" ]
then
   ssh-agent -k
fi

Apart from being careful in the ~./xsession file, other tools can help in the de-gnoming process. The gconf-editor program (not usually installed by default on fedora, but obtainable via yum install gconf-editor) can be used to edit that monstrous gconf database clone of the Windows registry which many programs seem to use for config information (why anyone would deliberately set out to copy the single most irritating and error prone feature of Windows is not a fit subject to discuss on a family oriented web page :-). In here you can search for various keys that can do things like disable drawing of the root window background image so you actually get a chance to draw your own background instead of getting the one gnome-settings-daemon decides to draw. Or maybe disable the screen saver, etc.

Unfortunately, many of the things you really want to change are stored as "schema" value attributes, and if you try to edit one of those, gconf-editor tells you that it can't do that.

So if you want to totally disable annoying apps like the screensaver or power manager, you have to edit xml files and load them in the gconf database manually.

The directory /etc/gconf/schemas/ contains the original xml files used to build the hidden and mysterious gconf database, so you can copy files from that directory (such as apps_gnome_settings_daemon_screensaver.schemas) and change the start_screensaver bool attribute value from true or false then feed that modified file to the gconftool-2 program with the --install-schema-file=filename option, and as simple as that, gnome won't start the stupid screensaver anymore.

Yes, you can config the screensaver to not do any screensaving, but if you look, you'll find it still running out there eating up resources in order to not do anything :-).

So, de-gnoming can occur at many levels of complexity, but once you get sufficiently irritated by a “helpful” feature, almost no amount of work seems like too much to go through :-).

By the way, speaking of de-gnoming, and just so freedesktop.org won't think I'm picking on them exclusively, this is probably a good place to point to a bugzilla which documents a two year war against the single most ill concieved standard dialog ever invented in the history of computing. I speak, of course, of the GTK file chooser. The level of mulish incompetence on the part of the GTK designers on display in this one bugzilla demonstrates the single biggest problem with open source software: Morons can gain control of critical components and won't let go or admit error. Then the question becomes, “Is it worth the effort to branch the project and try to get everyone to use the new branch?” The answer is usually “No. They aren't quite moronic enough to bother.”, so everyone is stuck with moronic decisions.

Back to de-gnoming: Not running GNOME or KDE, also means I'm not running nautilus, so nothing is out there automounting CDs and USB drives at strange mountpoints and nothing is autorunning any autorun scripts on them. These are all good things, not bad things, but sometimes you really do want to mount something where you can get to it. The traditional manly way to do this is to tail /var/log/messages, see what device just appeared, and manually mount it. Even I will admit that process is a bit cumbersome, thus was born mountie.tar.bz2, a source tarball for a Qt4 program named mountie you can run when you want it to run, which will offer you lists of mountable devices and already mounted devices and let you mount or unmount things when you want to, at the mountpoints you want to use. Unlike nautilus, with mountie, you are in control.

I love emacs, but the rate at which they keep “improving” it sometimes makes me think of just archiving the source for emacs version 18 and rebuilding it all my systems. In particular, emacs version 22 has many modes which look like an explosion in a paint factory. I can't see a damn thing with all the “helpful” colors burning my eyes out, not to mention the hallucinogenic effects with the context sensitive cursors blinking and flashing and changing shapes just because I moved the mouse a little. So far, though, I haven't resorted to emacs 18, I've just treated all the irritating new stuff in each version as a game I win when I finally figure out how to turn it off. I have such a large collection of these now that I have them on a separate Stick In The Mud Emacs page.

For a mailer, I like Claws Mail (also available in the fedora repositories - search for claws and you can find it as well as a bunch of plugins you may want). The single most endearing feature of claws-mail is that it won't display HTML in any way shape or form unless I configure a plugin to make it do that (a plugin I'll never configure :-). It is also much smaller, faster, and less crash prone than that bloated beast named evolution.

Having dumped evolution, I still wanted a way to popup reminders. I tried several things, and eventually decided I liked remind as a flexible engine to drive my own collection of scripts and software, including the actual message popup tool, qtmess.

In fedora 9, I soon discovered that my mouse definition, containing a DragLockButtons option no longer did drag lock. Since I use a trackball, not having drag lock is a lot like needing three hands to use the mouse. Looking at the X log file showed that it was recognizing the DragLockButtons buttons option, but it had no effect. Turns out I need to add Option "AutoAddDevices" "false" to the "ServerFlags" section of the xorg.conf file to disable the fancy new evdev based input system (which knows nothing of DragLockButtons - what an improvement :-). [Actually, I've seen a lot of activity in the xorg bugzilla about this, so perhaps the upstream fixes will make it into fedora some day].

If you aren't using a laptop with Fedora 9 and flitting about from one Starbucks to another, all the new default NetworkManager system will get you is grief. If your computer only ever has one IP address and you want your network functioning right away at boot time, then the old crummy network system is for you. Fortunately it is relatively simple to swap them (for now, who knows how difficult they may decide to make this in the future). As root, do this:

chkconfig --level 2345 NetworkManager off
chkconfig --level 2345 network on
reboot

Now all your networking will function the same way it has for years and years.

The pestilential pulseaudio nonsense can be removed on fedora 8 simply by doing a:

yum erase alsa-plugins-pulseaudio

On fedora 9, pulseaudio seems to have roots grown more deeply into the system, for fedora 9 I had to:

yum erase pulseaudio

That takes a lot of junk with it (including alsa-plugins-pulseaudio) and once again I have alsa back the way it was before.

However none of the above works on any version of fedora unless I arrange to make sure my USB microphone (in my webcam) is not the first audio device on the system. On fedora 8 I do this by adding these lines to /etc/modprobe.conf:

alias snd-card-1 snd-usb-audio
options snd-usb-audio index=1

On fedora 9, there is no modeprobe.conf file, instead I create the file /etc/modprobe.d/usbmic and put those same two lines in it.

A similar annoyance to the usb device conflicts crops up when you need to replace a broken DVD drive. You take the old one out, put the new one in, and the dadgum thing shows up as /dev/sr1 instead of /dev/sr0 which every multimedia program on your system has stashed in some random settings file.

Turns out the udev system created a file with a name something like: /etc/udev/rules.d/70-persistent-cd.rules that records the identifier of the old broken drive and says it should be drive 0 come hell or high water (or even being removed from system). You can edit this file (as long as you keep the syntax the same) to remove the old drive 0 and make the new drive be zero then reboot and you are finally back to having /dev/sr0 again.

Starting in fedora 9, the fonts used by the GDM login screen are apparently computed strictly to render in a specific point size based on the EDID information from the monitor. That's all fine in some theoretical universe, but with my 42 inch HD monitor, strict adherence to the 52DPI of the monitor leads to fonts which are rendered about 4 pixels high to achieve the requested point size. You mostly have to guess what everything says. Fortunately, Arlinton Bourne provided a good work around for this in my bugzilla about this problem. Apparently the gnome font properties are stashed in the ~/.gconf/desktop/gnome/font_rendering/ directory in an xml file, so I created that directory for the gdm user and copied my own xml file in to tell user gdm to render fonts the same way I do, and it actually worked. I can now see the text in the gdm login screen.

Speaking of using EDID info for everything, this is probably a good place to point to my Linux Is Easy! web page documenting my fascinating experiences trying to get X to do what I ask it.

There are still some things that have (so far) defeated me. The new version of gdm on Fedora 9 apparently has no way to control the options it starts the X server with, so If I want to remove -nolisten tcp to allow network connections to my X server, I can't do it.

In fact, other than firefox 3 (which seems to have caved and now renders pages according to the Microsoft Internet Explorer defacto standard rather than the letter of the W3 standards :-), I don't see a single thing which is improved in Fedora 9 (which is why I'm still using Fedora 8 as my primary system, but having finally figured out how to disable pulseaudio, I'm considering finally switching to fedora 9).

Page last modified Sat Aug 30 20:17:12 2008