Forma de línea de comandos para enviar pulsaciones de teclas a una ventana abierta en una sesión X diferente


11

En mi máquina principal, tengo un escritorio de Ubuntu abierto e conectado. Luego, también estoy iniciando sesión en esta máquina desde una computadora remota, usando X2go que crea una nueva sesión X. Tengo un archivo de libreoffice abierto en la sesión original . Quiero guardar este archivo y cerrarlo, ¡pero desde la máquina remota! (Ambas sesiones tienen el mismo usuario conectado; puedo sudo si es necesario)

He intentado usar xdotool searchpero esto no puede encontrar la ventana. ¿Hay alguna manera de hacer lo que quiero de esta segunda sesión? Puedo ver el proceso con ps -A ¡Incluso puedo ver el archivo abierto con lsof! ¿Cómo puedo hacer un "guardar y cerrar" en él?


2
Usted podría simplemente matar el proceso - si usted no tiene los cambios no guardados graves Sería lo más sencillo. Si lo hace, aún debería intentar recuperar el documento la próxima vez que lo abra.
Wayne Werner

Eso es cierto @wayne, probablemente se recuperaría automáticamente ... Gracias por la sugerencia. ¡Sin embargo, no estoy seguro de si quería aprovechar esa oportunidad! ¿No hay forma de enviar pulsaciones de teclas (o cualquier otro mensaje directo)? Suena muy simple.
Sanjay Manohar

Estoy seguro de que hay formas, simplemente no las conozco. Algunos complicados implican la instalación de un cliente VNC simple y la configuración DISPLAY=:0(o cualquier pantalla en la que se encuentre su otra cuenta) y luego inicie el servidor y acceda al mismo desde el cliente. Pero eso podría ser excesivo. LibreOffice podría tener un protocolo de mensaje: no estoy muy familiarizado con él porque uso Google Docs o archivos de texto sin formato en Vim (incluido LaTex) ...
Wayne Werner

use VNC para obtener acceso a la ventana principal desde otra ubicación
Olivier Dulac

1
xdotool se ejecuta en el valor de $ DISPLAY de la sesión actual. Puede ssh cualquier máquina o vncserver y luego ejecutar xdotool en él. Como ejemplo, si ejecuta un vncserver en el puerto 5901, utiliza: 1 pantalla por convención. Entonces, ejecute y DISPLAY:1luego inicie cualquier programa X (xeyes para prueba) y se ejecutará bajo el VNC. Lo mismo se aplica a los servidores remotos vncs. SSH en la máquina y luego simplemente ejecute export DISPLAY: 1 antes de usar.
m3nda

Respuestas:


9

Suponiendo la configuración predeterminada, xdpyinfo en "original" mostrará una pantalla de ": 0.0", p. Ej.

xdpyinfo | grep name

Si su variable de entorno DISPLAY en "x2go" es ": 1.0", entonces debería ser así.

Desde una terminal en "x2go" Intenta encontrar el id de la ventana:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

Es posible que el control de acceso esté configurado para que no funcione, pero creo que debería hacerlo si tiene el mismo ID de usuario en el mismo host (es decir, acceso a ~ / .Xauthority). Verifique la salida de "lista de xauth" si no hay acceso.

Si funciona, utilice su herramienta favorita para controlarlo. Agregue "-int" al xwininfo anterior para imprimir el windowid en decimal si su herramienta así lo requiere, xdotool no:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

o podría tener mejor suerte con estos en lugar de "ctrl + s" / "ctrl + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Es posible que necesite "alt +" en lugar de "meta +", tengo meta / alt / supermapeos no estándar. Meta funciona para mí, probado usando un Xnest. Supongo que el diseño del menú en inglés y los aceleradores no se alteran.

Es posible que haya una ventana emergente en su camino, en cuyo caso vale la pena intentarlo:

xdotool key "Escape"

unas cuantas veces, luego vuelve a intentar guardar y cerrar. Recuerde que xdotool es quisquilloso con el caso exacto de los nombres "clave".

Debería poder probar todo esto iniciando libreoffice en x2go y NO modificando su DISPLAY. Debe guardar los comandos en un archivo de script de shell para que los cambios de foco no lo arruinen.

lsof debería mostrar que el archivo ya no está abierto si funciona :-)


Gracias por la pista xdotool key "Escape"sobre los nombres, pero no probé nombres largos: D
m3nda

1

Parece que hay un par de posibles requisitos. aparentemente el host debe estar en el archivo xhosts (se marcó como respuesta) y se exportó el valor DISPLAY apropiado. Esta publicación aquí debería ayudarlo a hacerlo de la manera que desea, permitiendo que xdotool encuentre la ventana remota x11 .

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.