6 сентября 2011 г.

Раздел applications конфигурации openbox (настройки поведения приложений)

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

Итак, для подобных вещей в конфигруационном файле существует раздел applications. Вообще в дефолтном конфиге он есть со всеми доступными опциями в виде закомментированных строк. "Шаблон" файла находится в /etc/xdg/openbox/rc.xml, ну а сам текущий файл помещается в домашнюю директорию пользователя по адресу ~/.config/openbox/rc.xml. Синтаксис этого раздела очень простой, наприсан в xml как и весь файл и строится примерно по такой схеме:

<applications>
  <application name="имя" class="класс" type="тип">
    свойства
  </application>
  ...
</applications>

Во-первых, как определить эти самые name, class и прочее у приложения. Именно по этим признакам назначаются различные свойства окну.
Информацию предоставляет утилита obxprop. Если выполнить её в консоли, то курсор изменит вид (скорее всего превратится в крестик) и после щелчка им на каком-либо окне, в консоль будет выдано множество информации. Чтобы информация была именно та, что нужна в данный момент, команду лучше дополнить следующим образом:

obxprop | grep "^_OB_APP"

Например, при щелчке на основном окне браузера 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"

Собственно, чтобы установить какое-нибудь правило для окна нужно прописать хотя бы или class, или name, то есть role и type тоже можно, но их одних будет недостаточно. Так-то понятно: окна подходящие под role="browser" могут быть у других браузеров, а уж окон type="normal" так вообще много.
А вот какие именно признаки необходимо определить, я лично пока решаю методом проб. Например, для того же firefox, я прописала и class, и role, и в этом случае, "дочерние" окна типа менеджера закладок не принимают свойства прописанные для основного окна браузера.
В имени и прочих критериях окна можно использовать простые маски: * — для любой последовательности символов и ? — для любого одного символа.

Теперь что касается самих свойств. Если свойство не прописано, то оно берётся по умолчанию, но можно и написать в значении default — будет тот же эффект. Применяются они в том же порядке, в котором прописаны.
decor — декорации окна (рамка и, главное, заголовок — полоска обычно сверху с кнопками "свернуть/распахнуть/закрыть").
shade — появление окна в "скрученном" виде (то есть виден будет только описанный выше заголовок).
desktop — номер рабочего стола, на котором окно откроется, либо можно задать all чтобы она всегда было на текущем (по-умолчанию окно открывается на активном рабочем столе, на всех столах или на столе с курсором, в зависимости от других настроек).
focus — если значение yes, окно при появлении попытается захватить фокус, значение по-умолчанию настраивается в другом разделе (в том числе и через obconf).
layer — "слой" окна, возможные значения: normal (обычно по-умолчанию), above и below (окно будет постоянно находиться либо поверх всех окон, либо наоборот всегда под ними).
iconic — при значении yes, окно появится сразу свёрнутым в значок (в панель, если она есть).
maximized — при значении yes, окно наоборот будет распахнутым на весь экран (по-умолчанию, кажется, окно принимает такое положение на экране, которое имело последний раз перед закрытием, если это не регулируется какими-либо ещё настройками); ещё возможны значения Horizontal и Vertical — растягивающие окно максимально по горизонтали или по вертикали.
fullscreen — полноэкранный режим.
skip_takbar — окно не будет показано в панели задач (а также при переключении между приложениями клавишами — Alt+Tab по-умолчанию), при значении no.
skip_pager — окно не будет отображаться в "пейджере", если таковой используется (имеется в виду утилита (отдельная, либо в виде плагина какой-либо панели) для управления рабочими столами, в опенбоксе по-умолчанию такой нет).
position force="yes" — используется для принудительного задания положения окна при появлении; внутри нужно прописать значения x и y в пикселах (отсчитывая слева для x и сверху для y, либо если чисто отрицательное, то снизу для x и справа для y), ещё значение может быть center; а также можно прописать monitor при использовании нескольких мониторов — в этом случае задаётся его номер, либо берётся значение mouse, чтобы задать тот, на котором находится мышь в данный момент.

Ну и пожалуй, стоит привести несколько примеров:
Во-первых, окно браузера. Раскрывается сразу развёрнутым на весь экран на первом рабочем столе, без заголовка:

<application class="Firefox" role="browser">
  <decor>no</decor>
  <desktop>1</desktop>
  <maximized>true</maximized>
</application>

Во-вторых, эмулятор терминала. Открывается без заголовка, растянутым по вертикали, есть на каждом рабочем столе, но не отображается в переключателе рабочих столов:
<application name="lxterminal">
  <desktop>all</desktop>
  <decor>no</decor>
  <maximized>Vertical</maximized>
  <skip_pager>yes</skip_pager>
</application>

Можно ещё делать таким образом:
<application class="*">
  <decor>no</decor>
</application>

То есть все окна будут появляться без декораций. Но затем можно прописать любым конкретным приложениям открываться с декорациями, таким образом они будут исключениями из общего правила.
Плеер открывается в верхнем правом углу на втором мониторе, и показывается на всех рабочих столах всегда поверх других окон (при этом имеет смысл выбирать компактный режим, но это делается в самом плеере):
<application class="Exaile">
  <desktop>all</desktop>
  <layer>above</layer>
  <position force="yes">
    <x>-10</x>
    <y>20</y>
    <monitor>2</monitor>
  </position>
</application>

Ну, я думаю, общая мысль понятна и варианты тоже. Дальше уже каждый для себя решает, что именно ему удобно и как настроить.
На скриншоте только вид терминала соответствует приведённым примерам.


1 комментарий: