Есть ли способ получить состояние кнопки мыши из 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
на минимальной виртуальной машине Debian. Вероятно, мне не повезло
Вы можете использовать инструмент командной строки, 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 по щелчку мыши (или по событию wheel), вы можете попробовать этот пример:
$ echo -e "\e[?1000h"
$ while read -n 6; do echo hellowworld; done
это для события колеса (для щелчка, установленного вместо 12)
Вы не можете сделать так, чтобы ваш пирог нажал на событие и съел его. Если вы хотите, чтобы ваш скрипт получал событие мыши, тогда событие мыши будет отправлено вашему сценарию, а не любому другому приложению - это означает, что ваш сценарий должен захватить событие мыши. Если ваш сценарий не требует события, то окно, которое должно получить его, получает его.
Если вы хотите, вы можете повторно отправить событие мыши в сфокусированное окно или окно с заданными координатами ( xdotool click
).
Вы можете использовать XBindKeys для выполнения скрипта при определенных событиях мыши или клавиатуры.
MouseButton1Down
иMouseButton1Up
события, на которые нужно воздействовать.