¿Hay algún problema al utilizar xdotool para dirigir las pulsaciones de teclas a las ventanas de Java?

¿Hay algún problema al utilizar xdotool para dirigir las pulsaciones de teclas a las ventanas de Java?

Estoy ejecutando Fedora 22 (Linux) y tengo una aplicación Java escrita por otros a la que quiero enviar pulsaciones de teclas. Intenté usar xdotool de varias maneras, pero no puedo enfocar la aplicación Java ni enviarle pulsaciones de teclas.

La aplicación se inicia con javaws con la siguiente línea de comando:

javaws -J-XX:MaxPermSize=512M -J-d64 -J-Xms1G -J-Xmx1G /path/to/java/file

Mi primer intento de enviarle pulsaciones de teclas fue con este comando:

xdotool search --name 'Window title' windowraise windowfocus --sync key H e l l o Return

Pero nada pasó. La ventana de Java no se centró ni vio mis pulsaciones de teclas.

Entonces busqué el PID del proceso Java e intenté identificar el proceso por su PID.

xdotool search --pid 1234 windowraise windowfocus --sync key H e l l o Return

Mismo resultado. Finalmente, intenté identificar la ventana con 'selectwindow'.

xdotool selectwindow windowraise windowfocus --sync key H e l l o Return

Después de emitir el comando, el cursor cambió a un cuadrado. Moví el mouse a la ventana de Java e hice clic, pero tampoco funcionó.

Para investigar más a fondo, ejecuté una aplicación Java diferente con el siguiente comando:

java -jar appname.jar

xdotool tampoco pudo establecer el foco ni enviar pulsaciones de teclas a esta ventana.

Después de leer la documentación de xdotool, sé que algunos programas no aceptarán su entrada. ¿Hay algo que pueda hacer, como pasar diferentes argumentos de línea de comando, a estas aplicaciones Java para que escuchen las pulsaciones de teclas de xdotool?

Aquí hay información sobre las versiones de Java y xdotool que estoy ejecutando:

$ java -version
openjdk version "1.8.0_65-debug"
OpenJDK Runtime Environment (build 1.8.0_65-debug-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01-debug, mixed mode)

$ xdotool --version
xdotool version 2.20110530.1

Respuesta1

El foco de la ventana es trabajo del administrador de ventanas. Supongo que estás usando uno. La mejor manera de enfocar una ventana es:

xdotool search --name 'Window title' windowactivate

xdotool utiliza 2 mecanismos para enviar eventos clave, la XTESTextensión para que los eventos se envíen al foco actual y XSendEvent()para enviar eventos a una ventana determinada. Este último genera eventos con unsintéticoflag, que algunas aplicaciones deciden que significa que es un riesgo de seguridad, así que ignore el evento.

Sin embargo, aún puedes enviar eventos clave "reales" usando xdotool, pero no debes proporcionar explícitamente una ventana. Después de mover el foco a su ventana, use

xdotool type Hello; xdotool key Return

información relacionada