Ubuntu / Gnome: apri un'applicazione in un'area di lavoro specifica


10

Come dire ad un'applicazione di aprirsi in uno spazio di lavoro specifico?


Ulteriori informazioni:

Mi piace avere il mio IDE C ++ nello spazio di lavoro 2, il mio IDE Java nello spazio di lavoro 3 e la mia e-mail, il browser e vari nello spazio di lavoro quattro. Uso anche uno script di shell che viene eseguito all'accesso:

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

Naturalmente al momento tutto si apre nell'area di lavoro corrente ... C'è un modo per me di specificare in quale area di lavoro dovrebbe iniziare ciascun comando?

Grazie in anticipo!


1
Se hai sempre questi programmi in esecuzione, il modo più semplice e semplice è caricarli tutti dove li vuoi e 'ricordare le applicazioni quando esci'
Unfundednut

1
@MrStatic: Grazie per il suggerimento, ma ho bisogno che sia in uno script di shell per altri motivi - e per questo non riesco a "ricordare le applicazioni quando esci"
bguiz,

Risposte:


4

È possibile utilizzare devilspie per impostare regole per le finestre in cui si trovano le aree di lavoro.

Vedi i documenti per un esempio di quello.

Ma MrStatic ha anche un buon suggerimento. Prova prima quello, potresti non aver nemmeno bisogno del tuo script di shell.

Se hai bisogno che sia un comando che puoi usare in uno script di shell, dai un'occhiata a wmctrl .


grazie per il suggerimento, lo verificherò: considererei comunque una soluzione solo CLI come una soluzione superiore, quindi se avete idee per una, fatemelo sapere!
Bguiz,

4
Prova wmctrl. Ho aggiunto un link nella mia risposta sopra.
Mikel,

7

Ho provato lo wmctrlstrumento e ho scoperto che la soluzione più semplice che ha funzionato per me è spostare la finestra con il seguente comando:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Si noti che i numeri dell'area di lavoro iniziano da 0. Infine è possibile passare all'area di lavoro preferita con il comando:

wmctrl -s <WorkspaceNumber>

1

Uso questa struttura di base negli script per aprire un set specifico di applicazioni in aree di lavoro specifiche ... l'esempio apre il mio terminale e lo sposta nell'area di lavoro 1 ...

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

Una piccola spiegazione su questo codice sarebbe benvenuta. Perché inizia con cd? cosa ti aspetti dal fino? è "me @ myspc ~" il nome di una finestra ??
Wranvaud,

0

Installa wmctrl

sudo apt install wmctrl

E crea uno script (in questo esempio thunderbird nel secondo spazio di lavoro ( -t 1)):

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

Per conoscere il nome della tua applicazione su wmctrl puoi visualizzarlo toccando sul tuo terminale:

wmctrl -l

E sostituiscilo con il nome corretto nello script.

Sii attento con la lettera maiuscola ("Thunderbird" non "thunderbird") !!

Altro esempio con Firefox su 3d workspace ( -t 2):

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

Lavora su Debain 10 con Cannella. Ma dovrebbe funzionare per tutti


-1

Sono abbastanza certo che sia impossibile farlo. Il motivo è che gli ambienti di finestre come GNOME si aspettano che il software gestisca questo, e i produttori di software si aspettano che gli ambienti di finestre gestiscano questo.

Devilspie è una buona idea, ma fa corrispondere i modelli (ad es. Se name == 'google-chrome'). Quindi cosa succede se apro due browser? Entrambi vengono spostati nello stesso spazio di lavoro? Ho 6x3 = 18 aree di lavoro, ognuna con una particolare istanza di chrome. Sarebbe utile se potessi rinominare questi programmi (ad esempio "google-chrome1", "google-chrome2" ...) ma non riesco a trovare un modo per farlo. Quindi dobbiamo usare wmctrl.

wmctrl è un po 'meglio b / c oltre a usare i titoli delle finestre, puoi anche usare gli ID delle finestre o semplicemente usare la finestra attualmente evidenziata. Gli ID finestra sono una seccatura per ottenere b / c e non vengono generati immediatamente. Vedi sotto

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

ma poi il controllo non viene restituito alla riga di comando fino a quando AFTER non viene chiuso. Tutto ciò che dobbiamo fare per aggirare questo è mettere un &segno

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

ma ora il controllo è, il 99,999% delle volte, restituito alla riga di comando PRIMA che i gestori delle finestre avviino la finestra e non c'è modo di trovare l'id della finestra. Bisogna impostare una tecnica di loop molto complessa per verificare se sono state create nuove finestre e per indovinare se è la finestra che stiamo cercando.

Il controllo della finestra attiva tramite il flag :ACTIVE:presenta lo stesso problema, non attende il completamento dell'esecuzione del programma.

wmctrlmi sembra un programma molto strano. Sembra che sia stato progettato per le persone senza mouse o incapaci di trascinare fisicamente i loro programmi nelle aree di lavoro.


L'OP ha affermato che il browser passa allo spazio di lavoro quattro. Se fosse necessario poter aprire i browser su altre aree di lavoro dopo l'esecuzione dello script di avvio della sessione, l'ultimo comando in quello script potrebbe essere sleep; pkill devilspie.
Mikel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.