我有一款 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
脚本的问题是每次重新启动计算机时,轨迹球 ID 号都会发生变化,因此脚本有时有效,有时无效。我无法将脚本键入设备名称,因为有两个设备条目。我需要一种方法来键入设备名称和从属指针指定,但不知道如何做到这一点。
提前感谢你的帮助!
答案1
您可以sed
直接在脚本中使用来提取 id:
#!/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
在 的输出中搜索匹配的行,用 ID 号替换它,并p
仅打印 ( -n
) 此行,即仅打印数字。此 ID 被保存为变量,$id
然后在xinput
命令中直接使用。甚至可以省略变量,只写
xinput --set-button-map $(xinput | sed …) 3 2 1
但这不是很清楚——在脚本中,我更喜欢带有解释性注释的变量。
您还可以grep
两次提取正确的 ID:
xinput | grep pointer | grep -oP "ELECOM ELECOM TrackBall Mouse *id=\K[0-9]+"
第一个grep
排除不包含“pointer”的每一行,第二个仅打印包含“ELECOM ELECOM TrackBall Mouse”行中的 id,使用PCRE黑魔法。