Anda tentu saja dapat mendeteksi kejadian mouse , tetapi saya tidak percaya ada cara untuk menanyakan sistem apakah tombol mouse sedang ditekan sekarang . Setiap pengurai aktivitas mouse yang pernah saya tonton, jika Anda akan memaafkan kodesemu, MouseButton1Downdan MouseButton1Upperistiwa untuk ditindaklanjuti.
DopeGhoti
Saya memerlukan beberapa skrip yang akan menonton mouse dan ketika tombol kiri ditekan, ia akan melakukan sesuatu.
MartinP
Perlu klarifikasi. Apakah Anda menginginkan sesuatu ketika Anda berada di shell, dan Anda mengklik jendela terminal, shell spesifik itu melakukan sesuatu? Atau Anda menginginkannya sehingga ketika Anda mengklik tombol mouse tertentu di mana saja skrip dijalankan (dan Anda tidak perlu melihat skrip di terminal)?
Patrick
Saya perlu skrip, yang akan saya jalankan dan kemudian akan menonton untuk tombol mouse di mana saja di desktop. Itu tidak akan memblokir mouse, itu hanya akan mendengarkannya. Saya mencoba untuk menulis program untuk itu dalam C dengan Xlib, tetapi hanya memiliki XGrabButton dan XGrabPointer dan saya tidak mau, karena ia meraih pointer dan jendela lain tidak mendaftar peristiwa klik.
MartinP
Jawaban:
11
xinput --query-state <mouse_id>
Ini memberi Anda keadaan untuk semua tombol mouse, yang terlihat seperti ini:
xinput --listmemberi saya X Input extension not available.. Sayangnya Google dalam hal ini tidak mengungkapkan apa pun yang membantu dalam kasus saya: Xvnc4dalam VM Debian minimal. Kemungkinan saya kurang beruntung
Tino
6
Anda dapat menggunakan alat baris perintah xevuntuk mengetahui status tombol mouse Anda dalam lingkungan X.
Contoh
$ 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".
xbindkeys
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.
Contoh
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 xtermketika 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 xtermakan dieksekusi.
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.Jawaban:
Ini memberi Anda keadaan untuk semua tombol mouse, yang terlihat seperti ini:
Mouse_id dapat diperoleh dari:
Berikut ini adalah script pengamat tombol mouse kecil:
Anda mungkin perlu mengubah string deteksi MOUSE_ID ('mouse') menjadi sesuatu yang lain.
sumber
xinput --list
memberi sayaX 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 beruntungAnda dapat menggunakan alat baris perintah
xev
untuk mengetahui status tombol mouse Anda dalam lingkungan X.Contoh
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".
xbindkeys
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.
Contoh
Anda harus terlebih dahulu memastikan paket xbindkeys diinstal.
Maka Anda harus menjalankan perintah berikut, satu kali saja, untuk membuat file konfigurasi template xbindkeys.
Dengan file yang dibuat Anda dapat membukanya di editor teks dan menambahkan aturan seperti ini:
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.
Sekarang dengan ini berjalan setiap kali saya mengklik tombol kanan mouse, sebuah
xterm
akan dieksekusi.Referensi
sumber
jika Anda hanya ingin menjalankan perintah bash di xterm pada klik mouse (atau acara roda) Anda dapat mencoba contoh ini:
ini untuk acara roda (untuk set klik 12 sebagai gantinya)
sumber
Anda tidak dapat memiliki acara tekan tombol
kuedan 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.
sumber