![如何使 xinput 命令永久生效](https://linux22.com/image/101602/%E5%A6%82%E4%BD%95%E4%BD%BF%20xinput%20%E5%91%BD%E4%BB%A4%E6%B0%B8%E4%B9%85%E7%94%9F%E6%95%88.png)
使用 Linux Mint 18.1,我使用“xinput”(下面的命令)重新映射了一些鼠标和键盘按键。当我断开鼠标并重新连接时,必须手动重新运行 xinput 命令。
我读到添加它们~/.xsessionrc
是正确的做法。正如你所看到的,我已经做到了。我也尝试过~/.xinputrc
。它会在启动时运行一次,但如果我断开并重新连接鼠标,或者使计算机休眠,我需要手动重新运行 xinput 命令。
有人知道保持这些命令始终处于活动状态的正确方法吗?例如,如何使它们在设备断开/重新连接时持续存在?
davidparks21@ghostmint ~ $ cat .xsessionrc
# Map mouse button 8 (top right) to button 2 (top left) and vice versa
xinput --set-button-map 10 1 8 3 4 5 6 7 2 9 10 11 12
# Fix numeric keypad for shift-home and shift-end
setxkbmap -option numpad:microsoft
答案1
您可以运行此脚本,在插入或拔出 USB 设备后,代码将执行:
while true; do state=$(lsusb) && sleep 2 && [[ $state != $(lsusb) ]] && echo "Change detected, replace echo with your command"; done
答案2
这是我的最终解决方案,我纠正了 Nir 答案中极不可能且非关键的竞争条件。另外,我还处理了这样一个事实:拔下鼠标时我无法重新映射按键(拔下鼠标时没有错误消息)。
我添加到~/.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 &
我使用从 xinput 解析的鼠标 ID 作为触发器而不是lsusb
,但它具有相同的效果。
注意 xinput 命令后面的管道只是解析鼠标的 ID,即能改变。额外的新/旧鼠标 ID 是为了避免任何竞争条件的可能性。
感谢@Nir 的建议。
答案3
对于有价值的事情:
您可以使用~/.xsession
file,而不是~/.xsessionrc
.
~/.xsessionrc
是 Debian 特定的,而~/.xsession
类似于 UNIX,并且在所有发行版中都有类似的行为。
答案4
启动时加载配置文件完全取决于所使用的桌面环境。如果您通过键入以下命令来启动 xserver启动x这通常表明它将使用 .xinitrc (存储在 $HOME 中)。
在 .xinitrc 中,您必须加载具有不同映射的配置,即 .xsessionrc
然后你需要的行是这个(在.xinitrc中)
xrdb -merge ~/.xsessionrc
但是,如果您使用 LightDM 或 GNOME 等登录管理器,则必须找到相同的等效项