Способ командной строки для отправки нажатий клавиш в окно, открытое в другом сеансе 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.

Другие вопросы по тегам