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


11

Na minha máquina principal, tenho um desktop Ubuntu aberto e conectado. 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 do libreoffice aberto na sessão original . Quero salvar este arquivo e fechá-lo - mas a partir da máquina remota! (Ambas as sessões têm o mesmo usuário logado; posso sudo, se necessário)

Eu tentei usar, xdotool searchmas isso não consegue encontrar a janela. Existe uma maneira de fazer o que eu quero desta segunda sessão? Eu posso ver o processo com ps -A Eu posso até ver o arquivo aberto com lsof! Como faço para "salvar e fechar" nele?


2
Você pode simplesmente matar o processo - se você não tiver nenhuma alteração séria não salva, isso seria simples. Se o fizer, ele ainda deve tentar recuperar o documento na próxima vez em que for aberto.
Wayne Werner

Isso é verdade @wayne, provavelmente recuperaria automaticamente ... Obrigado pela sugestão. Não tenho certeza se eu queria aproveitar essa chance! Não há como enviar pressionamentos de tecla (ou qualquer outra mensagem direta)? Parece tão simples.
Sanjay Manohar

Tenho certeza de que existem maneiras - simplesmente não estou ciente delas. Alguns complicados envolvem a instalação de um cliente VNC simples e a configuração DISPLAY=:0(ou qualquer outra exibição em que sua outra conta esteja) e, em seguida, inicie o servidor e acesse-o pelo cliente. Mas isso pode ser excessivo. LibreOffice pode ter um protocolo de mensagem - Eu não sou terrivelmente familiarizado com ele porque eu usar tanto arquivos do Google Docs ou texto simples no Vim (incluindo látex) ...
Wayne Werner

use o VNC para obter acesso à janela principal a partir de outro local
Olivier Dulac

1
O xdotool é executado no valor $ DISPLAY da sessão atual. Você pode ssh qualquer máquina ou vncserver e executar o xdotool nela. Por exemplo, se você executar um servidor vncs na porta 5901, ele usará: 1 tela por convenção. Portanto, execute DISPLAY:1e inicie qualquer programa X (xeyes para teste) e execute no VNC. O mesmo se aplica aos servidores vncs remotos. SSH na máquina e, em seguida, execute a exportação de DISPLAY: 1 antes de usar.
M3nda 22/05

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", deve ser assim.

Em um terminal no "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 acontecer se você for o mesmo usuário no mesmo host (por exemplo, acesso a ~ / .Xauthority). Verifique a saída "lista xauth" 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 sua ferramenta exigir dessa maneira, o 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 mais sorte com eles 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 +", eu tenho mapeamentos meta / alt / super não padrão. meta funciona para mim, testado usando um Xnest. Estou assumindo o layout e aceleradores inalterados do menu em inglês.

É possível que exista um pop-up no seu caminho; nesse caso, vale a pena tentar:

xdotool key "Escape"

algumas vezes e tente novamente salvar e fechar. Lembre-se de que o xdotool é exigente quanto ao caso exato dos nomes das "chaves".

Você deve poder 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 atrapalhem.

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


Obrigado pela dica xdotool key "Escape"sobre nomes, mas não tentou nomes longos: D
m3nda

1

Parece que existem alguns requisitos possíveis. aparentemente o host precisa estar no arquivo xhosts (foi marcado como resposta) e o valor DISPLAY apropriado exportado. Esta publicação aqui deve ajudá-lo a fazer o que você deseja, permitindo que o xdotool encontre a janela remota do x11 .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.