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

4

Eu estou rodando o Fedora 22 (Linux) e tenho um aplicativo Java escrito por outros que eu quero enviar as teclas digitadas. Eu tentei usar xdotool de várias maneiras, mas eu não posso definir o foco para o aplicativo Java nem enviá-lo pressionamentos de teclas.

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 as teclas digitadas 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 ou viu minhas teclas digitadas.

Então eu 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

O mesmo resultado. Finalmente, tentei identificar a janela com 'selectwindow'.

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

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

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

java -jar appname.jar

O xdotool não pôde definir o foco ou enviar pressionamentos de teclas para esta janela.

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

Aqui estão algumas informações sobre as versões do Java e do 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
    
por David Levner 06.11.2015 / 05:45

1 resposta

2

O foco da janela é o trabalho do gerenciador de janelas. Eu presumo que você esteja usando um. A melhor maneira de focar uma janela é:

xdotool search --name 'Window title' windowactivate

O xdotool usa dois mecanismos para enviar os principais eventos, a extensão XTEST para os eventos enviarem para o foco atual e XSendEvent() para enviar os eventos para uma determinada janela. O último gera eventos com um sinalizador sintético , que alguns aplicativos decidem significa que é um risco de segurança, portanto ignore o evento.

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

xdotool type Hello; xdotool key Return
    
por 06.11.2015 / 16:09

Tags