Показаны сообщения с ярлыком desktop. Показать все сообщения
Показаны сообщения с ярлыком desktop. Показать все сообщения

пятница, 21 августа 2009 г.

Включение и отключение flashplayer в Conkeror и не только

Проблема

Есть в природе flash-анимация, которая проигрывается flash-плейером. Иногда даже она может быть полезной, например, если очень хочется глянуть в интернете на http://youtube.com какой-нибудь ролик. Но вот когда она мелькает перед глазами, демонстрируя бездарную рекламу, появляется желание от неё избавиться, не только из-за навязчивости но и из-за прожорливости флеша в смысле процессорных ресурсов.

Поэтому хочется иметь по умолчанию флеш в отключенном состоянии, а включать только при необходимости. В популярных браузерах есть возможность включать и отключать это зло кликами мыши. К сожалению, в менее популярном браузере Conkeror такой опции пока нет (по крайней мере для версии Debian-0.9~git090223-1), а очень хотелось бы. Здесь я напишу каким образом я решил поставленную задачу. Решение не самое идеальное, поэтому при наличии интересных мыслей по этому поводу, добро пожаловать в комментарии!

Дано

На борту Debian Lenny (stable, на момент написания заметки),

$ uname -r
2.6.26-2-686

Flash поставлен проприетарный, flashplugin-nonfree, (другой на моей технике просто не шевелится) по официальной инструкции.

Предлагаемый подход и реализация

Поскольку для работы плейера пользователю необходимо иметь права для чтения библиотеки libflashplayer.so, запрет на чтение приведёт к тому, что неугодная анимация работать не будет. Файл libflashplayer.so лежит в моём случае в директории /usr/lib/flashplugin-nonfree:

$ ls /usr/lib/flashplugin-nonfree
итого 9916
-rw-r--r-- 1 root root 10131640 Фев  3  2009 libflashplayer.so
-rw-r--r-- 1 root root     2933 Июл 27  2007 pubkey.asc

Как видно, владелец - root, а группа и все остальные имеют право на чтение. Этого-то права мы и собираемся лишить, но не здесь, и чуть позже. Для начала скопируем файл libflashplayer.so в директорию ~/.mozilla/plugins

$ cp /usr/lib/flashplugin-nonfree/libflashplayer.so ~/.mozilla/plugins

Почему туда? Именно там Conkeror ишет плагины в первую очередь. На вики-странице говорится о том, что кроме того плагины могут лежать в ~/.conkeror/plugins, но у меня, почему-то это не работает.

Теперь лишим нас всех прав для чтения этого файла:

$ chmod a-r ~/.mozilla/plugins/libflashplayer.so

В результате, после перезагрузки страницы, содержащей флэш, мы насладимся его отсутствием. Вернуть его обратно можно, дав права на чтение:

$ chmod a+r ~/.mozilla/plugins/libflashplayer.so

Поскольку, для такой процедуры не очень здорово всегда писать в терминале подобную команду, имеет смысл забиндить эти действия на какие-нибудь комбинации клавиш. Я, например, для этого пользуюсь xbindkeys, и добавил в ~/.xbindkeysrc следующие строки (но можно использовать способы заданий комбинация клавиш для вашего оконного менеджера или для другой программы "забиндивания"):

"chmod a-r ~/.mozilla/plugins/libflashplayer.so"
Mod4 + bracketright
"chmod a+r ~/.mozilla/plugins/libflashplayer.so"
Mod4 + bracketleft
Таким образом, при нажатии Win + [ флэш включается, а при Win+] прибивается (не забываем предварительно перезапустить xbindkeys).

В принципе, всё работает, казалось бы, добились того, чего хотели. Всё бы ничего, но вот если вы залезете на тот же http://youtube.com, включив флэш, то выключение таким образом уже не отобразится на поведение флэша на других страницах, потому что программа flashplayer уже запущена и работает, а все изменения на неё не влияют. Чтобы изменения вступили в силу, надо просто закрыть страничку youtube. Хотя это и не всегда у меня наблюдалось.

