![使 xinput 设置在 USB 鼠标关闭后仍然保留(仍连接)](https://linux22.com/image/1052799/%E4%BD%BF%20xinput%20%E8%AE%BE%E7%BD%AE%E5%9C%A8%20USB%20%E9%BC%A0%E6%A0%87%E5%85%B3%E9%97%AD%E5%90%8E%E4%BB%8D%E7%84%B6%E4%BF%9D%E7%95%99%EF%BC%88%E4%BB%8D%E8%BF%9E%E6%8E%A5%EF%BC%89.png)
我想让我的 USB 鼠标的 xinput 设置在关闭并再次打开后保留。我该如何监控此事件?
这不起作用,因为我从未拔下 USB 接收器: 如何使 xinput 设置在设备拔出、重新插入以及关机、重启等之后保留?
据我所知,udev 可用于硬件检测应用程序,但它似乎无法检测设备(例如 Logitech Unifying 接收器)中的状态变化。
我猜解决这个问题的关键是成功跟踪接收器中的事件并编写脚本来执行 xinput 命令。有人知道我如何检测此事件吗?Solaar 当然能够检测到这一点,但这并不意味着对于非专家 Linux 用户来说这很简单。
谢谢!
答案1
我根据来自 unix stack exchange 的另一篇文章的建议解决了这个问题。
简而言之,我运行一个后台 shell 脚本,每 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 &
基本结构:
- 每 2 秒观察 xinput 中 USB ID 的变化
- 如果鼠标 ID 为空,则表示未连接,请不要运行 xinput(如果运行,则会收到错误)
- 该命令的解析
xinput
仅返回鼠标“Expert Mouse”的 USB 设备 ID,例如:“14”
请注意,原始答案建议监视更改lsusb
,然后重新运行命令,这样同样有效。