Как автоматически переназначить кнопки на моей мыши при запуске?

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

42
задан 27 June 2015 в 16:29

6 ответов

У меня есть мышь 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. (Теоретически я предполагаю, что вы можете сопоставить любую команду с кнопкой мыши, но это наиболее частый случай. См. этот ответ для других практических примеров.)

Обновление от 16.04 Ubuntu

Для пользователей, у которых к вашей системе подключено несколько мышей, необходимо также передать идентификатор устройства. Это может не относиться ко всем пользователям и было обнаружено в 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
62
ответ дан 27 June 2015 в 16:29

Я смог изменить отображение средней кнопки мыши Logitech на "Return" с помощью функции Easystroke Gesture Recognition, которую я скачал из Центра программного обеспечения Ubuntu. Редактирование: В приложении, вы бы выбрали Добавить действия, Назовите его, выберите тип клавиш, нажмите кнопку Подробнее и нажмите Enter, нажмите кнопку Record Stroke, и во время запроса нажмите вниз на среднюю кнопку.

1
ответ дан 27 June 2015 в 16:29

Короткие шаги для этого:

Существует утилита под названием 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 .

8
ответ дан 27 June 2015 в 16:29

У меня HP elitebook 2570p, Ubuntu 18.04.2. Здесь у меня есть трекпоинт, который мне не нужен, и две бесполезные кнопки трекпоинта под пробелом

Я не использую эти клавиши, потому что они у меня находятся под тачпадом. Я бы хотел переназначить эту кнопку на left = back_button (Alt_L + Left), на правую = middle_mouse_button. Трекпоинт в "xinput" имеет id = 11, а левая кнопка - номер 1, правая - 3.

Может ли кто-нибудь написать мне правильный код, чтобы просто скопировать его на терминал? У меня есть комбинация с xbindkeysrc, но она устанавливает любое действие для обеих кнопок (трекпойнт и сенсорная панель)

0
ответ дан 7 October 2019 в 13:38

При использовании отличного ответа на вопрос о нулевой полосе пропускания некоторые устройства, такие как 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
5
ответ дан 23 November 2019 в 00:46

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!

1
ответ дан 23 November 2019 в 00:46

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

Похожие вопросы: