Ubuntu / Gnome: Otwórz aplikację w określonym obszarze roboczym

10

Jak powiedzieć aplikacji, aby otworzyła się w określonym obszarze roboczym?


Więcej informacji:

Lubię mieć moje C ++ IDE w obszarze roboczym 2, moje Java IDE w obszarze roboczym 3 oraz moją pocztę e-mail, przeglądarkę i różne w obszarze roboczym cztery. Używam również skryptu powłoki, który wykonuje się po zalogowaniu:

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

Oczywiście obecnie wszystko otwiera się w bieżącym obszarze roboczym ... Czy istnieje sposób, aby określić obszar roboczy, w którym każde polecenie powinno się uruchomić?

Z góry dziękuję!

bguiz
źródło
1
Jeśli zawsze masz uruchomione te programy, najłatwiejszym i najprostszym sposobem jest załadowanie ich wszystkich tam, gdzie chcesz i „zapamiętywanie aplikacji podczas wylogowywania”
Unfundednut
1
@MrStatic: Dzięki za sugestię, ale ja nie potrzebuję być w skrypcie powłoki z innych powodów - i za to, że nie może „zapamiętać aplikacje po zalogowaniu się”
bguiz

Odpowiedzi:

4

Możesz użyć devilspie, aby ustawić reguły, dla których okien należy przejść w danym obszarze roboczym.

Zobacz dokumentację na przykład dokładnie tego.

Ale MrStatic ma też dobrą sugestię. Wypróbuj najpierw, może nawet nie potrzebujesz skryptu powłoki.

Jeśli potrzebujesz, aby była to komenda, której możesz użyć w skrypcie powłoki, spójrz na wmctrl .

Mikel
źródło
dziękuję za sugestię, sprawdzę to - nadal uważałbym rozwiązanie oparte tylko na CLI za lepsze rozwiązanie, więc jeśli masz jakieś pomysły na takie, daj mi znać!
bguiz,
4
Wypróbuj wmctrl. W powyższej odpowiedzi dodałem link.
Mikel
7

Wypróbowałem to wmctrlnarzędzie i stwierdziłem, że najłatwiejszym rozwiązaniem, które mi pomogło, jest przeniesienie okna za pomocą następującego polecenia:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Zauważ, że numery obszarów roboczych zaczynają się od 0. Na koniec możesz przejść do preferowanego obszaru roboczego za pomocą polecenia:

wmctrl -s <WorkspaceNumber>
VGe0rge
źródło
1

Korzystam z tej podstawowej struktury w skryptach, aby otworzyć określony zestaw aplikacji w określonych obszarach roboczych. Przykład otwiera mój terminal i przenosi go do obszaru roboczego 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
Steve Murphy
źródło
Mile widziane małe wyjaśnienie tego kodu. Dlaczego zaczyna się od cd? czego oczekujesz do czasu? czy „me @ myspc ~” to nazwa okna?
wranvaud
0

Zainstaluj wmctrl

sudo apt install wmctrl

I stwórz skrypt (w tym przykładzie thunderbird na drugim obszarze roboczym ( -t 1)):

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

Aby poznać nazwę aplikacji na wmctrl, możesz ją wyświetlić, dotykając terminala:

wmctrl -l

I zastąp go poprawną nazwą w skrypcie.

Bądź ostrożny z wielką literą („Thunderbird”, a nie „thunderbird”) !!

Inny przykład z firefoxem w przestrzeni roboczej 3d ( -t 2):

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

Pracuj nad Debain 10 z Cinnamon. Ale powinien działać dla wszystkich

pzim
źródło
-1

Jestem całkiem pewien, że nie da się tego zrobić. Powodem wydaje się być to, że środowiska okienkowe, takie jak GNOME, oczekują, że oprogramowanie to poradzi, a twórcy oprogramowania oczekują, że poradzą sobie z tym środowiska okienkowe.

Devilspie to dobry pomysł, ale dopasowuje wzorce (tzn. Jeśli nazwa == 'google-chrome'). Co się stanie, jeśli otworzę dwie przeglądarki? Oboje zostali przeniesieni do tego samego obszaru roboczego? Mam obszary robocze 6x3 = 18, każdy z określonym wystąpieniem chrome. Pomógłbym, gdybym mógł zmienić nazwę tych programów (np. „Google-chrome1”, „google-chrome2” ...), ale nie mogę znaleźć sposobu, aby to zrobić. Więc musimy użyć wmctrl.

wmctrl jest nieco lepszym b / c oprócz korzystania z tytułów okien, możesz także użyć identyfikatorów okien lub po prostu użyć aktualnie podświetlonego okna. Identyfikatory okien są kłopotliwe z uzyskaniem b / c, ponieważ nie są natychmiast generowane. Patrz poniżej

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

ale wtedy kontrola nie jest zwracana do wiersza poleceń, dopóki PO GEDIT nie zostanie zakończony. Wszystko, co musimy zrobić, aby to obejść, to &znak

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

ale teraz kontrola jest w 99,999% przypadków zwracana do wiersza poleceń PRZED menedżerami okien uruchamiającymi okno i nie ma możliwości znalezienia identyfikatora okna. Należy skonfigurować bardzo złożoną technikę zapętlania, aby sprawdzić, czy zostały utworzone jakieś nowe okna i zgadnąć, czy jest to okno, którego szukamy.

Sprawdzanie aktywnego okna za pomocą flagi :ACTIVE:ma ten sam problem, nie czeka na zakończenie działania programu.

wmctrluderza mnie jako bardzo dziwny program. Wygląda na to, że został zaprojektowany dla osób bez myszy lub niezdolnych do fizycznego przeciągania programów między obszarami roboczymi.

puk
źródło
OP powiedział, że przeglądarka przechodzi na obszar roboczy czwarty. Jeśli po uruchomieniu skryptu uruchamiania sesji musi istnieć możliwość otwierania przeglądarek w innych obszarach roboczych, ostatnią komendą tego skryptu może być tryb uśpienia; pkill devilspie.
Mikel,