Como enviar remotamente um pressionamento de tecla para um aplicativo X11?

5

Eu tenho um programa X11 (Mathematica / Linux) rodando que contém dados não salvos (calculados depois que eu saí; infelizmente eu não tive a perspicácia de salvar programaticamente os dados). Agora recebi um email dizendo que a energia será desligada, infelizmente antes de eu voltar. Portanto, eu quero salvar os dados, o que eu poderia fazer simplesmente enviando uma Ctrl - S para a janela da direita (eu sei como encontrar o ID da janela). Infelizmente não há nenhum xdotool ou autokey instalado, e eu não tenho direitos de root para instalar um deles. Então, há uma maneira de fazer isso?

É claro que uma maneira seria escrever um programa em C para fazer isso (já que a funcionalidade deve estar lá, ou aqueles outros programas não poderiam funcionar), mas eu nunca escrevi nada para o X11, então eu não acho que vou escrever no tempo ...

Eu tenho acesso à máquina com ssh, e posso acessar a tela (eu posso fazer uma captura de tela - que mostra a tela de bloqueio - e eu posso obter uma lista de janelas usando xwininfo). Então tudo que eu preciso é uma maneira de enviar uma única Ctrl - S para uma janela específica sem instalar algo anteriormente.

    
por celtschk 25.03.2015 / 18:20

1 resposta

5

Eu resolvi o problema.

A primeira parte da solução foi a informação de Gilles de que o xdotool é apenas um binário, portanto não há necessidade de instalá-lo. Apenas copiar o executável para a máquina remota (na qual tenho permissão para executar executáveis armazenados em meus próprios diretórios) era suficiente.

Note que quando abaixo eu mencionei qualquer comando, eu assumo que a variável DISPLAY está definida para a tela onde o Mathematica é executado (que no meu caso foi :0.0 ). Isto é o que eu fiz primeiro depois de logar na máquina usando o ssh, antes de fazer qualquer um dos comandos abaixo.

O próximo passo foi reconhecer que, quando a tela está bloqueada, o protetor de tela do Gnome agarra os eventos do teclado, então qualquer pressionamento de tecla enviado para a janela do Mathematica acabou no protetor de tela. Felizmente, o screensaver Gnome é fácil de desbloquear a partir da linha de comando. O comando é

gnome-screensaver-command -d

que eu encontrei aqui

Depois disso, eu identifiquei a janela do Mathematica usando o comando

xwininfo -root -tree | grep Mathematica

que eu encontrei aqui. A janela correta do Mathematica foi fácil de identificar porque continha no título o nome do arquivo do notebook (" notebook "é o nome do Mathematica para um tipo específico de documento do Mathematica, o que você costuma usar para cálculos) e uma estrela para indicar que não foi salva. Cada linha começa com o ID da janela correspondente (um número hexadecimal como 0x13371d)

Depois de ter identificado a janela, defino o foco para ela usando

xdotool windowactivate 0x13371d

(onde o número hexadecimal foi, é claro, o ID da janela obtido anteriormente) e finalmente enviou o Control-S usando

xdotool key ctrl+s

Então eu usei o xwininfo novamente para verificar se a estrela realmente desapareceu no título da janela, indicando que o notebook realmente foi salvo.

    
por 27.03.2015 / 00:22

Tags