Forma de linha de comando para enviar pressionamentos de tecla para uma janela aberta em uma sessão X diferente

10

Na minha máquina principal, eu tenho um desktop Ubuntu aberto e logado. Eu também estou logando nesta máquina a partir de um computador remoto, usando o X2go que cria uma nova sessão X. Eu tenho um arquivo libreoffice aberto na sessão original . Eu quero salvar este arquivo e fechá-lo - mas da máquina remota! (Ambas as sessões possuem o mesmo usuário logado; posso sudo se necessário)

Eu tentei usar xdotool search , mas isso não consegue encontrar a janela. Existe uma maneira de fazer o que eu quero nesta segunda sessão? Eu posso ver o processo com ps -A Eu posso até ver o arquivo aberto com lsof ! Como posso fazer um "save-and-close"?

    
por Sanjay Manohar 13.12.2012 / 17:36

2 respostas

9

Assumindo a configuração padrão, xdpyinfo em "original" mostraria uma exibição de ": 0.0", por exemplo,

xdpyinfo | grep name

Se a sua variável de ambiente DISPLAY em "x2go" for ": 1.0", deverá ser assim.

De um terminal em "x2go" Tente encontrar o id da janela:

DISPLAY=:0.0 xwininfo -root -tree | grep Writer

É possível que o controle de acesso esteja configurado para que não funcione, mas acho que deveria ser se você for o mesmo usuário no mesmo host (ou seja, acesso a ~ / .Xauthority). Verifique a saída "xauth list" se não houver acesso.

Se funcionar, use sua ferramenta favorita para controlá-la. Adicione "-int" ao xwininfo acima para imprimir o windowid em decimal se a sua ferramenta assim exigir, xdotool não:

export DISPLAY=:0.0
xdotool windowactivate 0x15a18918
xdotool windowfocus 0x15a18918
xdotool key "ctrl+s"
xdotool key "ctrl+q"

ou você pode ter melhor sorte com isso em vez de "ctrl + s" / "ctrl + q"

xdotool key "meta+f" "s"
xdotool key "meta+f" "c"
xdotool key "meta+f" "x"

Você pode precisar de "alt +" em vez de "meta +", tenho meta / alt / super mappings não padrão. meta funciona para mim, testado usando um Xnest. Estou assumindo layout e aceleradores do menu em inglês inalterados.

É possível que haja um pop-up em seu caminho e, nesse caso, vale a pena tentar:

xdotool key "Escape"

algumas vezes e, em seguida, tentando novamente salvar & perto. Lembre-se que o xdotool é muito exigente quanto ao caso exato de nomes "chave".

Você deve ser capaz de tentar tudo isso iniciando o libreoffice no x2go e NÃO modificando seu DISPLAY. Você deve salvar os comandos em um arquivo de script de shell para que as alterações de foco não estrague você.

lsof deve mostrar o arquivo não mais aberto se funcionou: -)

    
por 09.01.2013 / 20:53
1

Parece que há alguns requisitos possíveis. aparentemente, o host precisa estar no arquivo xhosts (foi marcado como resposta) e o valor DISPLAY apropriado é exportado. Este post aqui deve ajudá-lo a fazer do jeito que você queria, permitindo que xdotool encontre o remote janela x11 .

    
por 05.01.2013 / 06:23