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? що ви очікуєте в до? це "я @ 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

І замініть його на правильну назву в сценарії.

Будьте поважні з великої літери ("Гроза", а не "гроза") !!

Інший приклад з 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 робочих просторів, кожен з яких має певний екземпляр хрому. Це допоможе, якби я міг перейменувати ці програми (наприклад, "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.