Проблема
Если вы - пользователь лёгкого оконного менеджера и используете по большей части консольные приложения, или такие программы, как, например, 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.
Копируете статью - поставьте ссылку на оригинал!
Спасибо. Мне статья очень помогла, когда мне понадобилось сменить иконку для xterm. Самое удобное, декларативное решение. Хотя при поиске в гугле выдаются другие советы: .Xresources + xbm-иконка, и некая некомпилирующаяся у меня утилита xseticon.
ОтветитьУдалить