xdotool全面指南
xdotool
全面指南:Linux 桌面自动化终极工具
xdotool
是一个强大的命令行工具,用于在 Linux 系统上自动化桌面交互。它可以模拟键盘输入、鼠标移动/点击、窗口操作等,是自动化测试、宏创建和辅助功能的理想选择。
一、核心功能概览
功能类别 | 主要命令 | 描述 |
---|---|---|
鼠标控制 | mousemove , click , mousedown , mouseup |
控制鼠标位置和点击 |
键盘模拟 | type , key , keydown , keyup |
模拟键盘输入和按键 |
窗口操作 | search , windowactivate , windowsize , windowmove |
查找和控制窗口 |
实用工具 | getwindowfocus , getmouselocation , getwindowgeometry |
获取系统状态信息 |
高级功能 | behave , exec , sleep |
创建复杂行为链 |
二、安装与基础用法
安装方法
bash
复制
# Debian/Ubuntu
sudo apt install xdotool
# Fedora
sudo dnf install xdotool
# Arch Linux
sudo pacman -S xdotool
基本命令结构
bash
复制
xdotool [选项] <命令> [参数]
三、鼠标控制详解
1. 移动鼠标
bash
复制
# 移动到绝对坐标 (X,Y)
xdotool mousemove 100 200
# 相对移动
xdotool mousemove_relative 50 -30
# 使用屏幕编号 (多显示器)
xdotool mousemove --screen 1 300 400
2. 鼠标点击
bash
复制
# 左键单击 (按钮1)
xdotool click 1
# 右键单击 (按钮3)
xdotool click 3
# 双击
xdotool click --repeat 2 1
# 按下和释放分开控制
xdotool mousedown 1
sleep 0.5
xdotool mouseup 1
3. 鼠标拖动
bash
复制
# 拖动示例
xdotool mousemove 100 100
xdotool mousedown 1
xdotool mousemove_relative 200 0
xdotool mouseup 1
四、键盘控制详解
1. 文本输入
bash
复制
# 直接输入文本
xdotool type "Hello World!"
# 带延迟的输入 (毫秒)
xdotool type --delay 100 "Slow typing"
# 特殊字符需要转义
xdotool type 'Exclamation\! Question\?'
2. 按键模拟
bash
复制
# 单个按键
xdotool key a
xdotool key Return
# 组合键
xdotool key ctrl+c
xdotool key alt+Tab
# 按键序列
xdotool key Up Up Down Down Left Right Left Right B A
3. 长按控制
bash
复制
# 按下Ctrl
xdotool keydown ctrl
# 按V键
xdotool key v
# 释放Ctrl
xdotool keyup ctrl
五、窗口操作详解
1. 查找窗口
bash
复制
# 按标题查找
xdotool search --name "Firefox"
# 按类名查找
xdotool search --class "terminal"
# 按PID查找
xdotool search --pid 1234
# 组合条件
xdotool search --onlyvisible --name "Document"
2. 窗口控制
bash
复制
# 激活窗口
xdotool windowactivate $(xdotool search --name "Calculator")
# 关闭窗口
xdotool windowclose $WINDOWID
# 最大化窗口
xdotool windowsize $WINDOWID 100% 100%
# 调整窗口大小
xdotool windowsize $WINDOWID 800 600
# 移动窗口
xdotool windowmove $WINDOWID 0 0
3. 焦点控制
bash
复制
# 获取当前焦点窗口
xdotool getwindowfocus
# 设置焦点窗口
xdotool windowfocus $WINDOWID
# 设置焦点并激活
xdotool windowactivate --sync $WINDOWID
六、实用工具命令
1. 获取鼠标信息
bash
复制
# 获取当前鼠标位置
xdotool getmouselocation
# 输出格式: x:100 y:200 screen:0 window:12345678
# 获取带详细信息的鼠标位置
xdotool getmouselocation --shell
# 输出:
# X=100
# Y=200
# SCREEN=0
# WINDOW=12345678
2. 获取窗口信息
bash
复制
# 获取窗口几何信息
xdotool getwindowgeometry $WINDOWID
# 输出:
# 窗口 12345678
# 位置: 100,200 (屏幕: 0)
# 大小: 800x600
# 获取窗口名称
xdotool getwindowname $WINDOWID
七、高级用法与脚本编写
1. 命令链执行
bash
复制
# 单行执行多个命令
xdotool key ctrl+alt+t sleep 1 type 'htop' sleep 0.5 key Return
2. 窗口行为绑定
bash
复制
# 当鼠标进入窗口时执行命令
xdotool behave $WINDOWID mouse-enter exec xdotool key F11
3. 完整自动化脚本示例
bash
复制
#!/bin/bash
# 打开终端
xdotool key ctrl+alt+t
sleep 1
# 输入命令并执行
xdotool type "echo '自动化测试开始'"
xdotool key Return
sleep 0.5
# 打开Firefox
xdotool key super
sleep 0.5
xdotool type "firefox"
sleep 0.5
xdotool key Return
sleep 2
# 在新标签页打开网页
xdotool key ctrl+t
sleep 1
xdotool type "https://www.example.com"
xdotool key Return
八、实用技巧与注意事项
1. 精确时间控制
bash
复制
# 使用usleep实现毫秒级延迟
xdotool mousemove 100 100
usleep 500000 # 500毫秒
xdotool click 1
2. 焦点窗口安全操作
bash
复制
# 保存当前焦点窗口
CURRENT_WIN=$(xdotool getwindowfocus)
# 操作其他窗口
xdotool windowactivate --sync $TARGET_WIN
xdotool type "Hello"
# 恢复原焦点
xdotool windowactivate --sync $CURRENT_WIN
3. 多显示器支持
bash
复制
# 获取屏幕信息
xrandr | grep " connected"
# 在指定屏幕操作
xdotool mousemove --screen 1 100 100
4. 常见问题解决
问题:命令执行太快
bash
复制
# 在命令间添加延迟
xdotool key ctrl+t sleep 0.5 type "url" sleep 0.2 key Return
问题:特殊字符处理
bash
复制
# 使用单引号和转义
xdotool type 'Special characters: \! @ # $ % ^ & * ( )'
问题:Wayland兼容性
bash
复制
# 切换到Xorg会话或在脚本前添加:
export XDG_SESSION_TYPE=x11
九、与其他工具集成
1. 结合 wmctrl
bash
复制
# 获取活动窗口ID
ACTIVE_WIN=$(wmctrl -a :ACTIVE: -v 2>&1 | grep "Using window" | awk '{print $4}')
# 最大化活动窗口
xdotool windowsize $ACTIVE_WIN 100% 100%
2. 结合 scrot
截图
bash
复制
# 选择区域截图
xdotool mousemove 100 100 mousedown 1 mousemove 300 300 mouseup 1
sleep 0.5
scrot -s area.png
3. 结合 notify-send
通知
bash
复制
# 脚本完成后发送通知
xdotool type "任务完成!"
notify-send "自动化" "脚本执行完毕"
十、典型应用场景
- 自动化测试:重复执行UI操作序列
- 宏创建:一键执行复杂操作链
- 辅助功能:为行动不便用户创建控制脚本
- 批量操作:同时控制多个窗口
- 演示录制:精确控制演示流程
- 游戏自动化:模拟重复操作
- 远程控制:通过SSH控制桌面
总结
xdotool
是一个功能强大且灵活的桌面自动化工具,通过掌握其核心功能和高级技巧,你可以:
- 自动化重复性桌面任务
- 创建复杂的交互脚本
- 集成到CI/CD流程进行UI测试
- 开发辅助功能工具
- 提高工作效率
虽然 xdotool
在 Wayland 环境下的支持有限,但在 X11 环境中它仍然是功能最全面的桌面自动化工具之一。结合其他 Linux 工具如 wmctrl
、scrot
和 notify-send
,可以构建出强大的桌面自动化解决方案。