Як автоматично перезавантажувати кнопки на миші при запуску?


Відповіді:


47

У мене є мишка 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 очевидних фізичних кнопок, але xinput16 звітів.

Враховуючи природу 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

7
Спасибі за інформацію. Ваш awk виглядає так, що його потрібно змінити залежно від кількості слів у пристрої. Я використовувавsed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'
jbo5112

Відповідно до тесту xinput key thumb запускає три різних натискання клавіш - як зв'язати їх усі разом у .xbindkeysrc?
axltop

@ jbo5112 Я щойно почав використовувати декілька мишей на своєму робочому ноутбуці, і у мене була хороша причина переглянути ваш коментар. Зараз я замінив у своїх прикладах свою стару awkзаяву на вашу sedзаяву. Дякуємо за покращення!
нульова пропускна здатність

2
Немає необхідності використовувати ідентифікатор у встановленій кнопці-карті; наприклад:xinput set-button-map "Logitech Trackball" 1 3 3
jaustin

Незвичайна проблема, напевно xinput, показує мишу двічі, як це: ↳ USB OPTICAL MOUSE id = 12 [slave pointer (2)] ↳ USB OPTICAL MOUSE id = 13 [slave pointer (2)] Only ID 13 буде ловити команди xinput test. Сценарій завжди вловлює перший ідентифікатор. Але чому це все-таки двічі? Обидва зникають, коли я відключаю цю мишу, і знову з’являються при підключенні.
w-sky

6

Короткі кроки для цього:

Є утиліта, яка називається 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.


Це вирішило моє питання розливу води. У мене є кнопки лівого / правого клацання нижче тачпада мого ноутбука. Я розлив воду і тепер обидві кнопки надсилають сигнал ОС середнього клацання (я виявив це за допомогою програми 'keymon'). Я використовував ваш метод, щоб перевстановити середній клік на клацання лівою кнопкою миші, так що я можу принаймні насолодитися досвідом лівого клацання. Я ніколи не використовую середній клацання, тому це прекрасно працює для мене :) Дякую за прості вказівки. Мій ідентифікатор пристрою введення становив 11, тому я побіг "xinput --set-button-map 11 1 1 3" Дякую !!
Вахід Пазіранде

3

Коли використовується чудова відповідь нульової ширини , деякі пристрої, наприклад, 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аргумент "максимальна кількість" -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

Чудовий наконечник; Я відредагував відповідь, щоб включити її. Спасибі!
нульова пропускна здатність

1

Мені вдалося змінити відображення середньої кнопки миші Logitech на «Повернутись» за допомогою розпізнавання жестів Easystroke, яке я завантажив з програмного центру Ubuntu. Редагувати: У програмі ви виберете «Додати дію», «Назвіть це ім’я», виберіть тип клавіші, натисніть «Деталі» та натисніть клавішу Enter, натисніть «Запис обведення» та під час підказки натисніть середню кнопку.


1
Ласкаво просимо до AskUbuntu. Вам потрібно надати більш детальну відповідь.
Девід

Добре, дивіться вище редагувати.
at1515

Хороший улов. Але те, що ви описали, не збивається, як ви вказували: середня кнопка - це типова кнопка, щоб перетворити програму в режим розпізнавання жестів: при натисканні на неї програма починає розпізнавати жест, який ви робите. Тим не менш, +1, тому що у додатку є модуль для виявлення ідентифікаторів кнопок миші; це допомагає, коли ми хочемо використовувати xinputкнопки, які не відображаються під час використання xinput list <devID>.
1111161171159459134

1
О, це прийшло через 1 рік - ваша відповідь вартує +1
1111161171159459134

1

До 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-кнопкової миші. Він також може перезавантажувати натискання клавіш і команди, і конфігурація набагато простіша, ніж будь-який інший метод!


Цікаво, чи інструмент вносить ті самі зміни, просто на задньому плані. ^ _ ^
нульова пропускна здатність

0

У мене є HP elitebook 2570p HP, Ubuntu 18.04.2. Тут у мене є марна точка, яка є для мене марною, і ось дві непотрібні кнопки сліду під пробілом

Я не використовую ці клавіші, тому що у мене є під тачпада. Я хотів би перевстановити ці кнопки вліво = назад_ кнопка (Alt_L + ліворуч), права - = середня_маска_ кнопка. Точка доріжки в "xinput" - id = 11, а ліва кнопка - номер 1, права - 3.

Чи може хтось написати мені правильний код, щоб просто скопіювати в термінал? Я поєднував з xbindkeysrc, але це встановлює будь-яку дію на обидві кнопки (трекпойнт і тачпад)


Я зробив це і зробив це просто: <code> echo xinput set-button-map 11 8 1 2 >> ~ / .xsessionrc </code> Це робить мої кнопки сенсорної точки (id 11) зліва з 8-ої кнопки, середній, як клацання лівою кнопкою миші (немає 1), а правий клік як середній, а потім 'код' ехо -е '\ "/ usr / bin / xte' клавіша Alt_L '' клавіша вліво '' клавіша Alt_L '& amp; \ "\ nb: 8" >> ~ / .xbindkeysrc 'code' Він встановлює для кнопки № 8 (b: 8) Alt_L + Left => повернутися назад. Тепер у мене є корисні 2 кнопки миші
Atom
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.