Devil's Pie - утилита, дополняющая возможности Metacity - стандартного менеджера окон среды GNOME. Как говорит ее разработчик, Ross Burton, на создание Devil's Pie его вдохновила опция «Matched Windows» старого менеджера, SawFish, и недостаток функционала в Metacity.

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

Правила

Devil's Pie работает с набором правил вида

(if a b c)

Здесь а - проверяемое условие, b - выполняемое действие, если условие выполнено, с - если условие не выполнено. Правила надо хранить в текстовом файле с расширением .ds. Devil's Pie по умолчанию загружает все такие файлы из папки ~/.devilspie. Создатель рекомендует хранить по одному правилу в файле, однако можно использовать объединение конструкций и хранить несколько правил в одном файле. Можно запускать Devil's Pie, используя только определенные файлы правил, прописывая их в параметрах командной строки.

Условия

В качестве условия может выступать одна из следующих конструкций:

(is a b)

Выполняется, когда строка а совпадает со строкой b.

(contains a b)

Выполняется, когда строка b является подстрокой a.

(matches a b)

Выполняется, когда строка а соотвествует регулярному выражению b. Пример:

(matches "ubuntu" "[bntu]{6}") - true
(matches "ubuntu" "[0-9]+") - false

Условия можно усложнять с помощью операторов and, or, not (используется префиксная нотация). Пример:

(or (and a (not b)) c d)

Выражение будет истинным, когда будут истинны либо c, либо d, либо одновременно ф будет истинно и b - ложно.

Свойства окон

В качестве проверяемых строк можно использовать следующие свойства окон:

window_name - заголовок.
window_role - роль, определенная в WM_WINDOW_ROLE.
application_name - имя приложения.
window_workspace - номер рабочего стола.
window_class - класс окна.
window_xid - XID.
window_property свойство - другие свойства.

Полный список возможных параметров можно посмотреть здесь: http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2511080

Действия

Основные действия:

geometry - задает положение и размер окна.

В качестве аргумента используется строка X-GeometryString:

[<width>{xX}<height>][{+-}<xoffset>{+-}<yoffset>]

Пример:

(geometry "400x300+0-22")
fullscreen - перевод в полноэкранный режим.
maximize - развернуть на весь экран.
unmaximize - обратное действие.
minimize - свернуть.
unminimize - развернуть.
close - закрыть окно. 
pin - поместить на всех рабочих столах.
set_workspace N - переместить на рабочий стол N.
skip_tasklist - не показывать окно в списке задач.
above - окно будет расположено поверх всех окон.
wintype тип - задает тип окна: "normal", "dialog", "menu", "toolbar", "splashscreen", "utility", "dock","desktop". 
opacity N - задает прозрачность в процентах.
spawn_sync сommand - выполняет внешнюю команду.

Некоторые действия можно применить не ко всем типам окон, например диалоговые окна не принимают команду изменения размера. Обойти это ограничение можно с помощью команды

wintype "normal"

Более полный набор действий можно посмотреть здесь: http://foosel.org/linux/devilspie.

Объединение действий

Действия можно объединять с помощью конструкции

(begin a1 a2 ... an)

Также можно и объединять несколько правил в одном файле:

(begin 
(if a b c)
(if d e f)
)

Примеры

Прикрепить спикок контактов Gaim Buddylist ко всем рабочим столам с размером 340×630 пискелей и с положением x=4, y=150.

(if
    (and 
        (is (application_name) "gaim")
        (is (window_name) "Buddy List")
    )
    (begin
        (pin)
        (geometry "340x630+4+150")
    )
)

Переместить firefox на рабочий стол №2 и развернуть окно на весь экран

(if
    (is (application_name) "firefox-bin")
    (begin
       (set_workspace 2)
       (maximize)
    )
)

Закрыть окно KAlarm при запуске системы.

Создаем в папке ~/.devilspie файл kalarm.ds:

(if 
  (is (window_name) "KAlarm" )
  (begin
    (close)
    (spawn_sync "bash -c \"ps auxww| grep -E 'devilspie(.*)kalarm' | awk '{print \$2}'| xargs kill\"")
  )
)

Добавляем в «Запускаемые приложения» команду

devilspie ~/.devilspie/kalarm.ds

Таким образом, как только Devil's Pie видит окно KAlarm, он закрывает его (сворачивает в трей) и завершает свою работу.

Развернуть окно Counter-Strike, запущенного под wine, на весь экран.

Создаем в папке ~/.devilspie файл cs.ds:

(if 
  (matches (window_name) "Counter-Strike")		
  (begin
    (wintype "normal")
    (fullscreen)
  )
)

Добавляем в «Запускаемые приложения» команду

devilspie ~/.devilspie/cs.ds

Окно диалоговое, и просто так развернуть его во весь экран не получится. Поэтому начала ему назначаем тип. В отличие от первого случая, Devil's Pie будет постоянно отслеживать окно и не будет завершаться после применения правила.

Ссылки

Одна из самых подробнейших документаций по утилите на английском языке http://foosel.org/linux/devilspie

Сайт разработчика: http://www.burtonini.com/blog/computers/devilspie