November 24, 2009

Anti-aliased fonts in Wine

Anti-aliased fonts in Wine seem to be disabled by default. This leads to some pretty ugly font rendering. (No flames, please. If you don't like anti-aliased fonts, then please move along.)

An almost-in-passing comment on this post tells you an easy way to turn on anti-aliasing. I tried it on my Ubuntu Jaunty installation, and it seems to work fine. To spare you the need to reference and hunt and peck the original post, here's what I did:

  1. Open the file ~/.wine/user.reg in a text editor.
  2. Change the entry "FontSmoothing"="0" to "FontSmoothing"="1"
  3. Close your text editor
  4. There is no fourth step.

Later addition: There is a more comprehensive discussion of enabling anti-aliasing (including ClearType) here.

November 22, 2009

Different GTK settings for different sessions

Here's the situation:

You like using different window managers for different things. For example, sometimes you want to use IceWM, other times Openbox, etc. This is easy enough to do if you are using GDM, but there's a small thing that bothers you. All the above WMs will use the same configuration files for GTK settings, but you want to use different settings for each. For example, in Openbox you may want to use Tango icons but you like the default Gnome icons better in IceWM.

I describe below a way you can make this happen. It's a tiny bit hackish, but it seems to work just fine. It assumes you are not using gnome-settings-daemon.

GTK settings--the easy way

First of all, make life easy for yourself and install LXAppearance. It is part of the LXDE desktop environment, but many distributions let you install it as a standalone package. It is the best tool I know of to adjust GTK appearance settings. You do not need LXAppearance to do what I describe below, but you will love life a little more if you have it.

Different settings per Window Manager

Here's where the fun begins. This should work with any WM that has a startup script (required) and a shutdown script (strongly recommended but not strictly necessary). I used IceWM to test the idea.

GTK settings are stored in the .gtkrc-2.0 file in your home directory. What we are going to do at startup is redirect this by doing the following:
  • create a file .gtkrc-icewm-2.0 to store the GTK settings for icewm
  • copy the original .gtkrc-2.0 file to a backup location.
  • delete the original .gtkrc-2.0 file
  • then create a link from .gtkrc-2.0 to .gtkrc-icewm-2.0
And at session end, we will:
  • remove the link, and
  • restore the backed up .gtkrc-2.0
There are a few test we should do in the process to make sure we don't mess anything up. Below are experts from my ~/.icewm/startup and ~/.icewm/shutdown files that outline the needed tests.

Excerpt from ~/.icewm/startup:
### This section lets icewm use its own gtk settings ###
# it uses the following files
# .gtkrc-2.0 original gtk settings file
# .gtkrc-icewm-2.0 file where gtk settings for icewm session are stored
# .gtkrc-2.0-orig.BAK file where original .gtkrc-2.0 is stored
# if .gtkrc-icewm-2.0 doesn't exist, make it
if [ ! -f ~/.gtkrc-icewm-2.0 ] ; then
if [ -f ~/.gtkrc-2.0 ] ; then
cp ~/.gtkrc-2.0 ~/.gtkrc-icewm-2.0
touch ~/.gtkrc-icewm-2.0

# if .gtkrc-2.0 is a regular file, move .gtkrc-2.0 to a backup file,
# then link to .gtkrc-icewm-2.0. (This should be undone in shutdown.)
if [ -f ~/.gtkrc-2.0 ] ; then
cp ~/.gtkrc-2.0 ~/.gtkrc-2.0-orig.BAK
ln -sf ~/.gtkrc-icewm-2.0 ~/.gtkrc-2.0
### end gtk settings stuff
Excerpt from ~/.icewm/shutdown:
# if .gtkrc-2.0 is a link then remove link and restore backed up .gtkrc-2.0
if [ -h ~/.gtkrc-2.0 ] ; then
rm ~/.gtkrc-2.0
cp ~/.gtkrc-2.0-orig.BAK ~/.gtkrc-2.0
If you don't do the shutdown bits, then the link to the .gtkrc-icewm-2.0 file will remain in place when you start a session in a different WM. This means that every WM you use that doesn't use gnome-settings-daemon (and maybe xfce-mcs-manager) must do a restore on startup if things are not to get really wonky.