Если честно, эту особенность обнаружил только когда писал пост и перепроверял всё на собственной шкуре. На других сайтах как-то не замечал такого - обычно после перезапуска страницы перезапускался и флэш. Стало быть, изменив права доступа, после перезапуска страницы я добивался того, чего хотел.

Резюме

Итак, пока для Conkeror пока не прикрутили переключалку флеша, я сгородил свою :) Разумеется, она должна работать не только для Conkeror, но и, судя по всему, для Firefox (полагаю, что тогда надо запретить пользователям читать общий файл /usr/lib/flashplugin-nonfree/libflashplayer.so, для чего нужны права рута, что для машины с одним пользователем приемлемо), хотя в этом и нет особой нужды, потому что там есть свои резалки флэша.

Поскольку решение неидеальное, был бы очень рад услышать пожелания/предложения.


Читать далее…

понедельник, 17 августа 2009 г.

Смена внешнего вида диалога выбора в Opera

Я иногда пользуюсь браузером Opera, когда не использую Conkeror. Многое в первом меня устраивает, за исключением, пожалуй, диалога выбора файла. Например, при сохранении странички или файла появляется окно, соответствующее стилю библиотеки qt3. Лично мне это не нравится, потому что данный диалог мне неудобен, если даже не говорить о внешних недостатках. Здесь я опишу как можно его можно изменить на стандартный диалог gtk.

Немного начальных условий (а вдруг, понадобятся? :).

$ uname -r
2.6.26-2-686

$ opera -version
Opera 9.64. Build 2480 for Linux. Qt library 3.3.8b.

Для смены вида диалога набираем в адресной строке opera:config, находим "File Selector", выставляем значение "Dialog Toolkit" на 2, сохраняем. После перезапуска Opera получаем стандартный диалог выбора gtk.

Другие значения параметра "Dialog Toolkit" в моём случае не приводят к каким-либо изменениям.

А можно не менять ничего кардинально, а, например, добавить информации в стандартном диалоге: тип файла, время модификации, права доступа. Для этого ставим галку на "Show Details".

Решение нашёл здесь, тов. lizard огромное спасибо!!! Для меня остаётся загадкой, как он до этого дошёл :)


Читать далее…

пятница, 10 июля 2009 г.

Избавляемся от пустых одинаковых иконок. Раскрасим аскетичный рабочий стол.

Проблема

Если вы - пользователь лёгкого оконного менеджера и используете по большей части консольные приложения, или такие программы, как, например, xpdf, mplayer, conkeror, то с проблемой вы, скорее всего знакомы. Дело в том, что эти программы имеют проблемы со значками, которые можно видеть при переключении окон альт-табом или на рамке окна. Все они имеют одну и ту же иконку, неинформативное пустое изображение, которое только мозолит глаза, но не помогает разобраться что это за программа. Знакомая картина?

Не знаю можно ли решить данную проблему более элегантным способом, но был бы рад услышать, если у кого-нибудь есть мысли по этому поводу. Я же нашёл следующее решение, использующее программу fbpanel.

В результате будет так.

Решение

Панель fbpanel сама по себе - весьма хорошее решение для легковесного рабочего стола, однако лично я больше предпочитаю tint2. Однако именно fbpanel позволяет решить озвученную выше проблему - назначает различным приложениям свои иконки.

Установка и конфигурация

В Debian эта программа есть в репозиториях, поэтому ставится как обычно:

$ sudo aptitude install fbpanel

Конфигурационный файл по умолчанию: /etc/fbpanel/default. Чтобы использовать свой конфиг надо создать директорию ~/.fbpanel, если ещё нет, и положить туда конфиг, который мы будем модернизировать (я его назвал icons_panel):

$ mkdir ~/.fbpanel
$ cp /etc/fbpanel/default ~/.fbpanel/icons_panel
Чтобы использовать профиль icons_panel, запуск осуществляем командой:
$ fbpanel -p icons_panel
Теперь открываем файл ~/.fbpanel/icons_panel в своём любимом текстовом редакторе и редактируем. После изменения профиля, надо перезапустить fbpanel.

