如何以编程方式控制X11转发的应用程序?


4

我想设置X11转发以在服务器上运行远程X应用程序,并且X11客户端可以处理UX交互。

但是,我想配置X11客户端或将其伪造为以编程方式实际执行用户交互(通过脚本)。

例如,我要运行一个需要一些鼠标单击或键盘交互(例如安装程序)的应用程序,因此我可以通过编程方式将这些单击或键盘按键信号从脚本发送到应用程序,直到完成为止。

有可能吗?如何做到这一点或从哪里开始?或者,我如何重用/劫持X11协议以注入自己的非用户交互作用?

Answers:


3

到目前为止,我已经找到了xdotool可以轻松伪造鼠标和键盘输入的工具。

简单键盘交互的一些示例:

xdotool key a
xdotool key Down
xdotool key Tab
xdotool key "Return"
xdotool key "Control_L+t"
xdotool key Alt+1
xdotool key ctrl+v
xdotool key Super
xdotool key KP_Enter
xdotool key ctrl+Page_Up
xdotool key ctrl+U005C
xdotool key ctrl+shift+e
xdotool key --delay 1000  shift+minus # for underscore
xdotool key --clearmodifiers shift+Insert
xdotool key --clearmodifiers --window 0x2600006 alt+1 0 9 8 7 6 5 4 3

与鼠标交互的示例脚本:

WINDOWID=$(xdotool selectwindow)

xdotool set_window --overrideredirect 1 $WINDOWID windowunmap $WINDOWID windowmap $WINDOWID
xdotool windowsize $WINDOWID 10 100%

# Set behaviors
xdotool behave $WINDOWID mouse-enter windowfocus windowsize --usehints 80 100% &
xdotool behave $WINDOWID mouse-leave windowsize 4 100% &

另一个示例:如何将F5击键发送到第一个Chrome窗口

更多脚本示例,请在GitHub官方页面上找到它们。

您可以从apt仓库安装它,例如:sudo apt-get install xdotool或从源代码进行编译。


葡萄酒

如果X11应用程序在Wine下运行,您也可以使用Winetricks。检查源文件(它是一个Shell脚本),以获取有关如何使用AutoHotkey工具控制应用程序的指导。

更高级的方法可以包括使用winedbg调试器并附加到进程:

$ winedbg
Wine-dbg>info process
 00000008 3        'terminal.exe'
Wine-dbg>attach 8
0xf7709c0e __kernel_vsyscall+0xe in [vdso].so: int  $0x80

那么您可以使用调试器直接进行交互(请参阅:man winedbg以获取帮助)。

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.