Це питання вже було задано, але на нього не було відповідено належним чином. Після дозволу з @Seth я зараз запитую його знову. Це дозволить мені відповісти і, можливо, змінити питання набагато простіше. Оригінальне запитання можна знайти тут:
Позначте кнопки Ctrl та Alt на миші
Проблема:
Хоча відобразити будь-які натискання клавіш на кнопку миші за допомогою xbindkeys
спільно з xdotool
або xte
здається набагато більш проблематичним відображення на ньому ключа модифікатора (наприклад, ALT , CTRL , SHIFT тощо).
Остаточне рішення має дозволити натискання CTRL + клацання (наприклад, для вибору кількох записів у списку) лише мишею.
Кілька можливих підходів до вирішення цього питання можна знайти тут на 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-solved-map-mouse-button-modifier-key.html і намагається вирішити проблему, де міститься модифікатор (як описано під час підходу а).
Хоча він фіксує, що це працює лише частково, оскільки неможливо виконувати інші клацання миші, натиснувши кнопку великого пальця.
Підхід до C:
Оновлення .xbindkeysrc
файлу за допомогою:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + control + b:8
Випробував ОП зв'язаного питання тут на askubuntu. Набагато простіший і міцніший, оскільки він не передбачає модифікаторних станів. Однак проблема залишається, тобто натискання CTRL + неможливо.
Здається, xbindkeys
сама проблема тут, оскільки він розпізнає клацання, але не виконує його. Це можна перевірити з допомогою xev | grep button
і 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!
Єдина інша миша, яку я пам’ятаю, що змогла це зробити, це Разер Коппергед ще в ті часи. Але я здогадуюсь, сьогодні є інші миші, які можуть зробити те саме.