Я хочу, чтобы настройки xinput для моей usb-мыши сохранялись после ее выключения и повторного включения. Как я могу отслеживать это событие?
Это не работает, так как я никогда не отключаю USB-приемник: Как сделать так, чтобы настройки xinput сохранялись после отключения и повторного подключения устройств, а также после выключения, перезагрузки и т. д.?
Насколько я понимаю, udev можно использовать для приложений обнаружения оборудования, но, похоже, он не способен обнаруживать изменения состояния устройства, например, приемника Logitech Unifying.
Я полагаю, что ключ к решению этой проблемы — успешно отслеживать события в Receiver и писать скрипт для выполнения команды xinput. Кто-нибудь знает, как обнаружить это событие? Solaar, конечно, может обнаружить это, но это не значит, что это просто для неопытного пользователя Linux.
Спасибо!
решение1
Я решил эту проблему, воспользовавшись предложением из другого поста в Unix Stack Exchange.
Вкратце, я запускаю фоновый скрипт оболочки, который каждые 2 секунды проверяет наличие изменений в поведении мыши и, когда он их находит, повторно запускает команду xinput.
Оригинальное (и более простое) решение опубликовано здесь:
https://unix.stackexchange.com/questions/332573/how-to-make-xinput-commands-permanent/340594#340594
Вот скрипт, который я запускаю ~/.xinitrc
:
# Map mouse button 8 (top right) to button 2 (top left) and vice versa, run when changes to the mouse occur
while true; do
NEW_MOUSEID=$(xinput | grep "Expert Mouse" | grep -o -E '[0-9]+' | head -n 1)
if [ "$MOUSEID" != "$NEW_MOUSEID" ]; then
MOUSEID=$NEW_MOUSEID
if [ "$MOUSEID" != "" ]; then
xinput --set-button-map $MOUSEID 1 8 3 4 5 6 7 2 9 10 11 12
fi
fi
sleep 2
done &
Базовая структура:
- Следите за изменениями идентификатора USB-устройства от xinput каждые 2 секунды.
- Если идентификатор мыши пустой, она не подключена, не запускайте xinput (если вы это сделаете, вы получите сообщение об ошибке)
- Синтаксический анализ команды
xinput
возвращает только идентификатор USB-устройства для мыши «Expert Mouse», например: «14».
Обратите внимание, что в исходном ответе предлагается отслеживать изменения lsusb
и затем повторно запускать команду. Это работает так же хорошо.