如何使用xdotool正确模拟左Alt与右Alt键同时按下操作
xdotool同时模拟左Alt(Alt_L)、右Alt(Alt_R)按键的正确方法
之前命令失效的核心原因
- 同修饰键自动合并:xdotool默认会把Alt_L、Alt_R都归类为通用Alt修饰键,用
+连写或者不带参数触发时,会自动判定为重复的修饰键,直接合并成单个Alt事件,不会发送两个独立的按键按下信号。 - 命令拼写错误:第三条命令把
xdotool拼写成xdtool,第四条命令抬起时写的是Alt_l(小写l),keysym严格区分大小写,无法被识别。 - 逻辑错误:第一条命令里的
key Alt_L是单次点击Alt_L(按下后立刻抬起),不会保持按住状态,自然无法形成两个键同时按下的状态;第二条命令里的keyup Alt不存在对应键名,Alt是修饰组统称,不是具体的按键keysym。 - 事件间隔过短:不带
--delay参数时,xdotool发送的按键事件间隔极短,会被Xorg服务器判定为重复冗余事件直接丢弃。
正确可运行的命令
方法1:keysym写法(适合默认键盘布局,Alt_R没有被改映射的场景)
# 依次按下左Alt、右Alt,每个按键事件间隔50ms避免被拦截 xdotool keydown --delay 50 Alt_L keydown --delay 50 Alt_R # 保持两个键同时按住1秒,可根据需要修改时长 sleep 1 # 逆序抬起两个按键 xdotool keyup --delay 50 Alt_R keyup --delay 50 Alt_L
方法2:keycode写法(100%兼容所有键盘布局,最稳定)
如果方法1失效,说明你的桌面环境把Alt_R默认映射成了ISO_Level3_Shift(多语言布局的第三级切换键),这时候用硬件keycode写命令不会受映射影响:
- 先查两个键的keycode,终端运行
xev | grep keycode,在弹出的小窗口里分别按左Alt、右Alt,记录返回的keycode数值,常见默认值为左Alt=64、右Alt=108。 - 替换成你查到的keycode执行命令即可:
# 示例keycode为左Alt=64、右Alt=108,请替换成你自己查到的数值 xdotool keydown --delay 50 64 keydown --delay 50 108 sleep 1 xdotool keyup --delay 50 108 keyup --delay 50 64
注意事项
- 不要用
+号连接同属一个修饰组的按键(比如两个Alt、两个Ctrl、两个Shift),一定会被xdotool自动合并。 - 按键抬起的顺序最好和按下顺序相反,避免出现修饰键卡键的问题。
- 如果是在脚本里运行,建议在命令前加
--sync参数,让xdotool等上一个按键事件被X服务器接收后再发下一个,稳定性更高,比如xdotool keydown --sync --delay 50 Alt_L。
内容的提问来源于stack exchange,提问作者Jonathan Strange
相关产品推荐
相关产品推荐