В первую очередь нас интересуют поля в нижней части файла:

# 'icons' plugin lets you customize window icons.

# these changes apply to entire desktop
Plugin {
    type = icons
    config {
        DefaultIcon = /usr/share/fbpanel/images/default.xpm
        application {
            icon = gnome-terminal
            Image =  /usr/share/fbpanel/images/gnome_terminal.svg
            ClassName = XTerm
        }
        ...
    }
}

Например, окну, у которого ClassName есть XTerm будет назначена иконка gnome-terminal из вашей темы gtk-2 (если я правильно понял) или /usr/share/fbpanel/images/gnome_terminal.svg.

Таким образом, если я хочу, чтобы conkeror имел иконку firefox, я просто запишу в эту секцию конфига:

application {
    icon = firefox
    Image = /home/maxim/.icons/my_icons/firefox.png
    ClassName = Conkeror
}
Если в используемой теме gtk-2 есть иконка firefox, то будет использована она. Если - нет, то будет использована /home/maxim/.icons/my_icons/firefox.png. Эти действия повлияют на окно, у которого ClassName = Conkeror.

Как узнать что есть ClassName для заданного приложения? Нет ничего проще. Наберите в терминале следующую команду и ткните мышью в интересующее окно.

$ xprop | grep WM_CLASS
В случае conkeror я получил выхлоп:
WM_CLASS(STRING) = "Navigator", "Conkeror"
Первый параметр есть AppName, который нам пригодится позже, а второй, "Conkeror", и есть искомый ClassName.

Подобную процедуру мы можем провести с mplayer, xpdf, с другими неконсольными приложениями.

Здорово! Но это не всё. Ведь все приложения, запущенные в терминале будет тогда иметь тот же вид, что и терминал, так что потом среди них не разберёшься. Тут на помощь придёт AppName.

Если просто запустить, какое-нибудь консольное приложение, скажем, ncmpc, в xterm, я получаю выхлоп от xprop:

WM_CLASS(STRING) = "xterm", "XTerm"

Ни о каком названии запущенного приложения не упоминается.

Но если запустить так:

$ xterm -name ncmpc -e ncmpc
то ситуация изменится:
$ xprop  | grep WM_CLASS
WM_CLASS(STRING) = "ncmpc", "XTerm"

Теперь, чтобы fbpanel отличала обычный терминал от консольного приложения ncmpc, в конфиг следует прописать следующее:

application {
    Image = /home/maxim/.icons/my_icons/media-player-banshee.png
    AppName = ncmpc
    ClassName = XTerm
}

Аналогично, скажем, для MidnightCommander ($ xterm -name mc -e mc):

application {
    icon = mc
    AppName = mc
    ClassName = XTerm
}

Очевидно, что не очень удобно запуск консольного приложения осуществлять в другом терминале, поэтому лучше такие запуски вешать на хоткеи или в меню запуска вашего оконного менеджера.

Если используем другую панель

Всё так здорово, но мы не хотим использовать fbpanel в качестве панели? Для этого мы можем сделать панель очень маленькой и поместить в какой-нибудь угол - видеть её мы не будем, а памяти она занимает немного. Для этого редактируем секцию General (я задал ширину width=0 и высоту в один пиксель, height=1) и удаляем все плагины кроме определений иконок.

Приведу свой конфиг:

Global {
    edge = top
    allign = right
    margin = 0
    widthtype = percent
    width = 0
    height = 1
    transparent = false
    tintcolor = #ffffff
    alpha = 37
    setdocktype = true
    setpartialstrut = true
    autohide = true
    heightWhenHidden = 2
}

