xdotool: Simulando teclado e movimentos/cliques do mouse no Linux
Essa semana no local onde eu trabalho surgiu uma necessidade: ligamos uma TV em um computador desktop qualquer que iria ficar ligado o tempo todo em uma determinada página da web que temos para monitorar nossos servidores. Simples assim:
- ligamos a TV no computador;
- ligamos o computador, que está com Ubuntu instalado;
- configuramos o “Remote Desktop” para podermos controlar esse computador de nossas próprias máquinas;
- configuramos o Firefox para abrir essa página como página inicial;
- instalamos a extensão do Firefox R-kiosk para abrir automaticamente o browser em modo Full Screen.
Mas aí pensamos que o ideal seria ligar a máquina e ela já fazer tudo sozinho quando entrasse no ambiente gráfico (X/Gnome), ou seja: abrir o Firefox já com a página configurada. Dessa forma evitaríamos de ter que conectar remotamente só pra abrir o Firefox. Tudo bem, configuramos no “Startup Applications” do Ubuntu, o Firefox… funcionou, mas tem um porém: a página que acessamos exige autenticação com login e senha (HTTP Basic Authentication – aquela autenticação básica que pula uma popup na sua frente pra digitar o usuário e a senha). Hmmm… até poderíamos deixar os dados de login salvos no Firefox, ele ia abrir a popup de login e senha com os dados já preenchidos, mas… quem iria apertar “Enter” para dar o ok na janela de autenticação?
Foi aí que fazendo uma pesquisa rápida na internet, achei o tal do xdotool. Caiu como uma luva! Esse programa simples para Linux utiliza a extensão XTEST do X11 e algumas funções da Xlib para que você possa controlar o mouse e teclado chamando esse programa através da linha de comando com os parâmetros desejados. Usando um pouco a imaginação, foi possível fazer um script bem simples em Shell Script que faz basicamente o seguinte: inicia o Firefox e executa o xdotool com o parâmetro para simular o ato de apertar a tecla “Enter” quando a janela de autenticação aparecer (já devidamente preenchida, pois os dados de login já estavam salvos). Perfeito! Era isso que precisávamos.
Para quem tem Ubuntu, o programa está disponível no repositório oficial, via apt:
1 | sudo apt-get install xdotool |
Se sua distribuição não possui o programa no repositório, você pode baixá-lo no site oficial.
O script para abrir o Firefox e simular o “Enter” ao abrir a janela de autenticação é esse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #!/bin/bash # Inicia o Firefox firefox & # Aguarda 15 segundos apos iniciar o Firefox. # Esse tempo pode variar, dependendo de alguns fatores como: # tempo de inicializacao, conexao com internet, etc.. # O importante eh garantir que nesse tempo a janela de # autenticacao ja estara aberta. sleep 15 # Pega o Window ID da janela de autenticacao # O titulo da janela de autenticacao, no Firefox em ingles, eh: # "Authentication Required" # Nao precisa colocar o titulo completo. Colocando soh o comeco, # o xdotool ja o localiza. # Se seu Firefox eh em portugues, altere de acordo com o titulo # da janela em portugues. WID=`xdotool search --title Authent` # Coloca o foco na janela de autenticacao xdotool windowfocus "$WID" # "Aperta" o enter xdotool key Return |
Com isso, ao invés de configurar o Firefox no “Startup Applications”, configure para executar esse script.
Veja o vídeo do script em ação:
(obs: Nesse exemplo, eu estou inicializando uma máquina virtual, como se fosse um computador qualquer. Não é necessário fazer nenhuma intervenção após ligar o “computador”, pois o Firefox irá iniciar automaticamente e o script com o xdotool irá simular a tecla Enter na tela de autenticação)
O xdotool vai muito além de apenas simular a tecla “Enter”. Ele pode simular combinações de teclas, mover o mouse para posições específicas, clicar com botão esquerdo/meio/direito/etc do mouse, mover janelas entre desktops, etc… Usando a imaginação é possível fazer praticamente tudo que você faz com o teclado e mouse normalmente. Simples e fácil de usar, eu recomendo para quem precisa automatizar um processo como esse exemplo acima.
Todas as opções do programa estão em seu manual:
1 | man xdotool |

