Вы, конечно, можете обнаружить события мыши , но я не верю, что есть способ спросить систему, нажата ли кнопка мыши в данный момент . Каждый анализатор активности мыши, за которым я видел, следит, если вы простите псевдокод, MouseButton1Downи MouseButton1Upсобытия, на которые нужно воздействовать.
DopeGhoti
Мне нужен какой-нибудь скрипт, который будет следить за мышью, и когда левая кнопка нажата, она что-то сделает.
MartinP
Нужно уточнить. Вы хотите что-то, где, когда вы находитесь в оболочке и щелкаете окно терминала, эта конкретная оболочка что-то делает? Или вы хотите, чтобы при нажатии определенной кнопки мыши в любом месте запускался скрипт (и вам не нужно видеть скрипт в терминале)?
Патрик
Мне нужен скрипт, который я буду запускать, а затем он будет наблюдать за кнопками мыши в любом месте на рабочем столе. Он не будет блокировать мышь, он будет только слушать. Я пытался написать программу для него на C с Xlib, но в нем есть только XGrabButton и XGrabPointer, и я этого не хочу, потому что он захватывает указатель, а другие окна не регистрируют события нажатия.
MartinP
Ответы:
11
xinput --query-state <mouse_id>
Это даст вам состояние для всех кнопок мыши, которое выглядит следующим образом:
xinput --listдает мне X Input extension not available.. К сожалению, Google по этому вопросу не раскрывает ничего полезного в моем случае: Xvnc4на минимальной виртуальной машине Debian. Вероятно, мне не повезло
Тино
6
Вы можете использовать инструмент командной строки, 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 YESButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319064439,(164,14), root:(166,101),
state 0x100, button 1, same_screen YESButtonPress event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065208,(164,14), root:(166,101),
state 0x0, button 1, same_screen YESButtonRelease event, serial 36, synthetic NO, window 0x3800001,
root 0x86, subw 0x0, time 319065337,(164,14), root:(166,101),
state 0x100, button 1, same_screen YESButtonPress 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.
$ xbindkeys --defaults >/home/saml/.xbindkeysrc
С созданным файлом вы можете открыть его в текстовом редакторе и добавить правило следующим образом:
"xterm"
b:3
Это правило гласит, что мы хотим запустить программу, xtermкогда нажата кнопка 3. «Кнопка 3» - моя правая кнопка мыши.
После внесения вышеуказанных изменений нам нужно убить xbindkeys, если он уже запущен, а затем перезапустить его.
$ killall xbindkeys
$ xbindkeys
Теперь с этим запуском в любое время, когда я нажимаю правую кнопку мыши, запускается xterm.
Вы не можете сделать так, чтобы ваш пирог нажал на событие и съел его. Если вы хотите, чтобы ваш скрипт получал событие мыши, тогда событие мыши будет отправлено вашему сценарию, а не любому другому приложению - это означает, что ваш сценарий должен захватить событие мыши. Если ваш сценарий не требует события, то окно, которое должно получить его, получает его.
Если вы хотите, вы можете повторно отправить событие мыши в сфокусированное окно или окно с заданными координатами ( xdotool click).
Вы можете использовать XBindKeys для выполнения скрипта при определенных событиях мыши или клавиатуры.
MouseButton1Down
иMouseButton1Up
события, на которые нужно воздействовать.Ответы:
Это даст вам состояние для всех кнопок мыши, которое выглядит следующим образом:
Mouse_id может быть получен из:
Вот небольшой скрипт наблюдателя за кнопкой мыши:
Возможно, вам придется изменить строку обнаружения MOUSE_ID ('mouse') на что-то другое.
источник
xinput --list
дает мнеX Input extension not available.
. К сожалению, Google по этому вопросу не раскрывает ничего полезного в моем случае:Xvnc4
на минимальной виртуальной машине Debian. Вероятно, мне не повезлоВы можете использовать инструмент командной строки,
xev
чтобы узнать состояние кнопок вашей мыши в среде X.пример
Но эта информация лишь частично возвращает вас к решению. Ключевая информация, которую вы хотите извлечь сверху, это то, какой номер связан с определенной кнопкой мыши. В моем примере я нажимаю левую кнопку «Кнопка 1».
xbindkeys
Вы можете использовать этот инструмент для настройки действия, связанного с нажатием кнопки. Вы даже можете установить правило, которое требует нажатия клавиши или даже нажатия клавиши + кнопки.
пример
Сначала вам нужно убедиться, что пакеты xbindkeys установлены.
Затем вам нужно будет выполнить следующую команду, только один раз, чтобы создать файл конфигурации шаблона xbindkeys.
С созданным файлом вы можете открыть его в текстовом редакторе и добавить правило следующим образом:
Это правило гласит, что мы хотим запустить программу,
xterm
когда нажата кнопка 3. «Кнопка 3» - моя правая кнопка мыши.После внесения вышеуказанных изменений нам нужно убить xbindkeys, если он уже запущен, а затем перезапустить его.
Теперь с этим запуском в любое время, когда я нажимаю правую кнопку мыши, запускается
xterm
.Ссылки
источник
если вы просто хотите запустить команду bash в xterm по щелчку мыши (или по событию wheel), вы можете попробовать этот пример:
это для события колеса (для щелчка, установленного вместо 12)
источник
Вы не можете сделать так, чтобы ваш
пирогнажал на событие и съел его. Если вы хотите, чтобы ваш скрипт получал событие мыши, тогда событие мыши будет отправлено вашему сценарию, а не любому другому приложению - это означает, что ваш сценарий должен захватить событие мыши. Если ваш сценарий не требует события, то окно, которое должно получить его, получает его.Если вы хотите, вы можете повторно отправить событие мыши в сфокусированное окно или окно с заданными координатами (
xdotool click
).Вы можете использовать XBindKeys для выполнения скрипта при определенных событиях мыши или клавиатуры.
источник