Plugin {
    type = icons
    config {
        DefaultIcon = /usr/share/fbpanel/images/default.xpm
        application {
            icon = gnome-terminal
            Image = /usr/share/fbpanel/images/gnome_terminal.svg
            ClassName = XTerm
        }
        application {
            icon = gnome-terminal
            Image = /usr/share/fbpanel/images/gnome_terminal.svg
            ClassName = URxvt
        }
        application {
            icon = gnome-emacs
            Image = /usr/share/fbpanel/images/emacs.svg
            ClassName = Emacs
        }
        application {
            icon = mozilla-firefox
            ClassName = Firefox-bin
        }
        application {
            icon = mozilla-firefox
            ClassName = Firefox
        }
        application {
            Image = /home/maxim/.icons/my_icons/totem.svg
            ClassName = MPlayer
        }
        application {
            Image = /home/maxim/.icons/my_icons/xpdf.svg
            ClassName = Xpdf
        }
        application {
            icon = opera
            Image = /home/maxim/.icons/my_icons/opera.svg
            ClassName = Opera
        }
        application {
            icon = firefox
            Image = /home/maxim/.icons/my_icons/firefox.png
            ClassName = Conkeror
        }
        application {
            Image = /home/maxim/.icons/my_icons/media-player-banshee.png
            AppName = ncmpc
            ClassName = XTerm
        }
        application {
            Image = /home/maxim/.icons/my_icons/email.png
            AppName = mymail
            ClassName = XTerm
        }
        application {
            icon = mc
            AppName = mc
            ClassName = XTerm
        }
    }
}

В результате fbpanel делает своё дело, назначает окнам иконки, а в качестве панели мы используем что-нибудь другое, в моём случае это tint2.


Читать далее…

пятница, 19 июня 2009 г.

Теперь устройство может быть безопасно извлечено :) linux

Постановка задачи

В прошлый раз мы посмотрели как можно вывести информацию о том подмонтирована ли флешка или нет на экран при помощи системного монитора conky. Как известно, если есть какой-нибудь процесс, который занимает какой-нибудь файл на флешке, то umount ругнётся:

umount: /media/usb: device is busy
umount: /media/usb: device is busy
Таким образом, для начала надо узнать что это за процесс, а затем убить его.

В этой заметке я приведу скрипт, который использует для автоматического отключения занимающих процессов программу fuser и выводит сообщения на экран посредством программы gmessage.

Кому это надо? Ну, скорее всего, не пользователям DE, где это и так реализовано уже, наверное (хотя в последний раз, когда я использовал DE, мне приходилось самому искать держащие процессы). А вот пользователям лёгких оконных менеджеров, может и пригодится.

Решение

fuser - для отключения мешающих процессов

Программа fuser идентифицирет процессы, использующие данный файл и позволяет их убить. Допустим, мы открыли какой-то файл на флешке в программе evince и ещё лазим в терминала по файловой системе. Характерный вывод такой:

~> fuser -vm /media/usb/
                     USER        PID ACCESS COMMAND
/media/usb/:         maxim      6369 ..c.. bash
                     maxim      7404 f.... evince
-v означает более полный вывод, а -m /media/usb указывает на точку монтирования. В википедии это хорошо описано, а в конце приведён пример как убить махом все процессы, занимающие требуемую файловую систему. В моём случае для отрубания всего (от точки монтирования /media/usb) будет служить команда:
fuser -km /media/usb

В принципе, fuser даёт неплохой вывод, чтобы понять что именно мешает отключению, но всё же знание программы и идентификатора процесса не столь информативны для пользователя как, к примеру, имя файла, который открыт.

lsof - для информативного вывода

Для более информативного вывода, на мой взгляд, больше подойдёт программа lsof. Вот типичный вывод:


~> lsof | grep /media/usb/
bash       6369       maxim  cwd       DIR       8,17    32768    1663 /media/usb/Experiment
evince     7404       maxim   14r      REG       8,17   873474    1684 /media/usb/ABX3_preprint.pdf
Колонки означают следующее:
~> lsof | head -1
COMMAND     PID        USER   FD      TYPE     DEVICE     SIZE    NODE NAME
Более удобный вывод для меня (PID COMMAND NAME, разделённые табуляцией) я получаю с помощью awk:
lsof | grep /media/usb/ | awk '{print $2"\t"$1"\t"$9}'
Здесь мы режем строку на части, разделённые пробелом (в случае непробельного разделителя надо использовать -F "разделитель") и выводим соответствующие части в желаемом порядке.

