У меня есть мышь шарового манипулятора Elecom, что я хочу подкачать левые и правые кнопки мыши. Используя xinput | grep "ELECOM ELECOM TrackBall Mouse"
Я получаю следующий вывод:
⎜ ↳ ELECOM ELECOM TrackBall Mouse id=10 [slave pointer (2)]
↳ ELECOM ELECOM TrackBall Mouse id=12 [slave keyboard (3)]
Я создал сценарий для свопинга левых и правых кнопок мыши, который работает при начальной загрузке:
#!/bin/sh
# ELECOM TrackBall Mouse
# swap middle and right buttons xinput --set-button-map 10 3 2 1
Проблема со сценарием состоит в том, что каждый раз Вы перезапускаете компьютер, изменения идентификационного номера шарового манипулятора, поэтому иногда работы сценария, и иногда он не делает. Я не могу адресовать сценарий названию устройства, потому что существует две записи устройства. Мне нужен способ ввести к названию устройства И ведомого обозначения указателя, но понятия не иметь, как сделать это.
Заранее спасибо за любую справку!
Можно использовать sed
извлечь идентификатор непосредственно в сценарии:
#!/bin/bash
# get current id from xinput
id=$(xinput | sed -nE 's/.*ELECOM ELECOM TrackBall Mouse.*id=([0-9]+).*pointer.*/\1/p')
# swap middle and right buttons
xinput --set-button-map $id 3 2 1
sed
поиски команды xinput
вывод для согласующего отрезка длинной линии, замены это с идентификационным номером и p
арендные платы только (-n
) эта строка, т.е. просто число. Этот идентификатор сохраняется как переменная $id
который затем просто используется в xinput
команда. Можно было даже не учесть переменную и просто записать
xinput --set-button-map $(xinput | sed …) 3 2 1
но это не очень ясно – в сценарии, я предпочитаю переменную с пояснительным текстом.
Вы могли также grep
два раза извлечь корректный идентификатор:
xinput | grep pointer | grep -oP "ELECOM ELECOM TrackBall Mouse *id=\K[0-9]+"
Первое grep
исключает каждую строку, не содержащую “указатель”, второй печатает просто идентификатор в строке, содержащей “мышь ELECOM ELECOM TrackBall” с помощью черной магии PCRE.