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


11

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

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


2
Вы можете просто убить процесс - если у вас нет серьезных несохраненных изменений, это будет просто. Если вы это сделаете, он все равно должен попытаться восстановить документ при следующем открытии.
Уэйн Вернер

Это правда @wayne, это, вероятно, будет автоматически восстанавливать ... Спасибо за предложение. Не уверен, что если бы я хотел воспользоваться этим шансом! Нет способа отправить нажатия клавиш (или любые другие прямые сообщения)? Это звучит так просто.
Санджай Манохар

Я уверен, что есть пути - я просто не знаю о них. Некоторые сложные включают установку простого клиента VNC и настройку DISPLAY=:0(или любой другой экран, на котором работает ваша другая учетная запись), а затем запустите сервер и получите доступ к нему от клиента. Но это может быть чрезмерным. У LibreOffice может быть протокол сообщений - я не очень знаком с ним, потому что я использую либо Google Docs, либо текстовые файлы в Vim (включая LaTex) ...
Уэйн Вернер

используйте VNC, чтобы получить доступ к главному окну из другого места
Оливье Дюлак

1
xdotool работает с текущим значением сеанса $ DISPLAY. Вы можете использовать ssh на любой машине или vncserver, а затем запустить xdotool на нем Например, если вы запускаете vncserver на порту 5901, он использует: 1 экран по соглашению. Итак, запустите, DISPLAY:1затем запустите любую X-программу (xeyes for test) и запустите ее под VNC. То же относится и к удаленным vncservers. SSH в машину, затем просто запустите экспорт DISPLAY: 1, прежде чем использовать.
m3nda

Ответы:


9

Предполагая конфигурацию по умолчанию, xdpyinfo на «original» будет отображать «: 0.0», например

xdpyinfo | grep name

Если ваша переменная окружения DISPLAY для "x2go" равна ": 1.0", то так и должно быть.

Из терминала на "x2go" попробуйте найти идентификатор окна:

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

Возможно, что управление доступом настроено так, что оно не будет работать, но я думаю, что должно, если вы используете один и тот же ИД пользователя на одном хосте (т.е. доступ к ~ / .Xauthority). Проверьте вывод «xauth list», если нет доступа.

Если это работает, то используйте ваш любимый инструмент для управления им. Добавьте «-int» в xwininfo выше, чтобы напечатать windowid в десятичном формате, если ваш инструмент требует этого, xdotool не делает:

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

или вам может повезти с ними вместо "ctrl + s" / "ctrl + q"

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

Вам может потребоваться «alt +» вместо «meta +», у меня есть нестандартные отображения meta / alt / super. у меня работает meta, протестировано с помощью Xnest. Я предполагаю неизменное английское расположение меню и ускорители.

Возможно, у вас есть всплывающее окно, и в этом случае стоит попробовать:

xdotool key "Escape"

несколько раз, затем повторите попытку сохранения и закрытия. Помните, что xdotool суетливо относится к точному регистру «ключевых» имен.

Вы должны иметь возможность попробовать все это, запустив libreoffice на x2go, а НЕ изменив свой DISPLAY. Вы должны сохранить команды в файле сценария оболочки, чтобы изменения фокуса не мешали вам.

lsof должен показывать, что файл больше не открывается, если он работает :-)


Спасибо за подсказку xdotool key "Escape"об именах, но не пробовал длинные имена: D
m3nda

1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.