Таким образом, получим:

~> lsof | grep /media/usb/ | awk '{print $2"\t"$1"\t"$9}'
6369    bash    /media/usb/Experiment
7404    evince  /media/usb/ABX3_preprint.pdf
По-моему, это весьма информативно. Я не соображу сходу что значит процесс 7404, но уж точно пойму /media/usb/ABX3_preprint.pdf. А это мне и надо.

Gmessage - для графического отображения информации

Хочется, когда отмонтирование прошло удачно, получить сообщение, что всё удачно. В обратном случае хотелось бы, чтобы появилось окошко, показывающее, что такие-то процессы мешаются, и предлагающее их убить.

Для этого можно использовать старую добрую программу xmessage или её более приятный глазу аналог, gmessage (оно же gxmessage).

Для отображения текста из файла text-file в окне с кнопками "Ла" и "Нет" достаточно скомандовать:

gxmessage -name "Заголовок окна" -buttons "Да:0,Нет:1" -file text-file
При нажатии на кнопку "Да" будет генериться сигнал 0, при нажатии на "Нет", соответственно - 1.

Таким образом, если мы хотим, чтобы при нажатии на "Да" что-то происходило, мы будем использовать такую конструкцию:

if gxmessage -name "Заголовок окна" -buttons "Да:0,Нет:1" \
    -file text-file;
then
    *что-то выполняем*
fi

Пишем скрипт

Итак, предлагаю такой ход действий:

  • Введём переменную точки монтирования и лога сообщений:
MOUNT_POINT="/media/usb"
LOG=/tmp/mount_usb_log
  • Узнаём подмонтирована ли флешка (если $if_mounted непусто, то выполняем то, что внутри if:
if_mounted=`grep $MOUNT_POINT /etc/mtab`
if [[ -n `echo $if_mounted` ]]; then

...
fi
  • Если флешка подмонтирована, пытаемся её отмонтировать, а все возможные сообщения пишем в лог:
umount $MOUNT_POINT &> $LOG

  • Затем, если лог непустой, то есть что-то пошло не так, выведем сообщение какие процессы нам мешают и предложим их убить.
  • В случае успеха, напишем, что всё получилось.

У меня получилось следующее:

#!/bin/sh
MOUNT_POINT="/media/usb"

if_mounted=`grep $MOUNT_POINT /etc/mtab`
LOG=/tmp/mount_usb_log

function my_umount {
    # если подмонтирована, пытаемся отмонтировать
    if [[ -n `echo $if_mounted` ]]; then

        umount $MOUNT_POINT &> $LOG
    fi
}

my_umount

if [[ -s $LOG ]]; then

    # если лог непустой, то
    # пишем в него какой процесс занимает (попутно приводим к приличному виду с помощью awk)

    lsof | grep /media/usb/ | awk '{print $2"\t"$1"\t"$9}' > $LOG

    # если есть лог, то пишем, что флешка занята

    if gxmessage -file $LOG -name "Флешка занята!" \
        -buttons "Force:0,Cancel:1";
    then

        while [[ -n `echo $if_mounted` ]]; do
            # при нажатии на Force убиваем процессы, которые занимают флешку

            fuser -km $MOUNT_POINT
            # и пытаемся снова отмонтировать
            my_umount
            if_mounted=`grep $MOUNT_POINT /etc/mtab`
            # пока не отмонтируем (пока /etc/mtab не будет содержать "/media/usb")

        done
        gxmessage "Флешка успешно отмонтирована"
    fi

else
        gxmessage "Флешка отмонтирована"

fi

Цикл я использовать поначалу не планировал, думал просто скомандовать

fuser -km $MOUNT_POINT
my_umount

но оказалось, что команды не выполныются последовательно. Почему-то срабатывает вторая, пока ещё не отработала первая (стало быть ничего не отмонтировалось, потому что всё ещё были живы процессы). && не помогало. А использовать sleep перед второй командой не совсем честно. Поэтому и организовал цикл, который не закончится, пока точно флешке не отмонтируется. Только после этого выведется сообщение об успешном усходе нашего предприятия.

Итак, скриншоты.

Когда флешка занята, видим кто мешает:

После нажатия на «Force» процессы убиты, флешка отмонтирована и мы видим:

Ура! :)

