Чи є спосіб отримати стан кнопки миші з 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 ("миша") на щось інше.
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
Але ця інформація лише частково приводить вас до рішення. Ключова інформація, яку ви хочете витягти зверху, - це те, яке число пов’язане з певною кнопкою миші. У своєму прикладі я натискаю ліву кнопку "кнопка 1".
Цей інструмент можна використовувати для налаштування дії, пов’язаної з натисканням кнопки. Ви навіть можете налаштувати правило, яке вимагає натискання клавіші або навіть натискання клавіші + кнопки разом.
Спочатку потрібно переконатися, що пакети xbindkeys встановлені.
Тоді вам потрібно буде запустити наступну команду, лише один раз, щоб створити шаблон конфігураційного файлу xbindkeys.
$ xbindkeys --defaults > /home/saml/.xbindkeysrc
Зі створеним файлом ви можете відкрити його в текстовому редакторі та додати таке правило:
"xterm"
b:3
Це правило говорить про те, що ми хочемо запустити програму, xterm
коли натиснути кнопку 3. "Кнопка 3" - це моя права кнопка миші.
Зробленою вище зміною нам потрібно вбити xbindkeys, якщо він вже запущений, а потім перезапустити його.
$ killall xbindkeys
$ xbindkeys
Тепер із цим запуском у будь-який момент, коли я натискаю праву кнопку миші, xterm
буде виконуватися повідомлення.
якщо ви просто хочете запустити команду bash в xterm при натисканні миші (або події колеса), ви можете спробувати цей приклад:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
це для подій колеса (замість набору 12 натискань)
Ви не можете натиснути подію на кнопку торта і з'їсти її. Якщо ви хочете, щоб ваш сценарій отримував подію миші, подія миші буде відправлено на ваш сценарій замість будь-якої іншої програми - це означає, що ваш сценарій повинен захопити подія миші. Якщо ваш скрипт не претендує на подію, його отримує вікно, яке має отримати його.
Якщо ви хочете, ви можете надіслати подію миші до зосередженого вікна або до вікна із заданими координатами ( xdotool click
).
Ви можете використовувати XBindKeys для виконання сценарію для певних подій миші або клавіатури.
MouseButton1Down
таMouseButton1Up
події, на які потрібно діяти.