Способ командной строки для отправки нажатий клавиш в окно, открытое в другом сеансе X

13864
Sanjay Manohar

На моей основной машине у меня открыт рабочий стол Ubuntu и вошел в систему. Затем я также подключаюсь к этой машине с удаленного компьютера, используя X2go, который создает новый X-сеанс. У меня есть файл libreoffice, открытый на исходной сессии . Я хочу сохранить этот файл и закрыть его - но с удаленного компьютера! (В обоих сеансах зарегистрирован один и тот же пользователь; я могу sudo, если это необходимо)

Я пытался использовать, xdotool searchно это не удается найти окно. Есть ли способ сделать то, что я хочу от этого второго сеанса? Я могу видеть процесс с, ps -A я могу даже видеть открытый файл с lsof! Как я могу сделать «сохранить и закрыть» на нем?

10
Вы * можете * просто убить процесс - если у вас нет серьезных несохраненных изменений, это будет просто. Если вы это сделаете, он все равно должен попытаться восстановить документ при следующем открытии. Wayne Werner 11 лет назад 2
Это правда @wayne, это, вероятно, будет автоматически восстанавливать ... Спасибо за предложение. Хотя я не уверен, что хочу воспользоваться этим шансом! Нет способа отправить нажатия клавиш (или любые другие прямые сообщения)? Это звучит так просто. Sanjay Manohar 11 лет назад 0
Я уверен, что есть пути - я просто не знаю о них. Некоторые сложные из них включают установку простого VNC-клиента и настройку DISPLAY =: 0 (или любой другой экран, на котором работает ваша другая учетная запись), а затем запустите сервер и получите доступ к нему от клиента. Но это может быть чрезмерным. У LibreOffice может быть протокол сообщений - я не очень знаком с ним, потому что я использую либо Google Docs, либо текстовые файлы в Vim (включая LaTex) ... Wayne Werner 11 лет назад 0
используйте VNC, чтобы получить доступ к главному окну из другого места Olivier Dulac 11 лет назад 0
xdotool запускает текущее значение $ DISPLAY сеанса. Вы можете использовать ssh на любой машине или vncserver, а затем запустить xdotool на нем. Например, если вы запускаете vncserver на порту 5901, он использует: 1 экран по соглашению. Итак, запустите `DISPLAY: 1`, затем запустите любую X-программу (xeyes для теста) и запустите ее под VNC. То же относится и к удаленным vncservers. SSH в машину, затем просто запустите экспорт DISPLAY: 1, прежде чем использовать. erm3nda 8 лет назад 1

2 ответа на вопрос

9
mr.spuratic

Assuming the default configuration, xdpyinfo on "original" would show a display of ":0.0", e.g.

xdpyinfo | grep name 

If your DISPLAY environment variable on "x2go" is ":1.0" then it should be so.

From a terminal on "x2go" Try to find the window-id:

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

It's possible that access control is set up so that it will not work, but I think it should if you are the same userid on the same host (i.e. access to ~/.Xauthority). Check "xauth list" output if no access.

If it works, then use your favourite tool to control it. Add "-int" to the xwininfo above to print the windowid in decimal if your tool requires it that way, xdotool does not:

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

or you might have better luck with these instead of "ctrl+s"/"ctrl+q"

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

You might need "alt+" instead of "meta+", I have non-standard meta/alt/super mappings. meta works for me, tested using an Xnest. I'm assuming unaltered English menu layout and accelerators.

It's possible there's a popup in your way, in which case it's worth trying:

xdotool key "Escape" 

a few times, then retrying the save & close. Remember xdotool is fussy about exact case of "key" names.

You should be able to try all this by starting libreoffice on x2go, and NOT modifying your DISPLAY. You should save the commands to a shell script file so that focus changes don't mess you up.

lsof should show file no longer open if it worked :-)

Работает отлично - спасибо! Sanjay Manohar 9 лет назад 0
Спасибо за подсказку `ключ xdotool" Escape "` об именах, но не пробовал длинные имена: D erm3nda 8 лет назад 0
1
Joshua K

Похоже, есть пара возможных требований. очевидно, что хост должен быть в файле xhosts (он был помечен как ответ) и экспортировано соответствующее значение DISPLAY. Этот пост должен помочь вам сделать это так, как вы хотите, позволяя xdotool найти удаленное окно x11 .

Похожие вопросы