Дело за малым:

  • обзываем скрипт umount_usb
  • делаем его исполняемым (chmod u+x umount_usb)
  • кладём куда-нибудь в $PATH (например, в ~/bin, при этом добавить в ~/.bashrc export PATH="$PATH:$HOME/bin")
  • настраиваем sudo, чтобы запускать umount без запроса пароля (смотри здесь на предмет NOPASSWD, тогда в скрипте mount меняем на sudo mount), либо смотрим на мои опции в /etc/fstab (user позволяет от обычного пользователя монтировать): /dev/sdb1 /media/usb auto user,noauto,iocharset=utf8,showexec 0 0 (для кого это - китайская грамота следует прочитать это)
  • назначаем горячую клавишу. Например, я использую xbindkeys. В ~/.xbindkeys: пишем
  "umount_usb"
  Mod4+u

Заключение

Данное решение может пригодиться пользователям оконных менеджеров. Разумеется, основной недостаток заключается в том, что оно применимо лишь для файловых систем, имеющих один раздел. У меня других и нет. Но для кого-то это критично. На первый взгляд не должно возникнуть больших проблем в плане распространения данного способа на случай более сложной таблицы разделов.


Читать далее…

понедельник, 8 июня 2009 г.

Подмонтирована ли флешка?

Как известно, перед выдёргиванием флешки надо удостовериться отмонтирована ли файловая система, чтобы не потерять записанные данные и не испортить файловую систему. Пользователи линукс с этим знакомы особо, динозавры привыкли к mount/umount.

Не знаю, у кого как, а у меня иногда возникают сомнения, а отмонтировал ли я флешку или нет. Конечно можно воспользоваться файловым менеджером типа nautilus, thunar, pcmanfm и проделать это вновь для верности что представляет лишние телодвижения. Есть апплеты на панели, типа как в винде, но по мне это лишние свистелки (весьма приличный в kde3, но кедами я не пользуюсь), поэтому в консоли, которая всегда под рукой, я для этого набирал df.

Отображение в Conky

Ещё один альтернативный путь, который я стал использовать, и который, быть может, покажется кому-нибудь полезным заключается в отображении статуса в системном мониторе conky.

Conky - это программа для мониторинга системы. Легковесная, функциональная, позволяющая слепить почти всё, что захотите. Для получения более полной информации можно прочитать этот великолепный пост.

В конфигурационном файле ~/.conkyrc в разделе «TEXT», в котором и настраивается что будет отображаться на экране, я добавил следующую строку:

${if_mounted /media/usb}${color red}Usb stick is mounted ${alignr}${fs_bar 7,70 /media/usb}${else}${color}Usb stick is NOT mounted ${endif}

Интуитивно понятно, что выполняет конструкция ${if_mounted /media/usb}если_подмонтирована${else}если_не_подмонтирована${endif}. Таким образом, если файловая система флешки подмонтирована в /media/usb, то видим красную надпись «Usb stick is mounted» и красную полоску с индикацией степени заполнения свободного места флешки. В обратном случае увидим надпись «Usb stick is NOT mounted».

Mount, umount в xbindkeys

Теперь, если надо отмонтировать флешку просто надо скомандовать umount /media/usb. Разумеется, здорово было бы забиндить это на какую-нибудь комбинацию клавиш. Например, может придти на помощь программа xbindkeys. В файл ~/.xbindkeysrc пропишем следующие строки:

"mount /media/usb"
Mod4 + i

"umount /media/usb"
Mod4 + u
Программу необходимо запускать всякий раз при старте иксов, например, добавив в ~/.xinitrc строку «xbindkeys &». Таким образом, при нажатии Win+i будет производиться монтирование, а Win+u - размонтирование.

