如何在xbindkeys中为鼠标按键分配延时触发的多命令?
Linux下实现鼠标按键按长按时长触发不同命令(替代XMBC)
我之前在找XMBC的Linux替代方案,一直用xbindkeys,但它没法像XMBC那样按按键长按的不同时长分配多个命令,试过双击脚本也满足不了需求,最后自己写了个脚本解决问题,需求是:
- 短按鼠标键:执行
ctrl+v - 按住几百毫秒:执行
ctrl+c - 长按超过一定时长:调出
copyq menu(剪贴板历史)
具体实现方案
1. 编写监听脚本
创建一个名为mouse_hold_action.sh的脚本,内容如下:
#!/bin/bash # 替换成你要监听的鼠标按键(用xev命令查询,比如侧键可能是button8) TARGET_BUTTON="button8" # 短按阈值(毫秒),低于这个时长判定为短按 SHORT_THRESHOLD=200 # 长按阈值(毫秒),超过这个时长判定为长按 LONG_THRESHOLD=800 # 监听全局按键事件 xinput test-xi2 --root | while read -r line; do # 捕捉按键按下动作 if echo "$line" | grep -q "Press event.*$TARGET_BUTTON"; then # 记录按下的毫秒级时间 start_time=$(date +%s%3N) # 捕捉按键释放动作 elif echo "$line" | grep -q "Release event.*$TARGET_BUTTON"; then end_time=$(date +%s%3N) # 计算按压总时长 hold_time=$((end_time - start_time)) # 根据时长执行对应命令 if [ "$hold_time" -lt "$SHORT_THRESHOLD" ]; then xdotool key ctrl+v elif [ "$hold_time" -lt "$LONG_THRESHOLD" ]; then xdotool key ctrl+c else copyq menu fi fi done
2. 赋予脚本执行权限
打开终端运行:
chmod +x mouse_hold_action.sh
3. 测试与开机自启
- 先在终端直接运行脚本测试:
./mouse_hold_action.sh,尝试按鼠标键的不同时长,验证是否触发对应命令 - 要开机自动运行的话,把脚本加入桌面环境的启动项即可(比如GNOME的「启动应用程序」里添加该脚本路径)
注意事项
- 先安装依赖包:Debian/Ubuntu系执行
sudo apt install xdotool xinput copyq,其他发行版用对应包管理器安装 - 用
xev命令可查询鼠标按键编号:运行xev后按下目标鼠标键,查看输出中的button数字,替换脚本里的TARGET_BUTTON - 可自行调整
SHORT_THRESHOLD和LONG_THRESHOLD的数值,适配自己的操作习惯
内容的提问来源于stack exchange,提问作者ltapia
相关产品推荐
相关产品推荐

