Привязать 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

Я сделал это, используя идеи из ответа Велкана. Я перечислю необходимые шаги.

  1. Прежде всего, Win+Tab макрос, который я установил на кнопку G9 в Windows, влиял на то, как Linux обнаруживает мышь. Вместо того, чтобы обнаружить кнопку мыши, он просто обнаружил Win а также Tab ключи в xev, Я полагаю, что мышь настроена на их отправку, если вы настроите кнопку как "Макроклавишу" в программном обеспечении Windows.

    Чтобы это исправить, не устанавливайте кнопку для использования многопользовательского макроса в Windows. Установите это к чему-либо еще. Я установил средний клик.

  2. Сейчас, xev | grep button обнаружил G9 как кнопку 2,

  3. Я написал этот сценарий в ~/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
    
  4. Я добавил это в моем ~/.xbindkeysrc, Нам нужны две строки, чтобы щелчок работал в обоих состояниях: когда alt вниз и когда это не так.

    "~/alttab.sh"
      b:2 + Release 
    
    "~/alttab.sh"
      Alt + b:2
    

Это отлично сработало для меня. Последовательность действий: нажмите G9 (нажмите и отпустите), выберите нужное окно (щелчок левой кнопкой мыши или колесо мыши), затем снова нажмите G9, чтобы перейти к этому окну. Вы можете изменить первый if в .sh файл, чтобы также отправить mouseclick 1 перед нажатием клавиши alt, если вы хотите перейти непосредственно к окну, нажмите кнопку G9 на дисплее окон.

Я также экспериментировал с удалением usleep звонки. У меня это работало без них.

Поведение не совсем такое, как в Windows, но я нахожу его достаточно близким. Возможно, еще удобнее, так как вы можете сделать выбор с помощью той же кнопки, поэтому вам не нужно перемещать палец к другой кнопке!

Другие вопросы по тегам