命令行方式将击键发送到在不同 X-session 上打开的窗口

命令行方式将击键发送到在不同 X-session 上打开的窗口

在我的主机上,我打开并登录了一个 Ubuntu 桌面。然后,我还从远程计算机登录到这台机器,使用 X2go 创建一个新的 X-session。我有一个 libreoffice 文件在原始会话中打开。我想保存并关闭此文件 - 但从远程机器!(两个会话都有相同的用户登录;如果需要,我可以使用 sudo)

我尝试使用xdotool search,但无法找到窗口。有没有办法从第二个会话中完成我想要的操作?我可以使用 查看进程,ps -A 甚至可以使用 查看打开的文件lsof!我该如何“保存并关闭”?

答案1

假设默认配置,“original”上的 xdpyinfo 将显示“:0.0”,例如

xdpyinfo | grep name

如果“x2go”上的 DISPLAY 环境变量是“:1.0”,那么应该如此。

从“x2go”上的终端尝试查找窗口 ID:

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

有可能设置了访问控制,因此它无法工作,但我认为如果您是同一主机上的同一用户 ID(即访问 ~/.Xauthority),它应该可以工作。如果没有访问权限,请检查“xauth list”输出。

如果有效,则使用您最喜欢的工具来控制它。如果您的工具需要这样,请将“-int”添加到上面的 xwininfo 以十进制打印窗口 ID,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 对“键”名称的大小写要求很严格。

您应该能够通过在 x2go 上启动 libreoffice 来尝试所有这些,并且不修改您的 DISPLAY。您应该将命令保存到 shell 脚本文件中,这样焦点更改就不会让您感到困惑。

如果 lsof 有效的话,应该会显示文件不再打开:-)

答案2

看起来有几个可能的要求。显然主机需要位于 xhosts 文件中(它被标记为答案),并且导出适当的 DISPLAY 值。这篇文章应该可以帮助您按照您想要的方式进行操作,允许xdotool 查找远程 x11 窗口

相关内容