Я боролся с этим на выходных, и мне нужно переназначить кнопки мыши.
У меня есть мышь 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 «всегда» (т.е. обычно) относятся к левой, средней и правой кнопкам 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
Я смог изменить отображение средней кнопки мыши Logitech на "Return" с помощью функции Easystroke Gesture Recognition, которую я скачал из Центра программного обеспечения Ubuntu. Редактирование: В приложении, вы бы выбрали Добавить действия, Назовите его, выберите тип клавиш, нажмите кнопку Подробнее и нажмите Enter, нажмите кнопку Record Stroke, и во время запроса нажмите вниз на среднюю кнопку.
Короткие шаги для этого:
Существует утилита под названием 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
give это разрешение на выполнение
chmod +x leftmouseremap.sh
Наконец, добавьте это в приложение Statrtup вручную из графического интерфейса пользователя или, если вы хотите его, из интерфейса командной строки, поместите текст ниже (измените пути на свой) в файле в вашем ~ / .config / autostart
, вот мой ( без .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
.
У меня HP elitebook 2570p, Ubuntu 18.04.2. Здесь у меня есть трекпоинт, который мне не нужен, и две бесполезные кнопки трекпоинта под пробелом
Я не использую эти клавиши, потому что они у меня находятся под тачпадом. Я бы хотел переназначить эту кнопку на left = back_button (Alt_L + Left), на правую = middle_mouse_button. Трекпоинт в "xinput" имеет id = 11, а левая кнопка - номер 1, правая - 3.
Может ли кто-нибудь написать мне правильный код, чтобы просто скопировать его на терминал? У меня есть комбинация с xbindkeysrc, но она устанавливает любое действие для обеих кнопок (трекпойнт и сенсорная панель)
При использовании отличного ответа на вопрос о нулевой полосе пропускания некоторые устройства, такие как Logitech MX Ergo, отображаются как указатель и устройство с клавиатурой :
⎡ 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
, -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
Sebelum jam 12.04 terdapat alat grafik yang mudah disebut "btnx" di repositori standard, yang ditambahkan sebagai "Butang sifat" dalam Sistem Konfigurasi. Sayangnya namun ia dijatuhkan. PPA "tidak dipercayai" yang kini dikekalkan untuk 14.04, 16.04 dan 18.04 ada di sini: https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (terdapat di https: // launchpad .net / ubuntu / xenial / + source / btnx )
Ia tidak akan berintegrasi dengan tetapan Sistem tetapi berfungsi dengan baik pada komputer riba saya dengan tetikus 5 butang yang murah. Ia juga dapat dibuat semula ke penekanan kekunci dan perintah dan konfigurasinya jauh lebih mudah daripada dengan kaedah lain!