come spostare le applicazioni dall'area di lavoro 1 a 2 usando il comando


12

C'è un modo in cui posso passare l'applicazione in esecuzione in un'area di lavoro a un'altra sulla riga di comando? Uso Ubuntu 10.04

AGGIORNAMENTO1
Come da suggerimenti di seguito

 wmctrl -l
0x02200003 -1 bond Bottom Expanded Edge Panel
0x02200049 -1 bond Top Expanded Edge Panel
0x02000020  0 bond x-nautilus-desktop
0x04e00004  0 bond bond@bond: ~
0x0482a380  0 bond OMG! Ubuntu! | wmctrl - Chromium
0x05000072  0 bond how to shift applications from workspace 1 to 2 using command - Ask Ubuntu - Stack Exchange - Google Chrome

ora quando scrivo

wmctrl -r :OMG! Ubuntu! | wmctrl - Chromium: -t 2 No window was specified.

Quindi, come usarlo correttamente qual è l'errore sopra?

UPDATE2
Ho provato

wmctrl -r 0x05000072 -t 2

ma le finestre non hanno avuto effetto e sono rimaste nello stesso spazio di lavoro.


Ho aggiornato la mia risposta con migliori informazioni sull'uso di -r e -i. L'argomento -r dovrebbe essere racchiuso tra "virgolette" se contiene spazi. Se l'argomento -r è l'id della finestra, è inoltre necessario specificare -i sulla riga di comando.

Risposte:


14

Se si utilizza un gestore di finestre conforme come Metacity (Unity 2-d), è possibile utilizzare wmctrl per passare da una finestra a un altro desktop. La sintassi è wmctrl -r :ACTIVE: -t <DESKTOP>. Puoi anche cambiare il desktop corrente usando wmctrl -s <DESKTOP>. I numeri del desktop iniziano da 0. Su una riga, questo sarebbe:

wmctrl -r :ACTIVE: -t 1; wmctrl -s 1

Se vuoi passare una finestra diversa da quella attiva su un altro desktop, usa il testo del titolo come argomento in -r. Per esempio:

wmctrl -r "Chromium" -t 1

In alternativa puoi usare wmctrl -lper elencare le finestre disponibili e passare il numero ID a -r invece della stringa speciale :ACTIVE:. Quando si passa un ID, è inoltre necessario aggiungere -i. Per esempio:

$ wmctrl -l
0x03e00189  0 hostname Ask Ubuntu - Chromium
$ wmctrl -i -r 0x03e00189 -t 2

(wmctrl può essere installato su Ubuntu con sudo apt-get install wmctrl.) Al momento, questo non sembra funzionare con Unity standard, sfortunatamente.


@skyblue Grandi informazioni. Vedi una cosa che non sono chiaro è come faccio a sapere no la finestra del desktop e anche quello che sto cercando è supponiamo che Chrome sia in esecuzione e voglio che Chrome passi dal mio desktop attuale a un altro, quindi come andare per questo.
Utente registrato

