суббота, 21 июня 2008 г.

Жизнь без gnome-settings-daemon

Я не использую Gnome и вообще не сторонник DE. В качестве оконного менеджера у меня стоит IceWM. Раньше, чтобы при работе в IceWM у меня автоматически задавалась нужная мне тема оформления для GTK приложений, и включалось сглаживание шрифтов, при старте IceWM запускался gnome-settings-daemon.

В последнее время я стал замечать нестабильную работу системы из-за gnome-settings-daemon'а. Например, при работе в VMWare во время выхода из гостевой ОС у меня время от времени блокировалась клавиатура, и после этого не запускалось ни одно графическое приложение - помогал только перезапуск иксов. В итоге я решил от него избавиться, т. к. никакой необходимости у меня в нем нет.


1. Задаем тему оформления GTK

Все GTK-2 приложения при запуске читают файл ~/.gtkrc-2.0. В нем можно задавать значения различных опций, настраивающих работу GTK приложения.

Все что нам нужно - это прописать в ~/.gtkrc-2.0 следующие строки:
# Разрешаем менять горячие клавиши в меню
# нажатием новой комбинации клавиш.
gtk-can-change-accels = 1

gtk-theme-name = "Human"
gtk-icon-theme-name = "Human"
gtk-font-name = "Sans 9"

Установка gtk-can-change-accels в 1 позволяет налету менять горячие клавиши. Например, если вы в gnome-terminal кликните по меню File и, наведя курсор мыши на пункт Open Tab, нажмете Ctrl+T, то теперь сможете создавать новую вкладку нажатием этой комбинации клавиш.

Назначение остальных опций, думаю, понятно:

gtk-theme-name = "Human" говорит GTK приложению, что надо загрузить файл ~/.themes/Human/gtk-2.0/gtkrc или /usr/share/themes/Human/gtk-2.0/gtkrc, в котором содержатся все настройки темы.

gtk-icon-theme-name = "Human" заставляет GTK приложения искать пиктограммы в папке ~/.icons/Human или /usr/share/icons/Human.

gtk-font-name = "Sans 9" задает шрифт, используемый по умолчанию.


2. Включаем сглаживание шрифтов.

На форумах мне предлагали настроить под себя ~/.fonts.conf или ~/.Xdefaults, но с помощью этих файлов достичь желаемого результата мне так и не удалось. Как бы я не менял ~/.fonts.conf, шрифты хоть и сглаживались, но по сравнению с тем сглаживанием, которое давал gnome-settings-daemon они выглядели просто ужасно. Внесение настроек в ~/.Xdefaults вообще не давало результатов.

Поэтому для того, чтобы найти ответ на данный вопрос, мне пришлось покопаться в исходных кодах gnome-settings-daemon. Вот что я там нашел.

Чтобы настроить сглаживание, необходимо задать значение опций Xft.* в файле ~/.Xresources. Далее я приведу список соответствий: какие опции из gnome-appearance-properties->Fonts->Details влияют на опции ~/.Xresources:

Smoothing:
None - Xft.antialias: false
Grayscale - Xft.antialias: true
Subpixel (LCDs) - Xft.antialias: true

Hinting:
None - Xft.hinting: false, Xft.hintstyle: none
Slight - Xft.hinting: true, Xft.hintstyle: hintslight
Medium - Xft.hinting: true, Xft.hintstyle: hintmedium
Full - Xft.hinting: true, Xft.hintstyle: hintfull

Subpixel Order:
Если Smoothing != Subpixel, то:
Xft.rgba: none
Если Smoothing = Subpixel, то:
RGB - Xft.rgba: rgb
BGR - Xft.rgba: bgr
VRGB - Xft.rgba: vrgb
VBGR - Xft.rgba: vbgr

Таким образом, если у вас в gnome-appearance-properties в настройках сглаживания шрифтов стоят опции
Resolution = 96
Smoothing = Grayscale
Hinting = Slight
то ~/.Xresources должен содержать следующие строки:
Xft.dpi:        96.0
Xft.hinting:    true
Xft.hintstyle:  hintslight
Xft.antialias:  true
Xft.rgba:       none

7 комментариев:

Анонимный комментирует...

Спасибо, полезная штука

Анонимный комментирует...

Очень интересно. Но нельзя ли немного подробнее про .gtkrc-2.0? Можно ли, например, настраивать одиночный/двойной клик мышки?

Unknown комментирует...

Да, .gtkrc имеет опцию gtk-double-click-time. Список всех опций можно посмотреть здесь.

Анонимный комментирует...

Спасибо, помогло в освоении openbox.

Анонимный комментирует...

респект!
это именно то хау-ту, которое я неделю искал. Запостил у себя в блоге, с указанием источника.

Sergey Miryanov комментирует...

Спасибо, то что надо!

Анонимный комментирует...

За сглаживание шрифтов - отдельное спасибо