Привязать Alt+Tab к кнопке мыши Logitech на Kubuntu
Примечание: это не дубликат этого или этого, как я поясню.
У меня есть мышь Logitech Proteus Core. В Windows 10 я установил одну из ее кнопок (маленькую с надписью "G9" в верхней части мыши) для отображения списка задач, который можно вызвать с помощью клавиш Win+Tab. Обратите внимание, что это остается в силе, даже если вы отпустите клавиши Win и Tab, оно исчезнет только после того, как вы нажмете на окно, в которое хотите перейти. Итак, рабочий процесс: нажмите и отпустите кнопку мыши G9, нажмите на окно, которое я хочу.
Я хочу подобное поведение под Kubuntu 15.04. AFAIK, нет никакого способа вызвать подобный список задач, который остается до тех пор, пока вы не нажмете на что-либо, без необходимости удерживать какие-либо клавиши.
Поэтому моя идея заключалась в том, чтобы эмулировать Alt+Tab с помощью этой кнопки. Рабочий процесс, который я имею в виду: push G9 (ярлык для "push alt, push tab, realease tab") => выберите нужное окно, отпустите G9 (ярлык для "release alt").
Проблема в том, что, насколько я могу судить, эта кнопка G9 не воспринимается ОС как обычная кнопка мыши. Если я бегу:
xbindkeys -mk
И нажмите кнопку G9, я получаю этот вывод:
"(Scheme function)"
m:0x40 + c:23
Mod4 + Tab
"(Scheme function)"
m:0x40 + c:133
Mod4 + Super_L
Примечание: я запускаю это на виртуальной машине для тестирования. Дайте мне знать, если это может повлиять на вещи, хотя мне нужно, чтобы это работало и в этом случае.
Если я бегу:
xev | grep button
Я не получаю вывод, когда нажимаю интересующую меня кнопку G9. Если я нажимаю другие кнопки, я получаю ожидаемые результаты, такие как:
state 0x0, button 2, same_screen YES
Это странно, но я подумал, что могу просто добавить, что xbindkeys -mk
выходы на мой ~/.xbindkeysrc
:
"xte 'keydown Alt_L' 'key Tab'"
m:0x40 + c:23 + Release
Очевидно, что даже если бы это сработало, это не сработало бы так, как я хочу, но даже не сработало. Ничего не происходит, когда я нажимаю кнопку G9 после запуска:
xbindkeys -v -n
Который дает это предупреждение:
Убедитесь, что не запущена другая программа, которая захватывает один из ключей, захваченных xbindkeys. Кажется, что есть конфликт, и xbindkeys не может захватить все ключи, определенные в его файле конфигурации.
Если я наберу xte
Команда в консоли, она вызывает выбор задачи меню Alt+Tab. Ничего для связанной кнопки мыши как бы то ни было.
Если я назначу то же самое xte
вызовите другую кнопку, показанную xev
вывод (я попробовал правую кнопку мыши), он все еще не выполняется (кажется, что выполняется только вкладка, так как он выполняет вкладки в текстовом редакторе), но предупреждение исчезло, и обычная функция кнопки также исчезла:
Как я могу получить Alt+Tab
поведение я описал при нажатии кнопки G9? Как насчет другой кнопки, той, которая xev
обнаруживает, как b:3
?
Примечание: эта мышь сохраняет внутреннюю конфигурацию, сделанную из программного обеспечения Windows. Поэтому все остальные мои кнопки сохраняют свои функции в виртуальной машине: назад / вперед в браузере, переключают вкладки браузера и т. Д. Программное обеспечение Logitech позволяет выполнять макро-записи в Windows, но не позволяет задавать различные действия для событий push / release, AFAIK.
Если есть способ записать правильный макрос в Windows или есть способ упростить то, чего я хочу достичь в Kubuntu, то есть использовать кнопку G9, чтобы получить аналогичную функциональность для alt+tab, я бы также принял эти решения.
2 ответа
evrouter
может помочь сделать это. Это даже позволит выпустить G9, прежде чем выбрать задачу из списка.
http://www.bedroomlan.org/projects/evrouter
Я собрал его из исходного кода и установил с checkinstall
, но там есть нечто похожее на хранилище.
Крючки
Это можно настроить в ~/.evrouterrc
:
"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/272 "SHELL//home/velkan/click.sh"
"Logitech Gaming Mouse G300" "/dev/input/event.*" any key/275 "SHELL//home/velkan/atab.sh"
Бег sudo evrouter -d /dev/input/event*
и щелчок вокруг поможет составить эти строки.
"Logitech Gaming Mouse G300"
это имя моей мыши
"/dev/input/event.*"
означает, что ввод будет перехвачен независимо от имени файла устройства, к которому привязана мышь.
any
- означает, что событие будет принято с любым модификатором Alt/Ctrl/Shift.
key/272
- левую кнопку мыши.
key/275
- кнопка мыши назад (на G4 для меня).
"SHELL//home/velkan/click.sh"
- бежать /home/velkan/click.sh
когда это событие происходит.
Скрипты Alt-Tab
Итак /home/velkan/atab.sh
скрипт (который связан с G4 в этом случае):
#!/bin/bash
mktemp /tmp/evr-alt-tab-XXXX
/usr/bin/xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab'
Он создает временный файл, который будет информировать click.sh
(привязан к левой кнопке), что нужно для отпускания Alt.
click.sh
сценарий:
#!/bin/bash
if [ -e /tmp/evr-alt-tab-???? ]; then
/usr/bin/xte 'usleep 100000' 'keyup Alt_L'
rm /tmp/evr-alt-tab-????
fi
Активация evrouter при запуске
Не пробовал это на KDE.
Запустить скрипт /usr/local/sbin/evrouter_launch.sh
:
#!/bin/sh
/usr/local/bin/evrouter /dev/input/event* 0<&- > /dev/null
(или это может быть /usr/bin/evrouter
вместо /usr/local/bin/evrouter
)
конфиг /etc/lightdm/lightdm.conf
запустить evrouter с помощью менеджера рабочего стола:
[SeatDefaults]
autologin-user=
session-setup-script=/usr/local/sbin/evrouter_launch.sh
Я сделал это, используя идеи из ответа Велкана. Я перечислю необходимые шаги.
Прежде всего,
Win+Tab
макрос, который я установил на кнопку G9 в Windows, влиял на то, как Linux обнаруживает мышь. Вместо того, чтобы обнаружить кнопку мыши, он просто обнаружилWin
а такжеTab
ключи вxev
, Я полагаю, что мышь настроена на их отправку, если вы настроите кнопку как "Макроклавишу" в программном обеспечении Windows.Чтобы это исправить, не устанавливайте кнопку для использования многопользовательского макроса в Windows. Установите это к чему-либо еще. Я установил средний клик.
Сейчас,
xev | grep button
обнаружил G9 как кнопку2
,Я написал этот сценарий в
~/alttab.sh
, которая является комбинацией сценариев Велкана:#!/bin/bash if [ -e /tmp/alt-tab-mouse-script-???? ]; then xte 'usleep 100000' 'keyup Alt_L' rm /tmp/alt-tab-mouse-script-???? else mktemp /tmp/alt-tab-mouse-script-XXXX xte 'usleep 100000' 'keydown Alt_L' 'usleep 50000' 'key Tab' fi
Я добавил это в моем
~/.xbindkeysrc
, Нам нужны две строки, чтобы щелчок работал в обоих состояниях: когдаalt
вниз и когда это не так."~/alttab.sh" b:2 + Release "~/alttab.sh" Alt + b:2
Это отлично сработало для меня. Последовательность действий: нажмите G9 (нажмите и отпустите), выберите нужное окно (щелчок левой кнопкой мыши или колесо мыши), затем снова нажмите G9, чтобы перейти к этому окну. Вы можете изменить первый if
в .sh
файл, чтобы также отправить mouseclick 1
перед нажатием клавиши alt, если вы хотите перейти непосредственно к окну, нажмите кнопку G9 на дисплее окон.
Я также экспериментировал с удалением usleep
звонки. У меня это работало без них.
Поведение не совсем такое, как в Windows, но я нахожу его достаточно близким. Возможно, еще удобнее, так как вы можете сделать выбор с помощью той же кнопки, поэтому вам не нужно перемещать палец к другой кнопке!