2010-11-24 21 views
10

¿Conoces alguna alternativa a wmctrl? Un programa que te permite manipular ventanas y administración de ventanas desde la línea de comandos.¿Cuáles son las alternativas a wmctrl?

Un inconveniente de wmctrl es que, aunque puede manipular la ventana actual, no puede hacer que wmctrl muestre información sobre la ventana actual (ignora -r).

Respuesta

9

Puede engañar wmctrl en la salida el número de identificación de la ventana activa mediante la activación de modo detallado y diciéndole que mover la ventana activa con un parámetro no válido:

wmctrl -v -r :ACTIVE: -e dummy 

Si bien esto hace salida con una estado de error, sino que también da salida al número de identificación de la ventana activa:

envir_utf8: 1 
Using window: 0x08400004 
The -e option expects a list of comma separated integers: "gravity,X,Y,width,height" 

Una vez que tenga el número de identificación de la ventana activa, se puede enumerar todas las ventanas y la búsqueda de ese número de identificación:

wmctrl -l 

Es incómodo obtener información sobre la ventana activa con wmctrl, pero es posible.

+0

Gracias, buen truco! – joeytwiddle

+9

'wmctrl -a: ACTIVE: -v' también funciona y tiene la ligera ventaja de proporcionarle un código de salida significativo. –

11

Para buscar el identificador de la ventana activa, utilice:

xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}" 

utilizando este identificador, a continuación, puede obtener una gran cantidad de información acerca de la ventana activa:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") 

A partir de ahí , puede grep lo que necesita, o hacer que muestre solo el campo deseado de la misma manera en que extraje arriba. Por lo tanto, para encontrar el PID de la ventana activa en ese momento, se agregaría -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID al comando anterior, por lo que es:

xprop -id $(xprop -root -f _NET_ACTIVE_WINDOW 0x " \$0\\n" _NET_ACTIVE_WINDOW | awk "{print \$2}") -f _NET_WM_PID 0c " \$0\\n" _NET_WM_PID | awk "{print \$2}" 

Tenga en cuenta que wmctrl acepta también el mismo tipo de identificación en combinación con la bandera -i.

1

Mi experiencia con wmctrl versión 1.07 bajo RH Linux 5.5 y 5.6 64-bits es que wmctrl se pierde a veces. Por ejemplo, cuando se busca una ventana de Firefox la siguiente devuelve nada:

% wmctrl -lpGx | grep -i 'Firefox' 

Mi sospecha es que wmcntl no puede encontrar ventanas de Firefox debido a la naturaleza del gestor de ventanas, en este caso, metaciudad. Este administrador parece reparar Windows y quizás esto hace que wmctrl no incluya ventanas de Firefox. 'xwininfo' lista las ventanas de Firefox.

Si usted tiene acceso a xdotool (mi versión es 2.20110530.1), entonces usted puede intentar:

% mywin=`xwininfo -root -tree | awk '/- Mozilla Firefox/ { printf $1; exit}'` 
% xdotool windowactivate --sync $mywin mousemove --window $mywin 0 0 

Esto hace que Firefox activa, hace que la ventana superior de la pila en su escritorio, y pone el Pase el mouse por encima (como a veces se necesita cuando el entorno de un usuario establece el foco en una ventana debajo del mouse sin necesidad de hacer clic.) Si no desea que el mouse se mueva simplemente , elimine 'mousemove --window $ mywin 0 0' de lo anterior.

Nota: Tuve el mismo problema al encontrar ventanas de Konqueror en los mismos sistemas Linux.

+0

Su problema wmctrl podría ser este: https://bugzilla.redhat.com/show_bug.cgi?id=426383 – JeffG

1

ventana Identificación del

wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window: " | awk "{print \$3}" 
1

Puede comprobar xdo que puede hacer un trabajo decente con Recursos mínimos.

Cuestiones relacionadas