将击键发送到在其他X会话上打开的窗口的命令行方式


11

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

我尝试使用,xdotool search但是找不到窗口。有什么方法可以完成我第二次会议的工作吗?我ps -A 什至可以看到打开过程,甚至可以看到lsof!如何在其上“保存并关闭”?


2
可以终止该过程-如果您没有任何严重的未保存的更改,这将很简单。如果这样做,下次打开时,它仍应尝试恢复文档。
韦恩·维尔纳

@wayne是正确的,它可能会自动恢复...感谢您的建议。不知道我是否想借此机会!无法发送按键(或任何其他直接消息)?听起来很简单。
Sanjay Manohar

我敢肯定有办法-我只是不知道它们。一些复杂的操作涉及安装一个简单的VNC客户端并进行设置DISPLAY=:0(或其他帐户碰巧显示的内容),然后启动服务器并从客户端访问该服务器。但这可能太过分了。LibreOffice可能具有消息协议-我不是很熟悉它,因为我在Vim中使用Google文档或纯文本文件(包括LaTex)...
Wayne Werner

使用VNC从另一个位置访问主窗口
Olivier Dulac 2012年

1
xdotool在当前会话的$ DISPLAY值上运行。您可以ssh任何计算机或vncserver,然后在其上运行xdotool。例如,如果您在端口5901上运行vncserver,则按照惯例使用:1屏幕。因此,运行DISPLAY:1然后启动任何X程序(用于测试的xeyes),并将在VNC下运行。同样适用于远程vncserver。SSH进入计算机,然后在使用前简单运行export DISPLAY:1。
m3nda 2015年

Answers:


9

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

xdpyinfo | grep name

如果您在“ x2go”上的DISPLAY环境变量是“:1.0”,则应该是这样。

从“ x2go”上的终端尝试找到window-id:

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

可能已设置访问控制,使其无法正常工作,但如果您在同一主机上使用相同的用户ID(即访问〜/ .Xauthority),我认为应该这样做。如果没有访问权限,请检查“ xauth list”输出。

如果可行,请使用您喜欢的工具进行控制。如果您的工具需要,则在上面的xwininfo中添加“ -int”以十进制显示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对“键”名称的确切大小写很挑剔。

您应该能够通过在x2go上启动libreoffice而不尝试修改DISPLAY来尝试所有这些操作。您应该将命令保存到Shell脚本文件中,以使焦点更改不会使您感到混乱。

lsof应该显示文件不再打开:-)


谢谢您提供xdotool key "Escape"有关名称的提示,但没有尝试使用长名称:D
m3nda 2015年

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.