Apakah ada cara untuk mendapatkan status tombol mouse dari bash? Xdotool hanya bisa mendapatkan lokasi mouse.
Saya ingin mengatur sesuatu di mana saya dapat mendefinisikan aturan di mana ketika tombol mouse ditekan, skrip dapat dijalankan.
Apakah ada cara untuk mendapatkan status tombol mouse dari bash? Xdotool hanya bisa mendapatkan lokasi mouse.
Saya ingin mengatur sesuatu di mana saya dapat mendefinisikan aturan di mana ketika tombol mouse ditekan, skrip dapat dijalankan.
Jawaban:
xinput --query-state <mouse_id>
Ini memberi Anda keadaan untuk semua tombol mouse, yang terlihat seperti ini:
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 dapat diperoleh dari:
xinput --list
Berikut ini adalah script pengamat tombol mouse kecil:
#!/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
Anda mungkin perlu mengubah string deteksi MOUSE_ID ('mouse') menjadi sesuatu yang lain.
xinput --list
memberi saya X Input extension not available.
. Sayangnya Google dalam hal ini tidak mengungkapkan apa pun yang membantu dalam kasus saya: Xvnc4
dalam VM Debian minimal. Kemungkinan saya kurang beruntung
Anda dapat menggunakan alat baris perintah xev
untuk mengetahui status tombol mouse Anda dalam lingkungan 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
Tetapi informasi ini hanya memberi Anda sebagian solusi. Informasi kunci yang ingin Anda ekstrak dari atas adalah nomor mana yang dikaitkan dengan tombol tertentu pada mouse Anda. Dalam contoh saya, saya menekan tombol kiri, "buton 1".
Anda dapat menggunakan alat ini untuk mengatur tindakan yang terkait dengan tombol yang ditekan. Anda bahkan dapat mengatur aturan yang mengharuskan tombol ditekan atau bahkan tombol + ditekan bersamaan.
Anda harus terlebih dahulu memastikan paket xbindkeys diinstal.
Maka Anda harus menjalankan perintah berikut, satu kali saja, untuk membuat file konfigurasi template xbindkeys.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
Dengan file yang dibuat Anda dapat membukanya di editor teks dan menambahkan aturan seperti ini:
"xterm"
b:3
Aturan ini menyatakan bahwa kita ingin menjalankan program xterm
ketika tombol 3 ditekan. "Tombol 3" adalah tombol kanan mouse saya.
Dengan perubahan di atas, kita perlu mematikan xbindkeys jika sudah berjalan dan kemudian restart.
$ killall xbindkeys
$ xbindkeys
Sekarang dengan ini berjalan setiap kali saya mengklik tombol kanan mouse, sebuah xterm
akan dieksekusi.
jika Anda hanya ingin menjalankan perintah bash di xterm pada klik mouse (atau acara roda) Anda dapat mencoba contoh ini:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
ini untuk acara roda (untuk set klik 12 sebagai gantinya)
Anda tidak dapat memiliki acara tekan tombol kue dan memakannya. Jika Anda ingin skrip Anda menerima acara mouse, maka acara mouse akan dikirim ke skrip Anda daripada aplikasi lain - itu berarti skrip Anda harus mengambil acara mouse. Jika skrip Anda tidak mengklaim acara, maka jendela yang seharusnya mendapatkannya akan mendapatkannya.
Jika mau, Anda dapat mengirim ulang acara mouse ke jendela fokus atau jendela pada koordinat yang diberikan ( xdotool click
).
Anda dapat menggunakan XBindKeys untuk menjalankan skrip pada acara mouse atau keyboard tertentu.
MouseButton1Down
danMouseButton1Up
peristiwa untuk ditindaklanjuti.