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.