xdotool实际上是X11窗口的命令行自动化工具,可以实现 按键/组合按键事件模拟、鼠标事件模拟、文本输入模拟、窗口信息及焦点的获取。
在android系统中模拟key事件/motion事件的工具主要是sendevent和getevent,那么在Linux上是否有更好的工具呢?当然是有的,Xorg系列的X工具之xdotool就是这个模拟事件非常棒的工具。而且用起来感觉比android要方便的多。可以在ubuntu/Debian上下载体验。只需要执行命令
$sudo apt install xdotools
安装即可。本文主要介绍xdotool的一些常见用法,通过xdotool --help查看下命令参数,如下:
- Available commands:
- getactivewindow
- getwindowfocus
- getwindowname
- getwindowpid
- getwindowgeometry
- getdisplaygeometry
- search
- selectwindow
- help
- version
- behave
- behave_screen_edge
- click
- getmouselocation
- key
- keydown
- keyup
- mousedown
- mousemove
- mousemove_relative
- mouseup
- set_window
- type
- windowactivate
- windowfocus
- windowkill
- windowclose
- windowmap
- windowminimize
- windowmove
- windowraise
- windowreparent
- windowsize
- windowunmap
- set_num_desktops
- get_num_desktops
- set_desktop
- get_desktop
- set_desktop_for_window
- get_desktop_for_window
- get_desktop_viewport
- set_desktop_viewport
- exec
- sleep
主要涉及4个方面:按键/组合按键事件模拟、鼠标事件模拟、文本输入模拟、窗口信息。
@1 单个按键输入:
- #模拟按键按下并抬起,可以使用
- $xdotool key a
- #俩者等价
- #keydown 表示按键按下,keyup 表示按键抬起
- $xdotool keydown a keyup a
@2 多按键组合输入:
如果模拟组合按键可以使用如下方式,这里可以组合2/3个组合按键,比如:
- #组合按键 alt+F11
- $xdotool alt+F11
- #组合按键 ctrl+shift+t
- $xdotool ctrl+shift+t
@1 模拟鼠标:
- #滑鼠移動到 (100, 200) 的位置
- $xdotool mousemove 100 200
- #按下滑鼠左鍵(左鍵:1、滾輪:2、右鍵:3、滾輪上/下:4/5)
- #点击操作
- $xdotool click 1
- #鼠标按下操作
- $xdotool mousedown 2
- #鼠标抬起操作
- $xdotool mouseup 2
@2 移动到坐标位置:
- #将鼠标移动到位置坐标:
- $xdotool mousemove 100 200
- #将鼠标相对当前位置分别移动x=100,y=100
- $xdotool mousemove_relative 100 100
@3 取得目前滑鼠位置:
$xdotool getmouselocation
- #对获取焦点的窗口 输入文本 text
- $xdotool type 'text'
- #对获取焦点的窗口 每隔500ms自动输入一个字符,输入文本 Hello world
- $xdotool type --delay 500 "Hello world"
这里总结了一些常见的xdotool的window操作
- #获取当前窗口的 窗口ID
- $xdotool getactivewindow
- 39845898 #这里会输出[窗口ID]
-
- #获得显示器长宽
- $ xdotool getdisplaygeometry
- 1920 1080 #输出的显示器长宽
-
- #通过[窗口ID]获得window的起点 和 长宽
- $xdotool getwindowgeometry [窗口ID]
- Window 39845898
- Position: 72,27 (screen: 0) #窗口起点
- Geometry: 1848x1053 #窗口长宽
-
- #通过窗口ID获得 该窗口 terminal的 进程ID
- $xdotool getwindowpid [窗口ID]
-
- #选中窗口,通过该命令 会出现一个图标,选中哪个窗口,就能输出哪个窗口的[窗口ID]
- $xdotool selectwindow
-
- #使得窗口ID为39845898的窗口 获得焦点
- $xdotool windowfocus [窗口ID]
关于xdotool的官方手册,可参考:哦xdotool freeBSD手册个