Ubuntu / Gnome: открыть приложение в определенной рабочей области


10

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


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

Мне нравится иметь мою 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

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

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


1
Если у вас всегда запущены эти программы, самый простой и простой способ - загрузить их там, где вы хотите, и «запоминать приложения при выходе»
Unfundednut

1
@MrStatic: Спасибо за предложение, но мне нужно, чтобы оно было в сценарии оболочки по другим причинам - и из-за этого я не могу «запомнить приложения при выходе»
bguiz

Ответы:


4

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

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

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

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


спасибо за предложение, проверим его - я все же считаю решение только для CLI превосходным решением, так что если у вас есть какие-либо идеи, дайте мне знать!
bguiz

4
Попробуйте wmctrl. Я добавил ссылку в своем ответе выше.
Микель

7

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

wmctrl -r <WindowName> -t <WorkspaceNumber>

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

wmctrl -s <WorkspaceNumber>

1

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

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

Небольшое объяснение этого кода будет приветствоваться. Почему это начинается с CD? что вы ожидаете в до? "me @ myspc ~" это имя окна ??
wranvaud

0

Установить wmctrl

sudo apt install wmctrl

И создайте скрипт (в этом примере thunderbird во втором рабочем пространстве ( -t 1)):

#!/bin/sh
(thunderbird &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Thunderbird` -t 1"

Чтобы узнать имя вашего приложения на wmctrl, вы можете просмотреть его, нажав на свой терминал:

wmctrl -l

И замените его на правильное имя в сценарии.

Будьте осторожны с заглавной буквой («Thunderbird», а не «thunderbird») !!

Другой пример с firefox в рабочей области 3d ( -t 2):

#!/bin/sh
(firefox &)  & sleep 5 && 
sh -c "wmctrl -i -r `wmctrl -l | grep Firefox` -t 2"

Работайте на Debain 10 с Корицей. Но должно работать для всех


-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мне кажется очень странной программой Похоже, что он был разработан для людей без мыши или неспособных физически перетаскивать свои программы через рабочие пространства.


ОП сказал, что браузер выходит на рабочее пространство четыре. Если после запуска сценария запуска сеанса должна быть возможность открыть браузеры в других рабочих пространствах, последняя команда в этом сценарии может находиться в спящем режиме; pkill devilspie.
Микель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.