Первое время, после переезда под Linux, я использовал его "по-виндовому". У меня редко использовалось больше одного рабочего стола. Большинство приложений варилось в одном котле с доступом по
Там есть много советов, но один из самых главных - распределять приложения по рабочим столам в зависимости от задач. Инструменты для написания-редактирования программ - на одном рабочем столе, инструменты для общения - на втором, браузер - на третьем.
Организуя свою систему я довел принцип до логического завершения - "один рабочий стол - одно приложение" и - самое главное. Приложения должны распределяться по рабочим столам автоматически. Все должна делать сама система.
читать дальше в wordpress'e
Как я распределяю свои рабочие столы? После достаточно долгих экспериментов у меня сложилась следующая раскладка:
1 - текстовый редактор (в моем случае - gvim).
2 - терминал (sakura, с включенным внутри нее screen).
3 - firefox и другие браузеры (иногда бывает необходимо использовать midori, например).
4 - файловые менеджеры (nautilus, pcmanfm).
5 - раньше использовался для мультимедии (mplayer, rhythmbox), но сейчас я использую в основном консольный MOC-player и реже - cmus, которые крутятся под screen в терминале. Так что в настоящее время этот стол работает резервным.
6 - "болталки" aka Инстант-менеджеры (pidgin, skype).
7 - почтовый клиент (thunderbird).
8 - резервный стол.
Такая раскладка столов выбрана не случайно. Я перепробовал несколько вариантов. Стало понятно, что на первом рабочем столе должно открываться наиболее часто используемое приложение, на втором - менее часто и так далее.
Чаще всего я пишу-читаю-редактирую текстовые файлы - от программ до собственно текстов. Поэтому вим у меня на первом столе и открыт почти всегда. То же касается терминала - поскольку
Приложения, которые не попали в список открываются там где это удобно. Поскольку я их использую не так уж часто и почти сразу закрываю - это не мешает основной работе, скорее наоборот, придает процессу гибкости.
Переключение по рабочим столам у меня вполне традиционно настроено на сочетание клавиш
Какие преимущества имеет такая система? Прежде всего - включается и начинает работать пространственная и моторная память. Все лежит на своих местах. Через неделю распределение программ по столам настолько входит в привычку, что выполняешь его не задумываясь. Я точно знаю где при монтировании флэшки окажется открывающееся окно nautilus'а. Четвертый стол, Alt+4.
Руки нажимают нужные кнопки сами, быстрее чем мозг успевает сформулировать что именно нужно сделать. Посмотреть почту? Alt+7. Написать заметку? Alt+1. Посмотреть статью в Википедии? Alt+3. Скопировать ссылку из браузера в текст? Alt+3, Ctrl+l, Ctrl+c, Alt+1, Ctrl+v.
Ускорение работы очень ощутимо. Нужное окно попадает в фокус ровно после того, как я о нем задумываюсь. Вместо того, чтобы копаться мышкой в ворохе окон я сразу попадаю в нужное мне место. Автоматизм настолько закрепляется, что я не могу убрать пятое окно - я уже привык искать пиджин на шестом столе и тандерберд - на седьмом.
Такая система делает ненужной доки (все и так лежит на своих местах) и... панель запуска задач. Некоторое время я по-старинке использовал панель задач в GNOME, потом, когда перешел на OpenBox - тоже по инерции поставил
Дальше - я ушел от многозадачности. Вместо кучи окошек, раскиданных по плоскости рабочего стола у меня в каждый момент времени открыто ровно одно окно, ровно одного процесса. Все остальные спокойно и неавязчиво ждут своей очереди. Если я редактирую текст - я редактирую текст, если я смотрю почту - я смотрю почту, если я брожу по интернету - я брожу по интернету.
При этом скорость переключения между процессами не страдает - я всегда могу быстро кинуть нужный текст в заметки или наоборот - превратить кусочек блога в письмо или пост. Разница в том, что режим "одно окно - один текст" позволяет сознательно контролировать свою работу и сводит к нулю большинство отвлекающих сигналов, засоряющих внимание. Кстати, это еще одна причина по которой у меня не пошли тайловые менеджеры - у меня не получается сосредоточиться на процессе, если по периферии окна висит пиджин с гуглотоком, тандерберд со свежими письмами и файрфокс с десятком вкладок.
Как реализовать такой режим работы? OpenBox позволяет такое по дефолту - то есть достаточно открыть
Пример моего конфига.
Некоторые пояснения:
Название и прочие данные для своих приложений можно определить с помощью
Их можно использовать в качестве имени программы. Как правило имени хватает, но иногда возникает необходимость более точного "наведения на цель" - скажем в Пиджине мне хочется, чтобы окно с диалогами (role="conversation") разворачивалось во весь экран, а список пользователей (role="buddy_list") оставался таким как есть. Поэтому для них есть две отдельные команды.
Без "декораций" - то есть - без рамки окна и кнопок "свернуть-развернуть-закрыть") - с vim и sakura я работаю в основном с клавиатуры, поэтому сразу убираю у них лишние элементы интерфейса чтобы освободить побольше рабочего места.
Клавиши навигации по рабочим столам настраиваются еще проще и в том же
Разумеется, это не единственное решение. В GNOME, насколько мне известно, подобным образом можно настроить Compiz - но подробно я этот вопрос не исследовал, поскольку в тот момент уже перешел к OpenBox как основной рабочей системе.
Как вариант - можно встроить OpenBox в качестве менеджера окон GNOME (вместо metacity или compiz) и настроить OpenBox так, как указано выше.
В принципе почти наверняка большинство оконных менеджеров имеет похожие средства управления окнами, так что не ленитесь читать документацию того приложения, которым пользуетесь.
Часто на форумах рекомендуют использовать для управления окнами утилиту
Есть утилита
Выглядит оно примерно так:
Каждая команда ориентируется на заголовок окна. Первая из команд разворачивает окно на максимум, вторая - посылает на нужный рабочий стол. Не знаю почему, но wmctrl считает столы с нуля, поэтому если файрфокс отрпавляется на рабочий стол номер три - надо писать
Еще один любопытный момент. Перечитывая этот пост, я заметил, что большинство используемых мной программ - это достаточно мощные системы, каждая из которых завязана на определенный вид работы. То есть, например, файрфокс - сейчас больше чем браузер - это "комбайн" для работы с сетевыми приложениями. Аналогично "комбайнами" можно назвать и vim и screen - с одной стороны у них очень простые механизмы работы, с другой они позволяют накручивать на себя функционал, для реализации которого потребовалось бы множество стороннего софта, сил и средств. Например, при запуске screen у меня в нем автоматически подгружается ttytter (очень удобный twitter-клиент), mocp и htop. И так далее.
То есть рабочие столы в моей системе это не только "ящик для одного приложения" - это скорее "режим работы" - с текстом, с консолью, с интернетом, с файлами, общение, почта.
Alt-Tab
. И вообще полезность множества рабочих столов теоретически была понятна, но практически я не особо ей пользовался. Впервые о том, как я использую свою систему я задумался прочитав у уважаемого Оллеката о тайловых менеджерах, однако для моих целей они оказались избыточны - как минимум по причине маленького монитора. Потом, листая форумы unixforums.org, я натолкнулся на тему о интерфейсах линукс, в частности - на заметку Федорчука о том, как он использует свою систему.Там есть много советов, но один из самых главных - распределять приложения по рабочим столам в зависимости от задач. Инструменты для написания-редактирования программ - на одном рабочем столе, инструменты для общения - на втором, браузер - на третьем.
Организуя свою систему я довел принцип до логического завершения - "один рабочий стол - одно приложение" и - самое главное. Приложения должны распределяться по рабочим столам автоматически. Все должна делать сама система.
читать дальше в wordpress'e
- распределение пространства
Как я распределяю свои рабочие столы? После достаточно долгих экспериментов у меня сложилась следующая раскладка:
1 - текстовый редактор (в моем случае - gvim).
2 - терминал (sakura, с включенным внутри нее screen).
3 - firefox и другие браузеры (иногда бывает необходимо использовать midori, например).
4 - файловые менеджеры (nautilus, pcmanfm).
5 - раньше использовался для мультимедии (mplayer, rhythmbox), но сейчас я использую в основном консольный MOC-player и реже - cmus, которые крутятся под screen в терминале. Так что в настоящее время этот стол работает резервным.
6 - "болталки" aka Инстант-менеджеры (pidgin, skype).
7 - почтовый клиент (thunderbird).
8 - резервный стол.
Такая раскладка столов выбрана не случайно. Я перепробовал несколько вариантов. Стало понятно, что на первом рабочем столе должно открываться наиболее часто используемое приложение, на втором - менее часто и так далее.
Чаще всего я пишу-читаю-редактирую текстовые файлы - от программ до собственно текстов. Поэтому вим у меня на первом столе и открыт почти всегда. То же касается терминала - поскольку
sakura-screen
открыта у меня почти постоянно - я даже перестал в последнее время пользоваться "выпадающей консолью". Само собой - на третьем месте firefox
, как инструмент для работы с интернетом. Пиджин и почта умышленно загнаны "на Камчатку" - дабы поменьше отвлекали от рабочего процесса.Приложения, которые не попали в список открываются там где это удобно. Поскольку я их использую не так уж часто и почти сразу закрываю - это не мешает основной работе, скорее наоборот, придает процессу гибкости.
- навигация по рабочим столам
Переключение по рабочим столам у меня вполне традиционно настроено на сочетание клавиш
<Alt+номер стола>
, <Win+номер стола>
. Так же очень удобное хотя и используемое гораздо реже сочетание <Win+Shift+номер стола>
, которое перемещает текущее активное окно на стол с нужным рабочим номером. Относительными перемещениями ("перейти на стол влево-вправо") я не пользуюсь.- впечатления от работы
Какие преимущества имеет такая система? Прежде всего - включается и начинает работать пространственная и моторная память. Все лежит на своих местах. Через неделю распределение программ по столам настолько входит в привычку, что выполняешь его не задумываясь. Я точно знаю где при монтировании флэшки окажется открывающееся окно nautilus'а. Четвертый стол, Alt+4.
Руки нажимают нужные кнопки сами, быстрее чем мозг успевает сформулировать что именно нужно сделать. Посмотреть почту? Alt+7. Написать заметку? Alt+1. Посмотреть статью в Википедии? Alt+3. Скопировать ссылку из браузера в текст? Alt+3, Ctrl+l, Ctrl+c, Alt+1, Ctrl+v.
Ускорение работы очень ощутимо. Нужное окно попадает в фокус ровно после того, как я о нем задумываюсь. Вместо того, чтобы копаться мышкой в ворохе окон я сразу попадаю в нужное мне место. Автоматизм настолько закрепляется, что я не могу убрать пятое окно - я уже привык искать пиджин на шестом столе и тандерберд - на седьмом.
Такая система делает ненужной доки (все и так лежит на своих местах) и... панель запуска задач. Некоторое время я по-старинке использовал панель задач в GNOME, потом, когда перешел на OpenBox - тоже по инерции поставил
lxpanel
. Когда я недавно экспериментировал с настройками системы - случайно отключил ее. К моему удивлению, ее отсутствие почти не отразилось на моей работе с системой - я хорошо помнил где что лежит и переключался на нужные столы даже не видя где они находятся и что в них запущено. Поэкспериментировав, я понял, что могу работать с системой "наощупь" без особой потери темпа. Я понял что панелью задач не пользуюсь и сейча потихоньку перехожу к tint2
в режиме псевдопейджера.Дальше - я ушел от многозадачности. Вместо кучи окошек, раскиданных по плоскости рабочего стола у меня в каждый момент времени открыто ровно одно окно, ровно одного процесса. Все остальные спокойно и неавязчиво ждут своей очереди. Если я редактирую текст - я редактирую текст, если я смотрю почту - я смотрю почту, если я брожу по интернету - я брожу по интернету.
При этом скорость переключения между процессами не страдает - я всегда могу быстро кинуть нужный текст в заметки или наоборот - превратить кусочек блога в письмо или пост. Разница в том, что режим "одно окно - один текст" позволяет сознательно контролировать свою работу и сводит к нулю большинство отвлекающих сигналов, засоряющих внимание. Кстати, это еще одна причина по которой у меня не пошли тайловые менеджеры - у меня не получается сосредоточиться на процессе, если по периферии окна висит пиджин с гуглотоком, тандерберд со свежими письмами и файрфокс с десятком вкладок.
- примеры настройки системы "под себя"
Как реализовать такой режим работы? OpenBox позволяет такое по дефолту - то есть достаточно открыть
~/.config/openbox/rc.xml
и найти и настроить в нем соответствующие разделы.Пример моего конфига.
...
<applications>
...
<application name="gvim">
<desktop>1</desktop>
<maximized>yes</maximized>
<decor>no</decor>
</application>
<application name="sakura">
<desktop>2</desktop>
<decor>no</decor>
<maximized>yes</maximized>
</application>
<application name="firefox-bin" role="browser">
<desktop>3</desktop>
<maximized>yes</maximized>
</application>
<application name="WinMakezTxT.exe">
<desktop>3</desktop>
</application>
<application name="nautilus">
<desktop>4</desktop>
</application>
<application name="pcmanfm">
<desktop>4</desktop>
</application>
<application name="Pidgin" role="buddy_list">
<desktop>6</desktop>
</application>
<application name="Pidgin" role="conversation">
<desktop>6</desktop>
<maximized>yes</maximized>
</application>
<application name="thunderbird-bin" role="3pane">
<desktop>7</desktop>
<maximized>yes</maximized>
</application>
...
</applications>
...
Некоторые пояснения:
name="gvim" - название-класс-роль приложения
Название и прочие данные для своих приложений можно определить с помощью
obxprop
. У этой утилиты после запуска появляется крестик-курсор, которым нужно кликнуть по нужному приложению. Она срабатывает и выводит массу информации о нем, включая нужные данные. Например, для firefox
я получаю в том числе следующие строки:_OB_APP_TYPE(UTF8_STRING) = "normal"
_OB_APP_CLASS(UTF8_STRING) = "Firefox-bin"
_OB_APP_NAME(UTF8_STRING) = "firefox-bin"
_OB_APP_ROLE(UTF8_STRING) = "browser"
Их можно использовать в качестве имени программы. Как правило имени хватает, но иногда возникает необходимость более точного "наведения на цель" - скажем в Пиджине мне хочется, чтобы окно с диалогами (role="conversation") разворачивалось во весь экран, а список пользователей (role="buddy_list") оставался таким как есть. Поэтому для них есть две отдельные команды.
<desktop>1</desktop> - на каком рабочем столе запускать
<maximized>yes</maximized> - распахнуть на весь стол
<decor>no</decor> - запустить без декораций
Без "декораций" - то есть - без рамки окна и кнопок "свернуть-развернуть-закрыть") - с vim и sakura я работаю в основном с клавиатуры, поэтому сразу убираю у них лишние элементы интерфейса чтобы освободить побольше рабочего места.
Клавиши навигации по рабочим столам настраиваются еще проще и в том же
rc.xml
...
<keyboard>
...
<keybind key="A-1"> <action name="Desktop"> <desktop>1</desktop> </action> </keybind>
<keybind key="A-2"> <action name="Desktop"> <desktop>2</desktop> </action> </keybind>
<keybind key="A-3"> <action name="Desktop"> <desktop>3</desktop> </action> </keybind>
<keybind key="A-4"> <action name="Desktop"> <desktop>4</desktop> </action> </keybind>
<keybind key="A-5"> <action name="Desktop"> <desktop>5</desktop> </action> </keybind>
<keybind key="A-6"> <action name="Desktop"> <desktop>6</desktop> </action> </keybind>
<keybind key="A-7"> <action name="Desktop"> <desktop>7</desktop> </action> </keybind>
<keybind key="A-8"> <action name="Desktop"> <desktop>8</desktop> </action> </keybind>
<keybind key="W-1"> <action name="Desktop"><desktop>1</desktop></action> </keybind>
<keybind key="W-2"> <action name="Desktop"><desktop>2</desktop></action> </keybind>
<keybind key="W-3"> <action name="Desktop"><desktop>3</desktop></action> </keybind>
<keybind key="W-4"> <action name="Desktop"><desktop>4</desktop></action> </keybind>
<keybind key="W-5"> <action name="Desktop"><desktop>5</desktop></action> </keybind>
<keybind key="W-6"> <action name="Desktop"><desktop>6</desktop></action> </keybind>
<keybind key="W-7"> <action name="Desktop"><desktop>7</desktop></action> </keybind>
<keybind key="W-8"> <action name="Desktop"><desktop>8</desktop></action> </keybind>
<keybind key="W-S-1"> <action name="SendToDesktop"><desktop>1</desktop></action> </keybind>
<keybind key="W-S-2"> <action name="SendToDesktop"><desktop>2</desktop></action> </keybind>
<keybind key="W-S-3"> <action name="SendToDesktop"><desktop>3</desktop></action> </keybind>
<keybind key="W-S-4"> <action name="SendToDesktop"><desktop>4</desktop></action> </keybind>
<keybind key="W-S-5"> <action name="SendToDesktop"><desktop>5</desktop></action> </keybind>
<keybind key="W-S-6"> <action name="SendToDesktop"><desktop>6</desktop></action> </keybind>
<keybind key="W-S-7"> <action name="SendToDesktop"><desktop>7</desktop></action> </keybind>
<keybind key="W-S-8"> <action name="SendToDesktop"><desktop>8</desktop></action> </keybind>
...
</keyboard>
...
- варианты решений
Разумеется, это не единственное решение. В GNOME, насколько мне известно, подобным образом можно настроить Compiz - но подробно я этот вопрос не исследовал, поскольку в тот момент уже перешел к OpenBox как основной рабочей системе.
Как вариант - можно встроить OpenBox в качестве менеджера окон GNOME (вместо metacity или compiz) и настроить OpenBox так, как указано выше.
В принципе почти наверняка большинство оконных менеджеров имеет похожие средства управления окнами, так что не ленитесь читать документацию того приложения, которым пользуетесь.
Часто на форумах рекомендуют использовать для управления окнами утилиту
devilspie
, но у меня он не работал так, как было мне нужно. Поэтому вместо него на первых порах - когда я еще не добрался до OpenBox я использовал совсем примитивное решение.Есть утилита
wmctrl
- она управляет окнами из командной строки. На ее вход можно подать название окна и номер стола, куда его нужно отправить. Я написал скрипт, который растасовывает запущенные приложения по рабочим столам и связал его с кнопкой на панели GNOME. После запуска нужных приложений, я нажимал на эту кнопку и они раскладывались по нужным рабочим столам. Решение неуклюжее, но вполне рабочее.Выглядит оно примерно так:
#! /bin/sh
# рабстол номер раз - все вимы
wmctrl -r "GVIM" -b add,maximized_vert,maximized_horz
wmctrl -r "GVIM" -t 0
...
# рабстол номер три - файрфокс
wmctrl -r "firefox" -b add,maximized_vert,maximized_horz
wmctrl -r "firefox" -t 2
# рабстол номер семь - почта
wmctrl -r "thunderbird" -b add,maximized_vert,maximized_horz
wmctrl -r "thunderbird" -t 6
...
exit
Каждая команда ориентируется на заголовок окна. Первая из команд разворачивает окно на максимум, вторая - посылает на нужный рабочий стол. Не знаю почему, но wmctrl считает столы с нуля, поэтому если файрфокс отрпавляется на рабочий стол номер три - надо писать
wmctrl -r "firefox" -t 2
.- P.S.
Еще один любопытный момент. Перечитывая этот пост, я заметил, что большинство используемых мной программ - это достаточно мощные системы, каждая из которых завязана на определенный вид работы. То есть, например, файрфокс - сейчас больше чем браузер - это "комбайн" для работы с сетевыми приложениями. Аналогично "комбайнами" можно назвать и vim и screen - с одной стороны у них очень простые механизмы работы, с другой они позволяют накручивать на себя функционал, для реализации которого потребовалось бы множество стороннего софта, сил и средств. Например, при запуске screen у меня в нем автоматически подгружается ttytter (очень удобный twitter-клиент), mocp и htop. И так далее.
То есть рабочие столы в моей системе это не только "ящик для одного приложения" - это скорее "режим работы" - с текстом, с консолью, с интернетом, с файлами, общение, почта.