Способ командной строки для отправки нажатий клавиш в окно, открытое в другом сеансе X
На моей основной машине у меня есть рабочий стол Ubuntu, открытый и вошедший в систему. Затем я также подключаюсь к этой машине с удаленного компьютера, используя X2go, который создает новый X-сеанс. У меня есть файл libreoffice, открытый на исходной сессии. Я хочу сохранить этот файл и закрыть его - но с удаленного компьютера! (В обоих сеансах зарегистрирован один и тот же пользователь; я могу sudo при необходимости)
Я пытался использовать xdotool search
но это не может найти окно. Есть ли способ сделать то, что я хочу от этого второго сеанса? Я могу видеть процесс с ps -A
Я даже могу увидеть открытый файл с lsof
! Как я могу сделать "сохранить и закрыть" на нем?
2 ответа
Предполагая конфигурацию по умолчанию, 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 должен показывать, что файл больше не открывается, если он работал:-)
Похоже, есть пара возможных требований. очевидно, что хост должен находиться в файле xhosts (он был помечен как ответ) и экспортировано соответствующее значение DISPLAY. Этот пост должен помочь вам сделать это так, как вы хотите, позволяя xdotool найти удаленное окно x11.