Этот вопрос уже был задан, но так и не получил должного ответа. После разрешения с помощью @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 в те времена. Но я полагаю, что сегодня доступны и другие мыши, которые могут делать то же самое.