Этот вопрос уже был задан, но так и не получил правильного ответа. После очистки с @Seth я теперь спрашиваю это снова. Это позволит мне ответить и, возможно, изменить вопрос намного проще. Оригинальный вопрос можно найти здесь:
Привязать Ctrl и Alt к кнопкам большого пальца мыши
Выпуск:
Хотя очень просто сопоставить любые нажатия клавиш с кнопкой мыши, используя их xbindkeys
вместе xdotool
или xte
кажется намного более проблематичным сопоставить клавишу-модификатор (например, ALT , CTRL , SHIFT и т. Д.) С ней.
Окончательный soloution должен позволять И.А. CTRL + щелчок (например , для выбора нескольких записей из списка) только с помощью мыши.
Несколько возможных подходов к решению этой проблемы можно найти здесь, на Stack Exchange, а также на других форумах, связанных с Linux. Но ни одна из этих работ не работает так, как ожидается, поскольку они приводят к другим проблемам и побочным эффектам.
Примечания:
В некоторых из приведенных ниже примеров используется синтаксис Guile with Scheme и .xbindkeysrc.scm
файл, в то время как другие полагаются на .xbindkeysrc
файл с соответствующим синтаксисом. Я знаю, что они не будут работать вместе.
Кроме того, приведенные ниже фрагменты основаны xdotool
только на том, но я открыт для подходов, связанных с другими приложениями, такими как, например, xte
также - хотя, похоже, оба приводят к одним и тем же результатам, и поэтому я использую только xdotool
действия здесь.
Подход А:
Обновление .xbindkeysrc
файла с помощью:
"xdotool keydown ctrl"
b:8
"xdotool keyup ctrl"
release + b:8
Это то, что я сначала попробовал, но у него есть побочный эффект, что модификатор удерживается и не может быть освобожден.
Подход Б:
Обновление .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
Опробовано OP связанного вопроса здесь, в 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!
Единственная другая мышь, которую я помню, которая была способна сделать это, была Razer Copperhead в те времена. Но я думаю, сегодня есть и другие мыши, которые могут сделать то же самое.
Ответы:
Я потратил много времени, пытаясь заставить эту обязательную работу работать. В конце концов я нашел решение, которое является сложным, но работает хорошо и не подразумевает стороннего программного обеспечения. Я делюсь этим здесь, надеясь, что это поможет людям. Кроме того, я знаю, что это не идеально с точки зрения безопасности, поэтому любая конструктивная обратная связь приветствуется.
Есть решения, которые действительно хороши, такие как предложенные здесь , но они всегда страдают от ограничений xbindkeys, которые захватывают всю мышь, делая неопределенными модификаторы + отображение щелчка мыши. Кроме того, решение на основе guile из вышеуказанной ссылки использует ctrl + plus / ctrl + minus, который, например, не распознается Gimp.
Я понял, что нам нужна кнопка мыши, которая действует как клавиатура, поэтому я использовал uinput, к которому можно получить доступ через python , написал скрипт, который отслеживает / dev / my-mouse для нажатия кнопки большого пальца и посылает клавишу ctrl на виртуальную клавиатуру. Вот подробные шаги:
1. Сделать правила Udev
Мы хотим, чтобы устройства были доступны (права и местоположение).
Для мыши:
Udev будет искать устройство, распознаваемое ядром, с такими именами, как event5, и я выбираю мышь с именем. Инструкция SYMLINK гарантирует, что я найду свою мышь в / dev / my_mx_mouse. Устройство будет доступно для чтения участнику группы «mxgrabber».
Чтобы найти информацию о вашем оборудовании, вы должны запустить что-то вроде
Для ввода:
Нет необходимости в символической ссылке, uinput всегда будет в
$/dev/uinput
или$/dev/input/uinput
в зависимости от системы вы находитесь. Просто дайте ему группу и права читать и писать, конечно.Вам нужно отключить - подключите мышь, и новая ссылка должна появиться в / dev. Вы можете заставить udev запускать ваши правила с помощью
$udevadm trigger
2. Активируйте модуль UINPUT
И сделать его загрузочным постоянным:
3. Создать новую группу
Или как вы называли свою группу доступа. Тогда вы должны добавить себя к этому:
4. Python скрипт
Вам необходимо установить библиотеку python-uinput (очевидно) и библиотеку python-evdev . Используйте pip или ваш дистрибутив.
Сценарий довольно прост, вам просто нужно идентифицировать event.code вашей кнопки.
5. Наслаждайтесь!
Все, что вам сейчас нужно, это сделать исполняемый файл Python и попросить менеджера рабочего стола загрузить файл при запуске. Возможно также стакан вина, чтобы праздновать хорошую работу!
6. Дополнительно бесплатно
Я использую xbindkeys для дополнительного поведения. Например, следующая конфигурация может быть полезна, если у вас есть мышь с щелчками по колесу:
Чтобы эта последняя комбинация работала, вы должны отключить кнопку, которую вы настроили для скрипта python , иначе она все равно будет захвачена xbindkeys. Должна остаться только клавиша Ctrl:
Перезагрузить с
$ xmodmap ~/.Xmodmap
7. Заключение
Как я уже говорил в начале, я не совсем доволен тем, что мне нужно дать себе права писать в / dev / uinput, даже если это группа mxgrabber. Я уверен, что есть более безопасный способ сделать это, но я не знаю как.
С другой стороны, это работает очень, очень хорошо. Любая комбинация клавиатуры или клавиши мыши, которая работает с клавишей Ctrl на клавиатуре, теперь работает с мышью !!
источник
Я нашел решение с помощью PyUserInput . Это оказывается довольно простым и не требует прав администратора. С установленным Python 2 и PyUserInput я использовал следующий скрипт:
После предоставления прав на выполнение скрипта, я вызываю его
~/.xsessionrc
, например, в строке~ / path / to / script.py &
Примечание . это не предотвращает срабатывание события кнопки мыши. В моем случае я
xinput set-button-map
менял отображение кнопок xinput и назначал номер интересующей меня кнопки тому, что не использовалось.Например, если вы хотите использовать кнопку 8 на вашей мыши, но кнопка 8 уже имеет функцию (например,
page-next
), вы можете использовать следующее.xsessionrc
предоставленная кнопка не
12
имеет никакого значения для ОС, и назначьте пользовательскую функцию кнопке12
в.xbuttonmodifier.py
сценарии, который я описал выше.источник
xinput
. Смотрите отредактированный вопрос.У меня есть частичное решение. Я не понял, как отменить отображение существующей кнопки, так что в итоге вы нажимаете кнопку и выбираете нужный вам модификатор. Так что, если эта кнопка мыши имеет какое-то существующее назначение, она все равно будет срабатывать. Например, переназначение правой кнопки мыши на управляющую клавишу приведет к отправке управляющего + щелчка.
Во всяком случае, я нашел сообщение на форуме, похожее на ваш вопрос, ответ на который должен был установить btnx и настроить ваши модификаторы через него. Похоже, btnx больше не доступен через репо. Существует ppa, но он не работает для последней версии Ubuntu.
Сообщение на форуме: post: http://ubuntuforums.org/showthread.php?t=1245930
Но источник доступен:
Вы можете скомпилировать его из исходного кода, но это поместит в вашу систему файлы, которые менеджер пакетов не сможет поддерживать.
А именно следующие файлы:
Следующие символические ссылки:
Так что ... если вы не возражаете против строительства из источника ...
Получите зависимости для btnx:
Если вы никогда не создавали ничего из исходного кода, вам также может понадобиться build-essential:
Затем получите и скомпилируйте btnx:
У этого есть отдельный инструмент конфигурации GUI. Получить зависимости для этого:
Теперь получите и скомпилируйте инструмент конфигурации GUI:
Теперь запустите инструмент:
Нажмите на кнопку «Определить мышь». Если вы хотите иметь возможность читать указания во время использования инструмента, измените размер всплывающего окна, текст диалога будет вырезан позже, если вы этого не сделаете, и если вы попытаетесь изменить размер во время обнаружения, он отменит обнаружение. Просто сделайте окно немного больше.
Нажмите на «Нажмите», чтобы начать обнаружение мыши, затем попытайтесь не перемещать мышь, пока текст не изменится ... Занимает около 5-10 секунд. Текст изменится. Когда это произойдет, проигнорируйте сказанное и нажмите «Вперед».
Нажмите кнопку «Нажмите, чтобы начать обнаружение кнопки»
Здесь вы будете нажимать одну кнопку мыши несколько раз (пока строка состояния не заполнится). Затем установите имя кнопки на то, что вы узнаете позже (например, LeftButton). Нажмите кнопку Добавить.
Повторите это для каждой кнопки мыши (не забывайте колесико прокрутки, щелчки прокрутки и т. Д.). Вы можете пропустить любые кнопки, которые вы не хотите переназначать.
Когда вы добавили все кнопки, нажмите кнопку ОК.
В главном графическом интерфейсе нажмите кнопку «Кнопки», на левой панели выберите кнопку, которую хотите переназначить. Он будет использовать имена, которые вы ввели в предыдущих шагах. Для ваших целей вы можете выбрать только модификатор Key под комбинацией клавиш справа.
Не нажимайте кнопку «Удалить» на этом экране, она удалит кнопку. Вам придется вернуться и снова обнаружить кнопку, если вы это сделаете.
Вернитесь к экрану Conrigurations и нажмите перезагрузить btnx.
Попробуйте новую кнопку.
Если вы хотите удалить приложения, остановите программу btnx, а затем перейдите в соответствующие каталоги git check out и выполните удаление:
источник