มีวิธีใดบ้างที่จะทำให้สถานะปุ่มเมาส์ผิดพลาด Xdotool สามารถรับตำแหน่งเมาส์ได้เท่านั้น
ฉันต้องการตั้งค่าบางอย่างที่ฉันสามารถกำหนดกฎที่เมื่อกดปุ่มเมาส์สคริปต์สามารถดำเนินการได้
มีวิธีใดบ้างที่จะทำให้สถานะปุ่มเมาส์ผิดพลาด 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 ('เมาส์') เป็นอย่างอื่น
xinput --list
X Input extension not available.
ให้ฉัน น่าเศร้าที่ Google สำหรับเรื่องนี้ไม่เปิดเผยอะไรที่เป็นประโยชน์ในกรณีของฉัน: Xvnc4
ใน Debian 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
จะได้รับการดำเนินการ
หากคุณต้องการรันคำสั่ง bash ใน xterm เมื่อคลิกเมาส์ (หรือเหตุการณ์ wheel) คุณสามารถลองตัวอย่างนี้:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
สิ่งนี้ใช้สำหรับเหตุการณ์วงล้อ (สำหรับชุดคลิก 12 แทน)
คุณไม่สามารถกดปุ่มเค้กและทานมันได้ หากคุณต้องการให้สคริปต์ของคุณรับเหตุการณ์เมาส์เหตุการณ์ของเมาส์จะถูกส่งไปยังสคริปต์ของคุณแทนที่จะเป็นแอปพลิเคชันอื่น - นั่นหมายความว่าสคริปต์ของคุณต้องคว้าเหตุการณ์เมาส์ หากสคริปต์ของคุณไม่ได้รับการอ้างสิทธิ์เหตุการณ์หน้าต่างที่ควรได้รับ
หากคุณต้องการคุณสามารถส่งเหตุการณ์เมาส์ใหม่ไปยังหน้าต่างที่โฟกัสหรือหน้าต่างที่กำหนดพิกัด ( xdotool click
)
คุณสามารถใช้XBindKeysเพื่อรันสคริปต์ในเหตุการณ์ของเมาส์หรือคีย์บอร์ด
MouseButton1Down
และMouseButton1Up
กิจกรรมที่ต้องดำเนินการ