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 감지 문자열 ( 'mouse')을 다른 것으로 변경해야 할 수도 있습니다.
xinput --list
나에게 준다 X Input extension not available.
. 슬프게도이 문제에 대해 Google Xvnc4
은 최소한의 데비안 VM 에서 내 경우에 도움이되는 것을 밝히지 않습니다 . 아마 나는 운이 없다
명령 행 도구 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
에 따라 행동하는 이벤트.