Se stai usando il browser Chrome (che ha "Chromium" nel titolo, dovresti essere in grado di usare wmctrl -r "Chromium" -t 1come riferimenti skyblue nella sua risposta, purché tu stia usando un gestore di finestre conforme come Unity-2d.
John S Gruber

3

Ecco una mia sceneggiatura che implementa ciò che chiedi: https://github.com/norswap/wmov/blob/master/wmov.sh

Nella sua forma attuale, può inviare finestre (selezionate abbinando una stringa senza distinzione tra maiuscole e minuscole al titolo di sottostringhe, come per l' wmctrl -ropzione) ad altri desktop, sia scegliendo un numero di desktop esplicito, sia indicando la direzione del desktop dalla corrente desktop.

Per esempio:

./wmov.sh mov "Google Chrome" 3 # sends Chrome to desktop 3 (bottom left)
./mov.sh mov Skype right # sends Skype to the desktop to the right of
                         # the current desktop (if any)

Funziona davvero come descritto nel post di Desgua. Offre inoltre la possibilità di inviare finestre ad altre aree di lavoro.


Mi piace questa soluzione, perché può identificare finestre con corrispondenze parziali del nome della finestra, particolarmente utile quando i programmi modificano parte del loro nome, a seconda del contesto. Chiamare windows per nome è più semplice che cercare i loro PID. Lo svantaggio è che se ci sono più finestre con la stessa stringa nel nome, non si può prevedere quale wmov.sh prenderà.
Andrew P.

3

È possibile farlo con xdotool, ma se stai usando compizquesta soluzione potrebbe non essere applicabile, ti preghiamo di tenerlo presente.

Per passare una finestra particolare (la finestra attiva) in un'area di lavoro diversa, è possibile utilizzare

xdotool getactivewindow set_desktop_for_window 1

O per uno script potresti voler passare le finestre di un determinato programma in una determinata area di lavoro con:

xdotool search --class firefox set_desktop_for_window %@ 1

Questo comando cerca e trova le firefoxfinestre e le trasferisce nello spazio di lavoro 1, dove appariranno minimizzate. Per tornare firefoxal desktop predefinito, basta sostituire 1 con uno 0 alla fine del comando. Per inviare una finestra diversa a un'altra area di lavoro, basta sostituirla firefoxcon un altro nome di programma.

È fondamentale utilizzare %@per rappresentare le finestre passate dal --searchparametro, come se non le finestre fossero trasferite.

Per ulteriori informazioni, consultare man xdotoole le manpage di Ubuntu online.


2

Se stai usando compiz, guarda qui la wiki di compiz . Lì trovi diversi esempi. Guarda il plugin "put".

Esempio

./compiz-dbus-send.py put put_viewport_right_key

1

Innanzitutto, i due punti fanno parte del :ACTIVE:token magico per indicare la finestra attiva. Non lo vuoi normalmente. In secondo luogo, è necessario citare le stringhe con spazi all'interno.

Puoi anche ottenere l'ID della finestra ( 0x...all'inizio di ogni riga) e usarlo invece di provare a far funzionare il titolo.

$ wmctrl -r 'OMG! Ubuntu! | wmctrl - Chromium' -t 2 # wherever it is, move it to 2
$ wmctrl -r 0x0482a380 -t 2 # same thing

Un altro modo per ottenere gli ID finestra è eseguire xwininfoe quindi fare clic sulla finestra di cui si desidera l'ID.
Geekosaur,

Ho provato il tuo metodo ma non ha avuto alcun effetto sulla finestra in questione.
Utente registrato

@ Utente registrato: quale gestore di finestre? ( wmctrl -m)
geekosaur,

scusate il ritardo Risposta wmctrl -m Nome: compiz Classe: N / A PID: N / A Modalità "mostra desktop" del gestore finestre: OFF
Utente registrato

Hrm. Indovinerò, in base ai suggerimenti per l'uso dei plugin Compiz, che Compiz in realtà non implementa le specifiche EWMH complete, quindi wmctrlnon funzionerà. (In particolare, deve ascoltare gli PropertyChangeeventi nella finestra principale per proprietà particolari e quindi agire sul contenuto di tali proprietà.)
geekosaur

0

Modificando un po 'lo script fornito come soluzione a questa domanda , il seguente "porta" una determinata finestra nello spazio di lavoro corrente (in compiz):

#!/bin/bash

SCREEN_W=$(xwininfo -root | sed -n 's/^  Width: \(.*\)$/\1/p')
SCREEN_H=$(xwininfo -root | sed -n 's/^  Height: \(.*\)$/\1/p')

NAME="$1"

wmctrl -xlG | awk -v NAME="$NAME" '$7==NAME {print $1}' | while read WINS; do wmctrl -ir "$WINS" -e "0,0,0,$SCREEN_W,$SCREEN_H"; done

exit 0

Se si desidera uno spazio di lavoro arbitrario, si tratta di aggiungere / sottrarre il corrispondente $SCREEN_W/ $SCREEN_H, tante volte quante sono le aree di lavoro una finestra lontana da quella di destinazione.


0

Provare:

wmctrl -r “window name(or any string in the title)” -t `wmctrl -d | grep “workspace name” | cut -d" " -f1`

lasciami spiegare: con l'aiuto di spettacoli di wmctrl

    -r <WIN> -t <DESK>   Move the window to the specified desktop.
    <DESK>               A desktop number. Desktops are counted from zero.
    <WIN>          This argument specifies the window. By default it's
                   interpreted as a string. The string is matched
                   against the window titles and the first matching
                   window is used. The matching isn't case sensitive
                   and the string may appear in any position
                   of the title.

                   The -i option may be used to interpret the argument
                   as a numerical window ID represented as a decimal
                   number. If it starts with "0x", then
                   it will be interpreted as a hexadecimal number.

wmctrl -d posso elencare tutte le aree di lavoro, nel mio computer ora mostra come segue:

0 - DG: 1600x900 VP: N / A WA: 0,0 1600x868 codice
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 gioco 
2 - DG: 1600x900 VP: N / A WA: ricerca 0,01600x868

* indica l'area di lavoro corrente

A proposito, wmctrl -lè elencare tutte le finestre (che già conoscevi), nel mio computer ora sono:

0x05400008 1 Terminale utente-LinuxMint
0x03a0008e 0 user-LinuxMint Mozilla Firefox


poiché "DESK" deve essere il numero, lo uso grep “workspace name” | cut -d" " -f1per ottenerlo.

Ad esempio, se voglio spostare Firefox nel "codice" dell'area di lavoro, posso usare:

wmctrl -r "firefox" -t 0 

o

wmctrl -r "moz" -t `wmctrl -d | grep "code" | cut -d" " -f1`

ma

wmctrl -r -i 0x03a0008e -t `wmctrl -d | grep "code" | cut -d" " -f1`

Lavorami una volta sola e non so perché!

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.