cómo cambiar las aplicaciones del espacio de trabajo 1 a 2 usando el comando


12

¿Hay alguna forma de cambiar la aplicación que se ejecuta en un espacio de trabajo a otro en la línea de comandos? Yo uso Ubuntu 10.04

ACTUALIZACIÓN1
Según las sugerencias a continuación

 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

ahora cuando escribo

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

Entonces, ¿cómo usarlo correctamente? ¿Cuál es el error anterior?

ACTUALIZACIÓN2
intenté

wmctrl -r 0x05000072 -t 2

pero las ventanas no tuvieron efecto y permanecieron en el mismo espacio de trabajo.


He actualizado mi respuesta con mejor información sobre el uso de -r y -i. El argumento a -r debe estar entre comillas si contiene espacios. Si el argumento para -r es el id de la ventana, también debe especificar -i en la línea de comando.

Respuestas:


14

Si está utilizando un administrador de ventanas compatible como Metacity (Unity 2-d), puede usar wmctrl para cambiar una ventana a otro escritorio. La sintaxis es la siguiente wmctrl -r :ACTIVE: -t <DESKTOP>. También puede cambiar su escritorio actual usando wmctrl -s <DESKTOP>. Los números de escritorio comienzan en 0. En una línea, esto sería:

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

Si desea cambiar una ventana que no sea la activa a otro escritorio, use el texto del título como argumento para -r. Por ejemplo:

wmctrl -r "Chromium" -t 1

Alternativamente, puede usar wmctrl -lpara enumerar las ventanas disponibles y pasar el número de identificación a -r en lugar de la cadena especial :ACTIVE:. Al pasar una identificación, también debe agregar -i. Por ejemplo:

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

(wmctrl se puede instalar en Ubuntu con sudo apt-get install wmctrl.) En la actualidad, desafortunadamente, esto no parece funcionar con Unity estándar.


@skyblue Excelente información. Ver una cosa que no tengo claro es cómo sé si la ventana del escritorio no y también lo que estoy buscando es suponer que Chrome se está ejecutando y quiero que Chrome cambie de mi escritorio actual a otro luego cómo ir para esto.
Usuario registrado

Si está utilizando el navegador Chrome (que tiene "Chromium" en el título, debería poder utilizarlo wmctrl -r "Chromium" -t 1como menciones de skyblue en su respuesta, siempre y cuando esté utilizando un administrador de ventanas compatible como Unity-2d.
John S Gruber

3

Aquí hay un script mío que implementa lo que pides: https://github.com/norswap/wmov/blob/master/wmov.sh

En su forma actual, puede enviar ventanas (seleccionadas haciendo coincidir una cadena que no distingue entre mayúsculas y minúsculas con el título de las subcadenas, como para la wmctrl -ropción) a otros escritorios, ya sea eligiendo un número de escritorio explícito o indicando la dirección del escritorio desde el actual escritorio.

Por ejemplo:

./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)

Funciona de hecho como se describe en la publicación de desgua. También tiene la capacidad de enviar ventanas a otros espacios de trabajo.


Me gusta esta solución, porque puede identificar ventanas con coincidencias parciales del nombre de la ventana, especialmente útil cuando los programas modifican parte de su nombre, según el contexto. Llamar a Windows por su nombre es más fácil que buscar sus PID. El inconveniente es que si hay varias ventanas con la misma cadena en el nombre, no se puede predecir cuál tomará wmov.sh.
Andrew P.

3

Es posible hacer esto xdotool, pero si está utilizando compizesta solución puede no ser aplicable, así que tenga esto en cuenta.

Para cambiar una ventana en particular (la ventana activa) a un espacio de trabajo diferente, puede usar

xdotool getactivewindow set_desktop_for_window 1

O para un script, es posible que desee cambiar las ventanas de un programa en particular a un espacio de trabajo dado con:

xdotool search --class firefox set_desktop_for_window %@ 1

Este comando busca y encuentra las firefoxventanas y las transfiere al espacio de trabajo 1, donde aparecerán minimizadas. Para volver firefoxal escritorio predeterminado, simplemente reemplace el 1 con un 0 al final del comando. Para enviar una ventana diferente a otro espacio de trabajo, simplemente reemplácelo firefoxcon otro nombre de programa.

Es crucial que utilice %@para representar las ventanas pasadas desde el --searchparámetro, como si no lo hiciera, no se transferirán ventanas.

Para obtener más información, consulte man xdotoollas páginas de manual de Ubuntu en línea.


2

Si está usando compiz, mire aquí en el wiki de compiz . Allí encontrarás varios ejemplos. Mire el complemento "poner".

Ejemplo

./compiz-dbus-send.py put put_viewport_right_key

1

En primer lugar, el colon es parte de la :ACTIVE:ficha mágica para indicar la ventana activa. No lo quieres normalmente. En segundo lugar, debe citar cadenas con espacios en ellas.

También puede obtener la ID de la ventana ( 0x...al comienzo de cada línea) y usarla en lugar de tratar de hacer que el título funcione.

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

Otra forma de obtener ID de ventana es ejecutar xwininfoy luego hacer clic en la ventana cuya ID desea.
geekosaur

Probé su método pero no tuvo ningún efecto en la ventana en cuestión.
Usuario registrado

@ Usuario registrado: ¿Qué administrador de ventanas? ( wmctrl -m)
geekosaur

perdón por la demora Respuesta wmctrl -m Nombre: compiz Clase: N / A PID: N / A Modo "que muestra el escritorio" del administrador de ventanas: APAGADO
Usuario registrado

Hrm. Voy a adivinar, según las sugerencias para usar los complementos de Compiz, que Compiz en realidad no implementa la especificación EWMH completa, por wmctrllo que no va a funcionar. (Específicamente, tiene que escuchar PropertyChangeeventos en la ventana raíz para propiedades particulares y luego actuar sobre el contenido de esas propiedades.)
geekosaur

0

Al modificar un poco el script que se le da como solución a esta pregunta , lo siguiente "trae" una ventana determinada al espacio de trabajo actual (en 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

Si se desea un espacio de trabajo arbitrario, entonces se trata de sumar / restar el $SCREEN_W/ correspondiente $SCREEN_H, tantas veces como espacios de trabajo, una ventana está lejos del objetivo.


0

Tratar:

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

déjame explicarte: con la ayuda de wmctrl shows

    -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 puede enumerar todos los espacios de trabajo, en mi computadora ahora se muestra lo siguiente:

0 - DG: 1600x900 VP: N / A WA: 0,0 1600x868 código
1 * DG: 1600x900 VP: 0,0 WA: 0,0 1600x868 jugar 
2 - DG: 1600x900 VP: N / A WA: 0,01600x868 investigación

* significa el espacio de trabajo actual

Por cierto, wmctrl -les enumerar todas las ventanas (que ya conocías), en mi computadora ahora son:

0x05400008 1 usuario-LinuxMint Terminal
0x03a0008e 0 usuario-LinuxMint Mozilla Firefox


como el "ESCRITORIO" debe ser el número, lo uso grep “workspace name” | cut -d" " -f1para obtenerlo.

Por ejemplo, si quiero mover Firefox al "código" del espacio de trabajo, puedo usar:

wmctrl -r "firefox" -t 0 

o

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

pero

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

¡Solo trabaja conmigo una vez, y no sé por qué!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.