Резюме вопроса: я хочу, чтобы одна из моих кнопок мыши была зарегистрирована в Super_LX11 как левая кнопка Windows .
В моем диспетчере окон я могу перемещать окна, удерживая «левую кнопку Windows» (Left Super) и перетаскивая окно левой кнопкой мыши. Я хочу сделать это без прикосновения к клавиатуре, поэтому я хочу сопоставить левую супер-клавишу с кнопкой мыши 11, чтобы я мог удерживать кнопку мыши 11 и щелкать + перетаскивать окна.
Наиболее очевидным решением является использование xbindkeys и xte следующим образом ( .xbindkeysrc
):
"xte 'keydown Super_L'"
b:11
"xte 'keyup Super_L'"
b:11 + release
Это работает так:
- Когда я нажимаю кнопку мыши 11, Super_Lтакже нажимается вниз
- Когда я отпускаю кнопку мыши 11, Super_Lтакже отпускается
Но есть проблема: я не могу перемещать окна с помощью Super_L+, Mouse1если я также удерживаю другую кнопку мыши, например, кнопку мыши 11. Используя приведенное выше решение, кнопка мыши 11 по-прежнему регистрируется как нажатая и отпущенная, и поэтому ни одно из работа оконного менеджера.
Я пробовал это использовать Cinnamon и Awesome WM, и абсолютно ни одна из Super_Lкомбинаций клавиш не работает, пока нажата кнопка мыши 10 или 11.
Неподходящий хак
В настоящее время я работаю над этой проблемой, заставляя щелчок мыши 11 удерживать Super_Lкнопку в течение определенного времени. Таким образом, я могу нажать кнопку мыши, а затем перетащить материал на короткое время:
"xte 'keydown Super_L' 'usleep 250000' 'keyup Super_L'"
b:11
Еще одна попытка
Как предположил тотти, я попробовал эту xbindkeys
конфигурацию:
"xte 'mouseup 10' 'keydown Super_L'"
b:10
"xte 'keyup Super_L'"
b:10 + Release
Не работает Кажется, что Super_Lклавиша удерживается нажатой, потому что как только я отпускаю кнопку 10, она остается нажатой навсегда (пока я Super_Lснова не нажму клавишу на клавиатуре), но кнопка мыши все еще регистрируется, потому что я не могу щелкать и перетаскивать окна , Я не думаю, что смогу сделать эту работу, используя xbindkeys
и xte
.
Ответы:
В сообщении аскубунту содержится ответ, который я кратко изложу ниже.
Проблема в том, что xbindkeys захватывает всю мышь, что делает неопределенные модификаторы + отображение щелчка мыши. В ответе используется uinput через скрипт python-uinput для отслеживания
/dev/my-mouse
нажатия кнопки большого пальца и отправки Ctrlключа на виртуальную клавиатуру. Вот подробные шаги:1. Сделать правила Udev
Для мыши файл
/etc/udev/rules.d/93-mxmouse.conf.rules
:Udev будет искать устройства ядра с такими именами, как event5. SYMLINK предназначен для поиска мыши
/dev/my_mx_mouse
, читаемой группойmxgrabber
.Чтобы найти информацию об оборудовании, запустите что-то вроде:
Для uinput, файл
/etc/udev/rules.d/94-mxkey.rules
:Отключите и подключите мышь или заставьте udev вызывать правила с помощью
udevadm trigger
.2. Активируйте модуль UINPUT
И в
/etc/modules-load.d/uinput.conf
:3. Создать новую группу
4. Python скрипт
Установите
python-uinput library
иpython-evdev library
.Приведенный ниже скрипт требует идентификации event.code кнопки:
5. Отделка
Сделайте исполняемый файл python и убедитесь, что он загружается при запуске.
источник
F13
,F14
иF15
, и отключение функции мыши с помощьюxinput
. Тогда я просто переназначить эти ключи к тому , что мне нужно , используя простойxmodmap
. Основная идея составлен В сущности (есть некоторые жестко закодированные значения, и я не восстанавливаюxinput
функцию мыши после этого), я сделаю сообщение в блоге об этом с окончательной версией скрипта (и поделюсь ссылкой здесь, когда это будет сделано. Спасибо Вы за вашу помощь!Поскольку вы можете запустить скрипт одним щелчком мыши, вы можете использовать следующий прием.
1. Нажмите кнопку 11 , чтобы держать в супер ключ . ( Кнопка 11 запускает скрипт).
2. Перемещайте окна, используя другие кнопки мыши.
3. Нажмите кнопку мыши 11 еще раз, чтобы отпустить супер-клавишу.
Использование скрипта
xdotool
для удержания суперключаПри первом нажатии кнопки создайте временный файл и удерживайте клавишу. При следующем нажатии удалите файл tmp и отпустите ключ,
Обновить
Согласно справочной странице Ubuntu (многие кнопки мыши как)
imwheel
можно переназначить на клавишу.источник
+ Mod4
в мою конфигурацию xbindkeys, чтобы учесть, что супер-ключ удерживается. Обходной путь, который вы предлагаете, лучше моего, и я переключаюсь на него :-) Но он все еще не отвечает на вопрос.Предложение по отладке: я бы попробовал отслеживать
/dev/input/eventX
файл, чтобы увидеть, какие события генерируются при нажатии и отпускании этой кнопки, особенно в комбинации сBTN_LEFT
. Вот пример кода, чтобы вы начали. Вам, очевидно, придется изменить его, чтобы регистрировать все события, а не только нажатия клавиш.Вы также можете проверить
xev
вывод, если вы еще этого не сделали. Анализ обоих журналов должен выявить конкретную проблему, с которой вы столкнулись.Скорее всего, ваша мышь генерирует дополнительные события отпускания кнопок при нажатии нескольких кнопок. В этом случае вашими вариантами будет использование обходных путей для привязки клавиш или изменение
xf86-input-evdev
библиотеки для фильтрации нежелательных событий (или имитации пропущенных). Некоторое время назад я сделал нечто подобное для сенсорного экрана, который генерировал события «щелчка» при попытке перетаскивания. Идея состояла в том, чтобы отфильтровать события «выпуска», которые происходили почти одновременно (в пределах небольшого временного окна), с событиями «щелчка». Если мое предположение верно, вам, по сути, нужно реализовать нечто подобное.источник
Я понял это ранее сегодня с другими ключами-модификаторами. Проблема в том, что вы должны включить модификатор в комбинацию кнопок для выпуска. Предполагая, что ваш Супер ключ сопоставлен с Mod4 (который должен быть по умолчанию, afaik):
РЕДАКТИРОВАТЬ: Просто понял, что это не полностью отвечает на ваш вопрос, так как вы все еще не сможете использовать ЛКМ, удерживая нажатой b: 11
источник