Я боролся с этим на выходных, и мне нужно переназначить кнопки мыши.
Я боролся с этим на выходных, и мне нужно переназначить кнопки мыши.
Ответы:
У меня есть мышь Logitech с 9 кнопками, и нажатие «средней кнопки» (# 2) включает нажатие на колесо прокрутки. Мне это не нравится, потому что я неуклюжий и, как правило, прокручиваю окно, в котором я нахожусь, когда пытаюсь нажать на колесо. Поэтому я хотел автоматически переназначить верхнюю боковую кнопку (в данном случае # 9) на среднюю кнопку (# 2). Я также хотел отобразить нижнюю боковую кнопку (# 8), чтобы она выполняла двойной щелчок левой кнопкой (# 1).
Хотя мои цели были конкретными, приведенные ниже решения можно обобщить для любой ситуации, в которой вы хотите автоматически переназначать кнопки мыши при запуске.
Вам нужно xinput
установить для этой задачи. Это можно сделать полностью в вашем .xsessionrc
файле. Во-первых, используйте xinput
для обнаружения имени, назначенного вашей мыши, которое затем соотносится с идентификатором устройства ввода. Ниже приведен пример вывода с моего ноутбука:
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
Моя мышь звонит сама Logitech USB Laser Mouse
и отображается как id=11
. Ваша мышь будет иметь другое имя; выяснение этого оставлено в качестве упражнения для читателя.
Хотя вы все еще знаете идентификатор устройства в этом сеансе, узнайте, сколько кнопок, по мнению вашего обработчика ввода, использует ваша мышь . Это может отличаться от количества кнопок, которые видны на устройстве.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
С моей мышью осталось всего 9 очевидных физических кнопок, а xinput
отчетов 16.
Учитывая характер USB, этот идентификатор может меняться при каждом перезапуске, поэтому недостаточно просто написать сценарий, который статически привязан к идентификатору, который вы обнаружите один раз. Вам нужно будет динамически проанализировать это при запуске и выполнить повторное сопоставление на основе текущего идентификатора.
Теперь, когда вы знаете его имя, вы можете xinput test
определить, какой ключ переназначить. Нажмите кнопки мыши, с которыми вы хотите отобразить карту, чтобы получить их индексы. (Для справки, 1, 2 и 3 «всегда» (т. Е. Обычно) ссылаются на левую, среднюю и правую кнопки трехкнопочной мыши. Обычная повторная карта меняет их, чтобы сделать мышь левой рукой). )
button press 2
button release 2
button press 9
button release 9
В этом случае я обнаружил, что хочу сопоставить кнопку № 9 (сбоку, сверху) с кнопкой № 2 (посередине).
Теперь, когда вы знаете, как называется ваша мышь и какие кнопки вы хотите изменить, вы можете написать ~/.xsessionrc
скрипт, который xinput
будет запускать повторное сопоставление кнопок при запуске. Ниже мой полный сценарий.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Первая строка здесь устанавливает временную переменную сеанса, равную идентификатору мыши, как сообщается xinput
. Это делается путем grep
ввода известного имени мыши в отчете xinput
и последующего использования sed
для извлечения идентификационного номера из этого id=xxx
токена в отчете. Это значение затем используется в xinput set-button-map
директиве, которая выполняет переопределение. В приведенном выше примере единственным изменением является то, что кнопка № 9 переопределяется на кнопку имитации # 2. Все остальные остаются с настройками по умолчанию.
Обновление: как @Lokasenna указывает ниже , если ваше устройство сообщает о себе как о мыши и клавиатуре, вам может потребоваться ограничить количество результатов grep
использования -m 1
.
Смотрите также этот ответ .
Вам нужно будет xinput
, xbindkeys
и xautomation
( в том числе xte
) , установленные для этой задачи.
Используйте xinput list
и, xinput test
чтобы узнать идентификатор устройства вашей мыши и номер кнопки, которую вы хотите назначить. В моем случае я хотел сопоставить нижнюю боковую кнопку (# 8) с двойным щелчком левой кнопки (# 1).
Создать или редактировать ~/.xbindkeysrc
. Формат этого файла представляет собой серию парных линий. Первая строка - это команда, которая должна быть выполнена для события; вторая строка - описание события. Мы будем использовать xte
компонент xautomation
для отправки событий непосредственно в обработчик ввода.
Чтобы создать событие двойного щелчка при отпускании кнопки, я добавил следующее:
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
Эта конфигурация отображает последовательность двух щелчков мышью на кнопке № 1 для освобождения кнопки № 8. (Теоретически, я думаю, вы могли бы сопоставить любую команду кнопке мыши, но это наиболее распространенный случай. См. Этот ответ для других практических примеров.)
Для пользователей с несколькими мышами, подключенными к вашей системе, вам также необходимо ввести идентификатор устройства. Это может относиться не ко всем пользователям и было обнаружено в Ubuntu 16.04 с Unity.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
Затем измените файл .xbindkeysrc, сославшись на значение id = из выходных данных команды (в данном примере id = 9):
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
утверждение на ваше sed
утверждение в моих примерах. Спасибо за улучшение!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
дважды показывает мою мышь, например: OP USB OPTICAL MOUSE id = 12 [указатель подчиненного устройства (2)] ↳ USB OPTICAL MOUSE id = 13 [указатель ведомого устройства (2)] Только ID 13 будет ловить команды с помощью xinput test
. Скрипт всегда будет ловить первый идентификатор. Но почему это все равно дважды? Оба исчезают, когда я отключаю эту мышь, и снова появляются при подключении.
Короткие шаги для этого:
Есть утилита под названием xinput
. xinput list
или просто xinput
покажет все устройства ввода X и их идентификаторы. Здесь вы найдете идентификатор мыши, которую вы хотите переназначить.
Я буду использовать мой идентификатор в качестве примера, из моей настройки, которая составляет 21, затем xinput --get-button-map 21
выведет
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Теперь, если вы хотите, скажем, поменять местами левую и правую кнопки, вы просто запускаете
xinput --set-button-map 21 3 2 1
Здесь мы, переназначение сделано.
Для запуска при запуске просто поместите это в файл:
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
дать ему исполняемое разрешение
chmod +x leftmouseremap.sh
Наконец, добавьте это в приложение Statrtup вручную из графического интерфейса или, если хотите, из CLI, поместите текст ниже (измените путь к своему) в файл ~/.config/autostart
, вот мое ( less .config/autostart/leftmouseremap.sh.desktop
):
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
Имейте в виду, что с KDE путь будет таким, как ~/.kde/Autosart
у других менеджеров рабочего стола, он может быть совершенно другим. В качестве альтернативы, запуск запуска может быть выполнен с использованием общего подхода /etc/rc.local
.
При использовании великолепного ответа zerobandwidth некоторые устройства, такие как MX Ergo Logitech, отображаются как указатель и клавиатура :
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
Следовательно, в grep "Logitech MX Ergo"
конечном итоге возвращает два значения. Последний в конечном итоге включается в качестве первого элемента в строке сопоставления и облажает все ваши кнопки мыши.
Исправить несложно - просто используйте grep
аргумент max-count -m 1
:
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Мне удалось изменить отображение средней кнопки моей мыши Logitech на «Возврат» с помощью Easystroke Gesture Recognition, которую я скачал из Центра программного обеспечения Ubuntu. Редактировать: в приложении вы должны выбрать «Добавить действие», «Имя», выбрать тип ключа, щелкнуть «Детали» и нажать «Ввод», нажать «Записать ход» и во время запроса нажать среднюю кнопку.
xinput
кнопки, которые не отображаются при использовании xinput list <devID>
.
До 12.04 в стандартном репозитории был простой графический инструмент под названием «btnx», который добавлялся как «Свойства кнопки» в Конфигурации системы. К сожалению, однако это было понижено. «Ненадежный» PPA, поддерживаемый в настоящее время для 14.04, 16.04 и 18.04, находится здесь: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (находится по адресу https://launchpad.net/ubuntu/xenial/+source / btnx )
Он не интегрируется с настройками системы, но работает на моем ноутбуке с дешевой 5-кнопочной мышью. Он также может быть переназначен на нажатия клавиш и команды, и конфигурация намного проще, чем с любым другим методом!
У меня HP elitebook 2570p, Ubuntu 18.04.2. Здесь у меня есть трекпоинт, который для меня бесполезен, а вот 2 бесполезных кнопки трекпоинт под пробелом
Я не использую эти клавиши, потому что они у меня под тачпадом. Я хотел бы переназначить эти кнопки влево = back_button (Alt_L + Left), правая = middle_mouse_button. Трекпоинт в «xinput» - это id = 11, а левая кнопка - номер 1, правая - 3.
Может ли кто-нибудь написать мне правильный код, чтобы просто скопировать в терминал? У меня есть в сочетании с xbindkeysrc, но это устанавливает любое действие для обеих кнопок (трекпойнт и сенсорная панель)
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'