Как привязать дополнительные кнопки мыши к модификаторам (Shift / Control)? [дубликат]

Этот вопрос уже был задан, но так и не получил должного ответа. После разрешения с помощью @Seth я теперь задаю его снова. Это позволит мне ответить и, возможно, изменить вопрос намного проще. Исходный вопрос можно найти здесь:

Сопоставить Ctrl и Alt с кнопками большого пальца мыши


Проблема:

Хотя очень просто сопоставить любые нажатия клавиш с кнопкой мыши, используя xbindkeys в сочетании с xdotool или xte кажется намного более проблематичным для сопоставления ключа-модификатора (например, ALT , CTRL , SHIFT и т. Д.).

Окончательное решение должно позволять, например, CTRL + щелчок (например, для выбора нескольких записей в list) с помощью мыши.

Несколько возможных подходов к решению этой проблемы можно найти здесь, на Stack Exchange, а также на других форумах, связанных с Linux. из них работают должным образом, поскольку приводят к другим проблемам и побочным эффектам.

Примечания:

Некоторые из приведенных ниже примеров включают Guile с синтаксисом Scheme и полагаются на файл .xbindkeysrc.scm , тогда как другие полагаются на .xbindkeysrc с соответствующим синтаксисом. Я понимаю, что они не будут работать вместе.

Кроме того, приведенные ниже фрагменты полагаются только на xdotool , но я открыт для подходов, включающих другие приложения, такие как, например, xte тоже - хотя кажется, что оба они приводят к одним и тем же результатам, поэтому я использую здесь только действия xdotool .

Подход A:

Обновление файла .xbindkeysrc с помощью:

"xdotool keydown ctrl"
  b:8

"xdotool keyup ctrl"
  release + b:8

Это то, что я пробовал изначально, но у него есть побочный эффект, заключающийся в том, что модификатор удерживается и не может быть выпущен.

Подход B:

Обновление файла .xbindkeysrc.scm с помощью:

(xbindkey '("b:8") "xdotool keydown ctrl")
(xbindkey '(release "b:8") "xdotool keyup ctrl")

(xbindkey '("m:0x14" "b:8") "xdotool keydown ctrl")
(xbindkey '(release "m:0x14" "b:8") "xdotool keyup ctrl")

Найдено на http://www.linuxforums.org/forum/hardware-peripherals/169773- olved-map-mouse-button-modifier-key.html и пытается решить проблему, в которой удерживается модификатор (как описано в подходе a).

Хотя он исправляет, что он работает только частично, поскольку невозможно выполнять другие щелчки мышью, пока нажата кнопка большого пальца.

Подход C:

Обновление файла .xbindkeysrc с помощью:

"xdotool keydown ctrl"
  b:8

"xdotool keyup ctrl"
  release + control + b:8

Проверено OP связанного вопроса здесь, на askubuntu. Намного проще и надежнее, поскольку он не включает состояния модификаторов. Тем не менее проблема остается, то есть CTRL + щелчок невозможен.

Похоже, проблема здесь в xbindkeys , поскольку он распознает щелчок, но не выполняет его.Это можно проверить с помощью xev | Кнопка grep и xbindkeys -v :

Обычный щелчок мышью, записанный xev , должен выглядеть так:

state 0x10, button 1, same_screen YES
state 0x110, button 1, same_screen YES

Как и для кнопки большого пальца:

state 0x10, button 8, same_screen YES
state 0x10, button 8, same_screen YES

Но при включенной конфигурации xbindkeys он ничего не записывает. Хотя это имеет смысл для кнопки большого пальца, поскольку она сопоставлена ​​с CTRL и, следовательно, больше не является кнопкой мыши, странно, что кнопка 1 также не записывается. Вероятно, это потому, что xbindkeys не выполняет его, а сам распознает:

Button press !
e.xbutton.button=8
e.xbutton.state=16
"xdotool keydown ctrl"
    m:0x0 + b:8   (mouse)
got screen 0 for window 16d
Start program with fork+exec call
Button press !
e.xbutton.button=1
e.xbutton.state=20
Button release !
e.xbutton.button=1
e.xbutton.state=276
Button release !
e.xbutton.button=8
e.xbutton.state=20
"xdotool keyup ctrl"
    Release + m:0x4 + b:8   (mouse)
got screen 0 for window 16d
Start program with fork+exec call

Подход D:

Обновление файла .xbindkeysrc с помощью:

"xdotool keydown ctrl"
  b:8

"xdotool keyup ctrl"
  release + control + b:8

"xdotool click 1"
  b:1

Слишком просто. .. но приводит к бесконечному циклу кликов.


ОБНОВЛЕНИЕ:

Тем временем я купил Logitech G502 и заметил, что после настройки с помощью драйвера в Windows в памяти устройства сохраняется не только сам профиль, но и фактическое нажатие клавиш выполняется с помощью мыши. Это фактически решило мою проблему в Linux!

Единственная другая мышь, которую я помню, которая могла это делать, была Razer Copperhead в те времена. Но я полагаю, что сегодня доступны и другие мыши, которые могут делать то же самое.

16
задан 13 April 2017 в 15:24

0 ответов

Другие вопросы по тегам:

Похожие вопросы: