如何使 xinput 命令永久生效

如何使 xinput 命令永久生效

使用 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

对于有价值的事情:
您可以使用~/.xsessionfile,而不是~/.xsessionrc.

~/.xsessionrc是 Debian 特定的,而~/.xsession类似于 UNIX,并且在所有发行版中都有类似的行为。

答案4

启动时加载配置文件完全取决于所使用的桌面环境。如果您通过键入以下命令来启动 xserver启动x这通常表明它将使用 .xinitrc (存储在 $HOME 中)。

在 .xinitrc 中,您必须加载具有不同映射的配置,即 .xsessionrc

然后你需要的行是这个(在.xinitrc中)

xrdb -merge ~/.xsessionrc 

但是,如果您使用 LightDM 或 GNOME 等登录管理器,则必须找到相同的等效项

相关内容