Как раскидать окна по рабочим столам после загрузки

в 4:36, , рубрики: howto, linux, Ubuntu, Убунтариум, метки: , ,

Задача: Ubuntu Precise, Compiz Wall, несколько приложений в автостарте и желание не раскидывать их по рабочим столам вручную каждый раз при логине.

Первый вариант который вы найдете в интернетах — DevilsPie или уже более актуальный DevilsPie2. Решение, предлагаемое ими, довольно изящное, но только если вы не прочь написать трехстрочный скрипт на Lua для каждого окна и, что более важно, используете Gnome. То есть это не наш случай (подразумевается использование Unity).

Второй, и правильный, вариант найдет только очень внимательный, что и стало причиной для поста. Оказалось, что задачу можно решить силами самого compiz'a без каких-либо ухищрений. Все что нужно, это плагин Place Windows.

Как раскидать окна по рабочим столам после загрузки

На второй вкладке есть три секции, нам нужна последняя — windows with fixed viewport. Задаем идентификатор, лучше всего самый общий — class, окна/приложения, и координаты рабочего стола вида (x, y):
Как раскидать окна по рабочим столам после загрузки

Попутно можно зафиксировать другие свойства окон — положение и режим размещения (на нетбуке с небольшим экраном самое актуальное — развернуть на весь экран). При задании идентификатора есть пикер, так что можно просто ткнуть в интересующее вас приложение. Также доступны логические операции над фильтром (and/or/not).

Теперь при открытии любого окна, подпадающего под фильтры, оно будет размещаться в соответствии с указанными правилами.

PS. Если вы все таки еще на Gnome и хотите поиграться с DevilPie2, то

  • sudo apt-get install devilspie2 && mkdir ~/.config/devilspie2 && cd ~/.config/devilspie2 && touch ./rules.lua && nano ./rules.lua
    
  • для каждого окна задайте правило вида, где «3» — абсолютный номер рабочего стола:
    if (get_window_name() == "Calculator") then
    	set_window_workspace(3)
    end 
    
  • devilspie2 &
    
  • если все ок — можно поставить его в автозагрузку

Что бы узнать windows/application name поместите в скрипт следующие правила

debug_print("Window Name: " .. get_window_name());
debug_print("Application name: " .. get_application_name())

и запустите в отладочном режиме:

devilspie2 -d

Извещения об ошибках — хабрапочтой.

Автор: kaaquantum


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js