В статье покажу как оптимизирую рабочий стол для маленького разрешения ноутбука (1280х800) и рассмотрю пару полезных утилит для работы с окнами в gnome второй версии.
Так повелось, что gnome у меня стал рабочим столом в linux. И так сложилось, что решил использовать ноутбук “по полной”, как рабочую лошадку, чтоб не возится с синхронизацией данных на нескольких рабочих машинах. Поэтому работу за ноутбуком нужно было сделать максимально удобной.
Note
Возможно скоро променяю gnome на какой-нибудь тайловый оконный менеджер и debian на archlinux, поэтому решил записать этот рецепт, которым пользуюсь уже давно, может кому еще пригодится.
До этого любил сидеть за монитором с большим разрешением 1600x1200 (Samsung-SyncMaster-204b, 20 дюймов), и когда садился за ноут (1280х800) мне было неудобно, что на экране мало всего помещается. Решение: нужно по максимуму оптимизировать визуальное пространство, занимаемое приложениями.
Первым делом думал избавиться от одной из панелей (по умолчанию в gnome их две, внизу и вверху экрана). Верхняя панелька мне очень понравилась еще при первом запуске gnome и ее удалять совсем не хотелось. Но места на ней совсем не хватало еще и для списка окон:
Список окон мне тоже оказался очень нужен и желательно, чтоб места для него было побольше:
Панельки так и остались у меня на своих местах :) как в debian по умолчанию. Я пробовал для них автоскрытие, но не пошло. Про режим на весь экран у приложений тоже помнил, но мне нужны были панельки, т.к. постоянно их использую.
Нужно было оптимизировать пространство между этими панельками.
Декорация окон. Когда окно не развернуто на весь рабочий стол, то в декорациях есть смысл: потянуть за заголовок, растянуть окно. А вот когда окно максимизировано, то частично смысл в декорациях теряется, да еще и место занимают. Действия типа: скрыть окно (Alt+F9), закрыть окно (Alt+F4), максимизировать (Alt+F10) хорошо выполняются через быстрые клавиши. Поэтому убираем декорацию окон, когда они максимизированы. Для этого есть пакет maximus в debian:
$ aptitude install maximus
По умолчанию maximus разворачивает все окна на весь экран. Есть вариант прописывать exclude_class, но я поступил по-другому - отключил максимизацию:
$ gconftool -s /apps/maximus/no_maximize --type bool true $ gconftool -R /apps/maximus undecorate = true binding = disabled exclude_class = [Totem,Gnome-system-monitor] no_maximize = true
Т.е. максимизировать окна буду вручную через Alt+F10.
В общем уже неплохо, но ряд приложений после запуска нужно сразу максимизировать, т.к. они не хотят запоминать своих размеров и положения… Лишние телодвижения: запустить, нажать Alt+F10, а хочется просто запустить.
И тут на помощь приходит devilspie. Он может работать не только с классами окон (exclude_class из maximus - это список классов окон), но и может проверить имя приложения, класс и имя окна и еще ряд атрибутов. Причем может проверить атрибут не только на соответствие, а и на содержание (contains) и соответствие регулярному выражению. Действия над окнами тоже разные: maximize, unmaximize, focus и undecorate даже :).
Инструмент нашли, дальше используем.
$ aptitude install devilspie
Создаем файл ~/.devilspie/common.ds. И помещаем туда что-то типа:
1 (begin 2 ;(debug) 3 (if 4 (or 5 (contains(application_name) "Vim") 6 (contains(application_name) "Terminal") 7 (contains(window_name) "New Tab - Google Chrome") 8 (contains(window_name) "FatRat") 9 (contains(window_name) "Document Viewer") 10 (contains(window_name) "Clementine") 11 (is(window_name) "DreamPie") 12 ) 13 (maximize) 14 ) 15 )
И добавляем devilspie в автозагрузку.
Обычно работаю с конфигом ~/.devilspie/common.ds следующим образом. Добавляю строку с дебагом (например: убрать “;” в начале строки №2 в приведенном выше листинге), убиваю процесс devilspie и запускаю его в терминале. В терминал начинают писаться атрибуты окон. Пример сессии:
$ killall devilspie $ devilspie Window Title: 'naspeh@free: '; Application Name: 'Terminal'; Class: 'Gnome-terminal'; Geometry: 1280x774+0+3 Window Title: 'pusto.org: Edit for fun - Iceweasel'; Application Name: 'Iceweasel'; Class: 'Iceweasel'; Geometry: 1280x774+0+3 Window Title: 'x-nautilus-desktop'; Application Name: 'File Manager'; Class: 'Nautilus'; Geometry: 1280x800+0+0 Window Title: 'Bottom Expanded Edge Panel'; Application Name: 'Bottom Expanded Edge Panel'; Class: 'Gnome-panel'; Geometry: 1280x24+0+776 Window Title: 'Top Expanded Edge Panel'; Application Name: 'Top Expanded Edge Panel'; Class: 'Gnome-panel'; Geometry: 1280x25+0+0
Потом открываю нужное мне окно, смотрю атрибуты, правлю конфиг, перезапускаю devilspie и так пока не будет все хорошо :).
Раз уж используем devilspie, можно с его помощью еще что-то замутить.
Например, Skype очень жутко ведет себя в linux. Один из боков: хочется чтоб окна чатов открывались в одном месте и одинакового размера. Если заниматься этим вручную, то тут нужно подгонять каждое новое окно чата мышкой, изрядно потыкав. И тут на помощь приходит действие geometry из devilspie.
Пример debug:
Window Title: 'Skype? 2.2 (Beta) for Linux'; Application Name: 'Skype? 2.2 (Beta) for Linux'; Class: 'Skype'; Geometry: 266x487+0+25 Window Title: 'Anastasie - Skype? Chat'; Application Name: 'Skype'; Class: 'Skype'; Geometry: 824x619+456+95
(if (and (contains(window_name) "Skype") (matches(window_role) "ConversationsWindow") ) (geometry "800x675+365-0") )
Для получения window_role использовал xprop, который содержится в x11-utils.
Есть действия, которые каждодневно повторяются, и если на них потратить немного времени и автоматизировать, то в конечном счете сэкономится пара ненужных телодвижений в день :). Как говорится: настрой свой linux под себя.
Напоследок скриншот экрана: