How-To: Modifying UI font of gtk1 and gtk2 application

Note: This How-To is separated into several posts for clarity and easier reading. Upgrading to Mandrake Linux 10, I have found that the UI (User interface) font of gtk1. x look rather ugly. Upon searching the web and a little experimenting by myself, I have discovered the trick to modify the UI font for gtk1 and gt ...

Linux Customization Tweaking 106 This topic was started by ,


data/avatar/default/avatar34.webp

53 Posts
Location -
Joined 2002-08-21
Note: This How-To is separated into several posts for clarity and easier reading.
 
Upgrading to Mandrake Linux 10, I have found that the UI (User interface) font of gtk1.x look rather ugly. Upon searching the web and a little experimenting by myself, I have discovered the trick to modify the UI font for gtk1 and gtk2 applications as well:
 
Here are my suggestions, as performed under Mandrake 10:
 
1) Install Microsoft web font thru corefonts package (Optional):
http://corefonts.sourceforge.net/
 
Mandrake Source RPM build:
http://ben.reser.org/corefonts/
 
Cabextract 1.0
http://www.kyz.uklinux.net/cabextract.php
 
2) You have to know what locale environment you are in:
To find out, in terminal you can enter:
 
$ locale
 
In English Unicode environment, it is likely en_US.UTF-8,
or in my case en_HK.UTF-8 (English for Hong Kong).
 
3) The trick to look up the UI font setting is in the directory /etc/gtk and /etc/gtk-2.0, for gtk1 and gtk2 applications respectively:
 
3.1) For gtk1 application
Eg: Mozilla X11, XMMS, Gimp-1.2.x
 
Now, the locale environment information you have found in step 2 became useful:
 
For example, if your locale is zh_TW.big5 (Taiwan Chinese, Big5 Encoding),
then you should look up the file /etc/gtk/gtkrc.zh_TW.big5
 
In the directory /etc/gtk
 
There's no such file as gtkrc.en_US.utf-8, so I would guess this means the locale setting will fall back to gtkrc.utf-8, and it does!
 
Examining /etc/gtk/gtkrc.utf-8 under Mandrake 10 shows this:
 

Quote:style "gtk-default" { fontset = "-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default"
 
The string -*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1 is the old style for X11 server to display font information, before XFT/fontconfig was born last year. Whereas ,\ is the separator for adding another font.
 
Hence, if you want to use another UI font in gtk1 apps, you have to look up the name of that font in the old X11 style, which is recorded in the font metafile such as fonts.alias, fonts.dir or fonts.scale. They should be placed in the same directory where the fonts reside, inside the following path:
 
/usr/X11R6/lib/X11/fonts/
/usr/share/fonts/
/usr/share/fonts/ttf
 
For example, if I want to use Microsoft Arial font as the UI font for gtk1 apps, with the corefont package (see step 1) installed in this path:
 
/usr/X11R6/lib/X11/fonts/msttcorefonts/
 
Then I can look up the old style X11 font information from:
 
/usr/X11R6/lib/X11/fonts/msttcorefonts/fonts.dir
/usr/X11R6/lib/X11/fonts/msttcorefonts/fonts.scale
 
Upon examining the file fonts.dir, I have located the font information for Microsoft Arial in X11 style as:
 

Quote:arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-dosencoding-cp850
.
.
.
 
Where -is10646-1 and -dosencoding-cp850 are encoding schemes, the font name is basically the same.
 
Hence the font name for Microsoft Arial (with Unicode encoding) in old X11 style is as this:
 
-monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1
 
Hence you can modify the file /etc/gtk/gtkrc.utf-8 by adding this font name, followed by the separator ,\
 

Quote:style "gtk-default" { fontset = "-monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1,\
-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default"
 
Save the file.
Finished!
 
Now launch a gtk1 application in en_US.UTF-8 locale and your UI font will look great again.

Participate on our website and join the conversation

You have already an account on our website? Use the link below to login.
Login
Create a new user account. Registration is free and takes only a few seconds.
Register
This topic is archived. New comments cannot be posted and votes cannot be cast.

Responses to this topic


data/avatar/default/avatar34.webp

53 Posts
Location -
Joined 2002-08-21
OP
If you are still with me, here is more detail on UI font modification in gtk1 apps:
 
3.2) UI font setting in gtk1 apps - ignoring locale
 
But wait, you don't want to bother about your locale environment, just keep all the gtk1 apps look right no matter what locale (language, encoding) setting I am using!
 
Sure, you can do this, just make this as a per-user account setting by:
 
$ cp /etc/gtk/gtkrc.utf-8 ~/.gtkrc
 
Or you can choose to copy another file in /etc/gtk/ if you knew about your locale environment (such as gtkrc.zh_TW.utf8 which corresponds to the locale zh_TW.utf-8.)
 
Then modify the file ~/.gtkrc will achieve the same result.
 
Pay attention to the encoding scheme -iso10646-1, which is for Unicode (utf-8).
 
However, if you really don't want to bother, you can just put -*-* in place of -iso10461-1, which means use whatever encoding is available from that font. However, you may see square box or garbage in the UI if you use a wrong encoding; or the font does not contain glyphs/characters required in that language.
 
Of course you can set ~/.gtkrc to use several fonts in a particular locale language. As an example, in a Traditional Chinese environment, you can use Microsoft Arial for English letters and numbers, and then Taipei_Ming for Traditional Chinese, by using the separator ,\ to add more font as you wish.
 
3.3) Using Adobe Helvetica 12pt
 
If you don't have or don't want to use Microsoft font, then the Adobe bitmap font Helvetica 12pt (bitmap font has fixed size) is also a good replacement. On Mandrake 10, information on Helvetica 12pt can be retrieved from this file: /usr/X11R6/lib/X11/fonts/75dpi/fonts.dir
 

Quote:helvR12-ISO8859-1.pcf.gz -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1 
Hence the old style X11 font name string for Helvetica 12pt is:
 
-adobe-helvetica-medium-o-normal--12-120-75-75-p-67-iso8859-1
 
Or simplify it as
 
-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
(which ignores encoding and all other information, only the font size -12- matters here)
 
Hence you can modify the file ~/.gtkrc as:
 

Quote:style "gtk-default" { fontset = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,\
-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default"
 
Finish!
[Edited by zero0w on 2004-06-08 13:03:20]
 

data/avatar/default/avatar34.webp

53 Posts
Location -
Joined 2002-08-21
OP
Ok, so much time is wasted on changing UI font for gtk1 apps, now we are moving to gtk2 apps for good.
 
Example: Gimp 2.0, XSane, Azureus GTK-2+ client, and many more
 
Since GTK-2.x+ applications has switched to Fontconfig and Pango in processing font encoding and locale information, we no longer need to look up the old style X11 font name string, which probably caused brain damage to a lot of people trying to figure it out in the old days.
 
Changing UI font for GTK-2.x+ application is very easy, just create or modify this file in the home directory of your user account:
 
$ vi ~/.gtkrc-2.0
 
Then add this line:
 

Quote:gtk-font-name="Sans 12
where
 
Sans is the name of the font you want to use,
12 is the font size
 
For example, I have chosen Luxi Sans as my UI font for GTK2+XFT Firefox:
 

Quote:gtk-font-name="LuxiSans 12" 
Notice the space is omitted between "Luxi Sans", sometimes it is the case, sometimes it is not. Try to experiment and find out.
 
Ok, I think there's enough for now, any questions?