Ubuntu / Gnome: abra una aplicación en un espacio de trabajo específico

10

¿Cómo le digo a una aplicación que se abra en un espacio de trabajo específico?


Más información:

Me gusta tener mi IDE de C ++ en el espacio de trabajo 2, mi IDE de Java en el espacio de trabajo 3 y mi correo electrónico, navegador y misceláneos en el espacio de trabajo cuatro. También uso un script de shell que se ejecuta al iniciar sesión:

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

Por supuesto, actualmente todo se abre en el espacio de trabajo actual ... ¿Hay alguna forma de especificar en qué espacio de trabajo debe comenzar cada comando?

¡Gracias por adelantado!

bguiz
fuente
1
Si siempre tiene estos programas en ejecución, la forma más fácil y sencilla es cargarlos todos donde desee y 'recordar aplicaciones al cerrar sesión'
Unfundednut
1
@MrStatic: Gracias por la sugerencia, pero necesito que esté en un script de shell por otras razones, y por eso no puedo 'recordar aplicaciones al cerrar sesión'
Bguiz

Respuestas:

4

Puede usar devilspie para establecer reglas para qué ventanas van a qué espacio de trabajo.

Ver los documentos para un ejemplo de exactamente eso.

Pero Mr Static también tiene una buena sugerencia. Pruebe primero, es posible que ni siquiera necesite su script de shell.

Si necesita que sea un comando que puede usar en un script de shell, eche un vistazo a wmctrl .

Mikel
fuente
Gracias por la sugerencia, lo comprobaré. Sin embargo, todavía consideraría que una solución solo para CLI es una solución superior, así que si tiene alguna idea, ¡hágamelo saber!
bguiz
44
Prueba wmctrl. Agregué un enlace en mi respuesta anterior.
Mikel
7

He probado la wmctrlherramienta y descubrí que la solución más fácil que me funcionó es mover la ventana con el siguiente comando:

wmctrl -r <WindowName> -t <WorkspaceNumber>

Tenga en cuenta que los números del espacio de trabajo comienzan desde 0. Por último, puede moverse a su espacio de trabajo preferido con el comando:

wmctrl -s <WorkspaceNumber>
VGe0rge
fuente
1

Utilizo esta estructura básica en scripts para abrir un conjunto específico de aplicaciones en espacios de trabajo específicos ... el ejemplo abre mi terminal y lo mueve al espacio de trabajo 1 ...

cd
gnome-terminal
until wmctrl -l | grep -q "me@mypc ~"; 
do
    sleep 0.1
done
wmctrl -r "me@mypc ~" -t 1
Steve Murphy
fuente
Una pequeña explicación sobre este código sería bienvenida. ¿Por qué comienza con cd? ¿Qué esperas en el hasta? ¿Es "me @ myspc ~" un nombre de ventana?
wranvaud
0

Instalar wmctrl

sudo apt install wmctrl

Y cree un script (en este ejemplo, Thunderbird en el segundo espacio de trabajo ( -t 1)):

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

Para conocer el nombre de su aplicación en wmctrl, puede verla tocando su terminal:

wmctrl -l

Y reemplácelo con el nombre correcto en el script.

¡Tenga cuidado con la letra mayúscula ("Thunderbird" no "thunderbird")!

Otro ejemplo con firefox en el espacio de trabajo 3d ( -t 2):

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

Trabaja en Debain 10 con canela. Pero debería funcionar para todos

pzim
fuente
-1

Estoy bastante seguro de que es imposible hacerlo. La razón parece ser que los entornos de ventanas como GNOME esperan que el software maneje esto, y los fabricantes de software esperan que los entornos de ventanas manejen esto.

Devilspie es una buena idea, pero coincide con el patrón (es decir, si name == 'google-chrome'). Entonces, ¿qué sucede si abro dos navegadores? ¿Ambos se trasladan al mismo espacio de trabajo? Tengo 6x3 = 18 espacios de trabajo, cada uno con una instancia particular de cromo. Sería útil si pudiera cambiar el nombre de estos programas (es decir, 'google-chrome1', 'google-chrome2' ...) pero no puedo encontrar una manera de hacerlo. Entonces tenemos que usar wmctrl.

wmctrl es un poco mejor b / c además de usar títulos de ventanas, también puede usar ID de ventana o simplemente usar la ventana resaltada actualmente. Las ID de ventanas son difíciles de obtener b / c, no se generan de inmediato. Vea abajo

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

pero luego el control no se devuelve a la línea de comando hasta DESPUÉS de que sale gedit. Todo lo que tenemos que hacer para evitar esto es poner una &señal

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

pero ahora el control es, el 99.999% de las veces, regresó a la línea de comando ANTES de que los administradores de la ventana inicien la ventana y no hay forma de encontrar la identificación de la ventana. Hay que configurar una técnica de bucle muy compleja para comprobar si se han creado ventanas nuevas y adivinar si es la ventana que estamos buscando.

Verificar la ventana activa a través de la bandera :ACTIVE:tiene el mismo problema, no espera a que el programa termine de ejecutarse.

wmctrlme parece un programa muy extraño. Parece que fue diseñado para personas sin mouse o incapaces de arrastrar físicamente sus programas a través de espacios de trabajo.

puk
fuente
El OP dijo que el navegador entra en el espacio de trabajo cuatro. Si fuera necesario abrir los navegadores en otros espacios de trabajo después de que se ejecute el script de inicio de sesión, el último comando en ese script podría estar inactivo; pkill devilspie.
Mikel