Existe algum problema ao usar o xdotool para direcionar as teclas digitadas para janelas Java?

Existe algum problema ao usar o xdotool para direcionar as teclas digitadas para janelas Java?

Estou executando o Fedora 22 (Linux) e tenho um aplicativo Java escrito por outras pessoas para o qual desejo enviar pressionamentos de teclas. Tentei usar o xdotool de várias maneiras, mas não consigo definir o foco para o aplicativo Java nem enviar pressionamentos de tecla.

O aplicativo é iniciado com javaws com a seguinte linha de comando:

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

Minha primeira tentativa de enviar pressionamentos de tecla foi com este comando:

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

Mas nada aconteceu. A janela Java não ganhou foco nem viu minhas teclas digitadas.

Então procurei o PID do processo Java e tentei identificar o processo pelo seu PID.

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

Mesmo resultado. Finalmente, tentei identificar a janela com 'selectwindow'.

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

Após emitir o comando, o cursor mudou para um quadrado. Movi o mouse para a janela Java e cliquei, mas também não funcionou.

Para investigar mais, executei um aplicativo Java diferente com o seguinte comando:

java -jar appname.jar

xdotool também não conseguiu definir o foco ou enviar pressionamentos de tecla para esta janela.

Depois de ler a documentação do xdotool, sei que alguns programas não aceitam sua entrada. Há algo que eu possa fazer, como passar diferentes argumentos de linha de comando para esses aplicativos Java, para que eles ouçam as teclas digitadas pelo xdotool?

Aqui estão algumas informações sobre as versões de Java e xdotool que estou executando:

$ 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

Responder1

O foco da janela é tarefa do gerenciador de janelas. Presumo que você esteja usando um. A melhor maneira de focar uma janela é:

xdotool search --name 'Window title' windowactivate

xdotool usa 2 mecanismos para enviar eventos principais, a XTESTextensão para eventos a serem enviados para o foco atual e XSendEvent()para enviar eventos para uma determinada janela. Este último gera eventos com umsintéticosinalizador, que alguns aplicativos decidem significar um risco à segurança, portanto, ignore o evento.

No entanto, você ainda pode enviar eventos-chave "reais" usando xdotool, mas não deve fornecer explicitamente uma janela. Depois de mover o foco para sua janela, use

xdotool type Hello; xdotool key Return

informação relacionada