bashからマウスボタンの状態を取得する方法はありますか?Xdotoolはマウスの位置のみを取得できます。
マウスボタンが押されたときにスクリプトを実行できるルールを定義できる場所を設定したいと思います。
bashからマウスボタンの状態を取得する方法はありますか?Xdotoolはマウスの位置のみを取得できます。
マウスボタンが押されたときにスクリプトを実行できるルールを定義できる場所を設定したいと思います。
回答:
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検出文字列(「マウス」)を別のものに変更する必要がある場合があります。
コマンドラインツール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がインストールされていることを確認する必要があります。
次に、次のコマンドを1回だけ実行して、テンプレートxbindkeys構成ファイルを作成する必要があります。
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
ファイルを作成したら、テキストエディターで開き、次のようなルールを追加できます。
"xterm"
b:3
このルールはxterm
、ボタン3が押されたときにプログラムを実行することを示しています。「ボタン3」はマウスの右ボタンです。
上記の変更により、xbindkeysが既に実行されている場合は強制終了してから再起動する必要があります。
$ killall xbindkeys
$ xbindkeys
これで、マウスの右ボタンをクリックするたびにxterm
実行され、実行されます。
ケーキボタンを押してイベントを開催して食べることはできません。スクリプトでマウスイベントを受信する場合、マウスイベントは他のアプリケーションではなくスクリプトに送信されます。つまり、スクリプトはマウスイベントを取得する必要があります。スクリプトがイベントを要求しない場合、それを取得するウィンドウがそれを取得します。
必要に応じて、マウスイベントをフォーカスされたウィンドウまたは指定された座標(xdotool click
)のウィンドウに再送信できます。
XBindKeysを使用して、特定のマウスまたはキーボードイベントでスクリプトを実行できます。
MouseButton1Down
そしてMouseButton1Up
行動するイベントを監視します。