我想设置 X11 转发以在服务器上运行远程 X 应用程序,并且 X11 客户端可以处理 UX 交互。
但是,我想配置 X11 客户端或伪造它以编程方式(从脚本)实际进行用户交互。
例如,我想运行一个需要一些鼠标点击或键盘交互(例如安装程序)的应用程序,因此我可以以编程方式将这些点击或键盘按键信号从脚本发送到应用程序,直到完成。
有可能吗?如何实现这一目标或从哪里开始?或者我如何重新使用/劫持 X11 协议来注入我自己的非用户交互?
答案1
到目前为止我已经找到了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 窗口。
您可以从 apt 存储库安装它,例如:sudo apt-get install xdotool
或从来源。
葡萄酒
如果 X11 应用程序在 Wine 下运行,您还可以使用酿酒技巧。检查源文件(它是一个 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
获取帮助)。