Вот, собственно, и всё :)


Читать далее…

воскресенье, 24 мая 2009 г.

Изменение оформления gtk-приложений

Пользователи среды GNOME могут легко изменить используемую тему оформления, для этого надо просто залезть в графический настройщик внешнего вида и выбрать нужную тему или добавить новую. Но что если вы используете оконный менеджер (WM) вместо DE, который просто по определению не предоставляет такой функционал? В таком случае всегда есть возможность ручной правки конфигов для gtk-приложений. Также присутствуют графические программы, дающие возможность менять тему оформления.

Правка конфигурационного файла

Выбор темы

Конфигурационный файл, который необходимо подправить для изменения темы оформления, имеет имя ~/.gtkrc-2.0. В моём случае этот файл имеет следующий вид (создан с применением прекрасной программы lxappearance из проекта LXDE, хотя можно это и самому написать - результат будет тем же):

gtk-theme-name="Industrial"
gtk-icon-theme-name="gnome-brave"
gtk-font-name="DejaVu Sans 10"
gtk-toolbar-style=0
include "/home/maxim/.gtkrc-2.0.mine"

Итак, что же это означает? Первая строка говорит, что надо использовать тему оформления Industrial, а вторая - что должны использоваться иконки gnome-brave.

Темы оформления лежат в директориях /usr/share/themes/, а иконки /usr/share/icons/. Свои темы и иконки принято кидать в ~/.themes и ~/.icons соответственно. Именно там будут искаться, хотя можно использовать и абсолютный путь до директории с темой.

В третьей строке задаётся используемый шрифт и размер шрифта.

"gtk-toolbar-style=0" означает, что будут отображаться только кнопки, без подписей к ним. Значение 1 даст только подписи без значков, 2 - подписи и значки.

Последняя строчка означает, что также будет считываться содержимое файла "/home/maxim/.gtkrc-2.0.mine". Для чего это надо? Например, есть графические программы, позволяющие настраивать вид gtk-приложений, при этом переписывая всё, что было до этого, кроме строк, содержащих include. Именно в файле "/home/maxim/.gtkrc-2.0.mine" у меня лежат персональные настройки, которые нельзя сделать с помощью простых графических утилит.

Дополнительные настройки

В файле /home/maxim/.gtkrc-2.0.mine я добавил следующие настройки.

Клавиатурные сокращения как в Emacs

Чтобы в gtk-приложениях работали клавиатурные сокращения для перемещения курсора и удаления текста, аналогичные емаксовским, необходимо добавить строку:

gtk-key-theme-name = "Emacs"

Пользователям GNOME этого может оказаться недостаточно, возможно придётся копаться в gconf. Об этом и вообще о емаксовских сокращениях в gtk можно почитать в этом сообщении.

Изменение размера иконок на элементах управления

Многим кажется неудобным, что в gtk-приложениях используются по умолчанию весьма большие иконки на кнопках типа открыть/закрыть/сохранить и т.д. Это легко исправить, внеся следующие настройки:

gtk-icon-sizes = "panel-menu=32,32:panel=32,32:gtk-menu=16,16\
:gtk-large-toolbar=24,24:gtk-small-toolbar=16,16:gtk-button=24,24"
Размеры, разумеется, можно подогнать по своему желанию.

Графические утилиты

Несомненное преимущество графических утилит состоит в том, что можно видеть какую тему вы выбираете не методом проб и ошибок, а, так сказать, in situ, то есть, прямо здесь и сейчас, с предпросмотром.

Как я уже отметил выше, мой конфигурационный файл, содержащий тему, был создан с помощью программы LXAppearance. Она позволяет как выбрать тему, так и шрифт, иконки, и настроить способ отображения элементов управления.

Когда я в последний раз видел программу gtk-chtheme она позволяла лишь производить выбор тем и шрифта с предпросмотром, не более того. Но уж это она делает прекрасно.

Быть может, есть и другие легковесные программы, не привязанные к каким-лобо DE, для подобного рода действий, но и этого вполне достаточно.


Читать далее…