9

Как настроить приложение на открытие в определенной рабочей области?


Больше информации:

Мне нравится иметь свою C++ IDE в рабочей области 2, мою Java IDE в рабочей области 3, и мою электронную почту, браузер и прочее в рабочей области четыре. Я также использую сценарий оболочки, который выполняется при входе в систему:

#!/bin/bash
gnome-terminal & # WS 1
netbeans-6-9-1 & # WS2
qtcreator-2-0-1 & # WS 3
firefox & # WS 4
thunderbird & # WS 4

Конечно, в настоящее время все это открывается в текущем рабочем пространстве ... Есть ли способ указать мне, в каком рабочем пространстве должна начинаться каждая команда?

Заранее спасибо!

4 ответа4

6

Я попробовал инструмент wmctrl и обнаружил, что самое простое решение, которое мне помогло, - это переместить окно с помощью следующей команды:

wmctrl -r <WindowName> -t <WorkspaceNumber>

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

wmctrl -s <WorkspaceNumber>
4

Вы можете использовать devilspie, чтобы установить правила, для которых окна выходят в какое рабочее пространство.

Посмотрите документы для примера именно этого.

Но у MrStatic тоже есть хорошее предложение. Попробуйте сначала, возможно, вам даже не понадобится сценарий оболочки.

Если вам нужна команда, которую вы можете использовать в сценарии оболочки, взгляните на wmctrl.

1

Я использую эту базовую структуру в сценариях, чтобы открыть определенный набор приложений в определенных рабочих пространствах. В этом примере мой терминал открывается и перемещается в рабочее пространство 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
-1

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

Devilspie - хорошая идея, но она выполняет сопоставление с образцом (то есть, если name == 'google-chrome'). Так что же произойдет, если я открою два браузера? Они оба перемещены в одно и то же рабочее пространство? У меня есть 6x3 = 18 рабочих пространств, каждое с определенным экземпляром Chrome. Было бы полезно, если бы я мог переименовать эти программы (например, «google-chrome1», «google-chrome2» ...), но я не могу найти способ сделать это. Поэтому мы должны использовать wmctrl.

wmctrl немного лучше b/c, в дополнение к использованию оконных заголовков, вы также можете использовать идентификаторы окон или просто использовать текущее подсвеченное окно. Идентификаторы окон - трудная задача, потому что они не генерируются сразу. Увидеть ниже

gedit 1.txt
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

но затем управление не возвращается в командную строку до тех пор, пока не завершится GEDIT. Все, что нам нужно сделать, чтобы обойти это, это поставить знак &

gedit 1.txt &
#get window ID by looking at wmctrl -l store in windowID
wmctrl -i -r $windowID -e 0,3660,0,-1,-1

но теперь управление в 99,999% времени возвращается в командную строку ДО того, как менеджеры окон запустят окно, и нет способа найти идентификатор окна. Нужно установить очень сложную технику зацикливания, чтобы проверить, были ли созданы какие-либо новые окна, и угадать, ищем ли мы это окно.

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

wmctrl кажется мне очень странной программой. Кажется, что он был разработан для людей без мыши или неспособных физически перетаскивать свои программы через рабочие пространства.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .