有什么办法可以从bash获取鼠标按钮状态吗?Xdotool只能获取鼠标位置。
我想在可以定义规则的地方进行设置,当按下鼠标按钮时,可以执行脚本。
有什么办法可以从bash获取鼠标按钮状态吗?Xdotool只能获取鼠标位置。
我想在可以定义规则的地方进行设置,当按下鼠标按钮时,可以执行脚本。
Answers:
xinput --query-state <mouse_id>
这为您提供了所有鼠标按钮的状态,如下所示:
2 classes :
ButtonClass
button[1]=up
button[2]=up
button[3]=up
button[4]=up
button[5]=up
button[6]=up
button[7]=up
button[8]=up
button[9]=up
button[10]=up
button[11]=up
button[12]=up
button[13]=up
button[14]=up
button[15]=up
button[16]=up
ValuatorClass Mode=Relative Proximity=In
valuator[0]=313
valuator[1]=667
valuator[2]=-20
mouse_id可以从以下位置获得:
xinput --list
这是一个小的鼠标按钮监视程序脚本:
#!/bin/bash
MOUSE_ID=$(xinput --list | grep -i -m 1 'mouse' | grep -o 'id=[0-9]\+' | grep -o '[0-9]\+')
STATE1=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
while true; do
sleep 0.2
STATE2=$(xinput --query-state $MOUSE_ID | grep 'button\[' | sort)
comm -13 <(echo "$STATE1") <(echo "$STATE2")
STATE1=$STATE2
done
您可能需要将MOUSE_ID检测字符串('mouse')更改为其他名称。
您可以使用命令行工具xev
找出X环境中鼠标按钮的状态。
$ xev
...
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064320, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064439, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065208, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
ButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065337, (164,14), root:(166,101),
state 0x100, button 1, same_screen YES
ButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319066059, (164,14), root:(166,101),
state 0x0, button 1, same_screen YES
但是,这些信息只能使您部分地找到解决方案。您要从上方提取的关键信息是与鼠标上的特定按钮关联的数字。在我的示例中,我按下了左按钮“ buton 1”。
您可以使用此工具来设置与按下的按钮相关联的操作。您甚至可以设置一条规则,该规则要求同时按下一个键或什至一个键+按钮。
您首先需要确保已安装软件包xbindkeys。
然后,仅需运行一次以下命令即可创建模板xbindkeys配置文件。
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
创建文件后,您可以在文本编辑器中将其打开并添加如下规则:
"xterm"
b:3
该规则表明我们要在xterm
按下按钮3时运行程序。“按钮3”是我的鼠标右键。
进行上述更改后,如果xbindkeys已经运行,则需要将其杀死,然后重新启动它。
$ killall xbindkeys
$ xbindkeys
现在,只要我单击鼠标右键,xterm
就可以运行该程序,它将执行。
您无法进行蛋糕按钮按下事件并食用。如果您希望脚本收到鼠标事件,那么鼠标事件将发送到您的脚本而不是其他任何应用程序,这意味着您的脚本必须捕获鼠标事件。如果您的脚本没有声明该事件,则应该获取该事件的窗口将其获取。
如果需要,可以将鼠标事件重新发送到焦点窗口或给定坐标(xdotool click
)的窗口。
您可以使用XBindKeys在某些鼠标或键盘事件上执行脚本。
MouseButton1Down
并且MouseButton1Up
事件时采取行动。