Пространственная память, Рабочие столы и Линуксовый десктоп

Первое время, после переезда под Linux, я использовал его «по-виндовому». У меня редко использовалось больше одного рабочего стола. Большинство приложений варилось в одном котле с доступом по Alt-Tab. И вообще полезность множества рабочих столов теоретически была понятна, но практически я не особо ей пользовался. Впервые о том, как я использую свою систему я задумался прочитав у уважаемого Оллеката о тайловых менеджерах, однако для моих целей они оказались избыточны — как минимум по причине маленького монитора. Потом, листая форумы unixforums.org, я натолкнулся на тему о интерфейсах линукс, в частности — на заметку Федорчука о том, как он использует свою систему.

Там есть много советов, но один из самых главных — распределять приложения по рабочим столам в зависимости от задач. Инструменты для написания-редактирования программ — на одном рабочем столе, инструменты для общения — на втором, браузер — на третьем.

Организуя свою систему я довел принцип до логического завершения — «один рабочий стол — одно приложение» и — самое главное. Приложения должны распределяться по рабочим столам автоматически. Все должна делать сама система.

  • распределение пространства

Как я распределяю свои рабочие столы? После достаточно долгих экспериментов у меня сложилась следующая раскладка:

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. И так далее.

То есть рабочие столы в моей системе это не только «ящик для одного приложения» — это скорее «режим работы» — с текстом, с консолью, с интернетом, с файлами, общение, почта.

Реклама

14 Responses to Пространственная память, Рабочие столы и Линуксовый десктоп

  1. Фактически ты из openbox сделал руками tiled wm. :) Я тоже какое-то время так делал, после xmonad. Потом все же окончательно перешел под awesome. Экранов у меня правда не 8, а 9. :) 9-ый у меня обычно используется под игры. ;)
    На самом деле ты совершенно прав: «оддно приложение — один экран» гораздо удобнее, нежли переключатся между приложениями на одном. И когда привыкнешь руки сами на автомате переключают нужный экран. :)

  2. Безумно виноват, что затянул с ответом. На самом деле во-первых благодарен за обратную связь — для меня это всегда ценно. Во-вторых было бы интересно подробнее узнать о том, какие у тебя шорткаты. Я себе голову сломал, настраивая бокс. То есть как настраивать оно понятно, но я разрывался в две стороны — мне хотелось с одной стороны оптимальных и быстрых, «вимообразных» клавиатурных сокращений, с другой — системы, которая бы не очень конфликтовала с распространенными стандартами — чтобы не переключать мозг, работая в чужих средах. Как-то так.

  3. Ну и еще было бы интересно знать — что за игры на 9-ом столе :)

  4. Ну по поводу клавиатурных сокращений я особо не парился, не пытался их подогнать под что-то. Я взял готовые стандартные клавиатурные сокращения awesome/xmonad и лишь парочку видоизменил в связи со своими старыми привычками. :) Ну и пару добавил. ;) В частности сделал alt+f4 на закрытие окон, ибо штатная комбинация для меня была очень уж не привычна.

    Так же поделал несколько правил рассовывания окон самых употребимых приложений по экранам. Собственно и все :) Если очень интересно — могу дать свой lua файл, там все прозрачно и к тому же откоментировано.

  5. С этим все просто. :) Под вайном:

    diablo2, plants_vs_zombies, sacred, Saiko_mahjong, space_rangers2

    Нативные: heroes 3, unreal turnament, mechanarium

    Ну и иногда на air: magic.ru

    Вот примерно так. :)

  6. Пасибо :))) С удовольствием посмотрю на lua. Кстати, как этот язык осваивать? Просто на ходу или есть хорошее руководство?

    Вот что я еще хотел узнать. Как в OpenBox настроить в меню выход «сразу» т.е. аналог shutdown now. Поскольку я до сих пор сначала вываливаюсь в gdm по exit, а потом уже гашу систему.

  7. Иэх. А я когда-то купил себе джойстик и режусь в X-Wing под настроение :)

  8. Честно говоря я особо не заморачивался в его изучении, так как он мне был нужен только для конфигурирования awesome. ;) А на этом уровне даже не пришлось ничего читать, так, пару раз в доку заглянул, в основном что бы понять базовые вещи. Остальное и так понятно. :)

    http://dl.dropbox.com/u/5986721/rc.lua

    На счет шутдауна, на вскидку вижу такой вариант: в sudo разрешить себе запуск sudo shutdown now без пароля и повесить ее в меню или на горячую клавишу, нет проблем. :)

  9. В x-wing я когда-то тоже играл. :) Но меня симуляторы как-то не очень плющат. ;)

  10. Ага. Смотрю. Действительно, понятно в принципе и так.

    мммм. Мне как-то не приходило в голову, что sudo можно тоже конфигурировать :) Вообще, «виндовые стереотипы» прочно сидят :) Только сегодня понял, что все, что не устраивало меня в fbpanel отлично конфигурируется в его конфиге. Когда первый раз устанавливал — вообще был без понятия, что им можно управлять как-нибудь кроме gui-интерфейса.

  11. О! :) Извини, не ожидал от тебя «можно конфигурировать»:))) Конечно же можно! Более того: нужно. Но перед этим конечно же читать доку! Ибо неверно сконфигурированное sudo — открытая дверь в комп. :( В общем то там все просто, прочтешь — поймешь. И да, это видимо виндовые стереотипы. :) Давай, избавляйся. Удачи!

  12. […] В продолжение темы рабочих столов – так выглядит мое текущее рабочее место. […]

  13. […] только на том, что ты набираешь. Система построена так, что мне почти не приходится использовать мышь – […]

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: