simula pressionamentos de tecla no ambiente sem cabeçalho

2

Eu preciso simular as teclas digitadas no ambiente sem cabeça.

Todos os xte , xdotool e muitos C++ foram projetados para funcionar com a janela X11

Eu tentei o xdotool, o que causou algum erro:

xdotool type "aaaaa"
Error: Can't open display: (null)
Failed creating new xdo instance

Eu sei sobre Xvfb , mas estou procurando outra alternativa possível

    
por apasajja 31.08.2014 / 10:30

1 resposta

4

Para que um aplicativo receba qualquer pressionamento de tecla, ele deve recebê-lo de algum lugar. Geralmente as únicas duas opções são através de uma janela ou através de um TTY. Como simular um pressionamento de tecla depende de qual dos dois é o caso.

Através de uma janela

Se o aplicativo estiver recebendo pressionamentos de teclas por meio de uma janela, para simulá-los xdotool é a ferramenta certa para o trabalho. Você só precisa definir a variável DISPLAY adequada, de forma que xdotool conecte-se ao mesmo servidor X que o aplicativo.

Através de um TTY virtual

Muitos programas invocam um shell dentro de um TTY virtual. xterm , sshd , script , screen são alguns exemplos típicos. O programa que criou o TTY virtual pode enviar qualquer digitação para o TTY escrevendo no final do TTY virtual.

Se fosse xterm ou qualquer emulador de terminal semelhante, a maneira de simular um toque de tecla seria fazê-lo através da janela, conforme descrito acima.

No restante da lista, o único programa que conheço com um recurso para simular pressionamentos de tecla é screen . Você pode enviar pressionamentos de tecla para qualquer janela nomeada em uma sessão screen como essa (exemplo real, que eu uso com frequência):

screen -X at alsamixer stuff 2

Aqui screen -X se conectará a uma tela em execução e invocará um comando. at alsamixer fará com que o resto do comando seja invocado na janela denominada alsamixer . stuff 2 irá simular pressionando 2 .

Uma advertência é que o acima só funciona se a sessão screen estiver atualmente anexada de algum lugar. Eu não sei como fazer isso funcionar em um screen desanexado.

Através de um hardware TTY

Você pode fazer com que o hardware envie pressionamentos de tecla reais. Se for uma linha serial, você pode enviar pressionamentos de tecla gravando-os na porta serial do computador na outra extremidade da linha. Se for um console local, você pode ter um hardware conectado como um teclado real (tenho certeza de que é possível encontrar dispositivos USB, o que pode fazer isso).

No caso do Linux, existem drivers, que podem simular pressionamentos de tecla no console local, como se eles viessem do hardware real.

    
por 31.08.2014 / 12:02

Tags