我在联想 ThinkPad P16 Gen 1 上使用 Ubuntu 22.04。
触摸板底部有左键、中键和右键。我经常会因为点击触摸板底部中间而意外粘贴内容。为了避免这种情况,我可以通过以下方式将中键单击按钮更改为左键单击:
xinput set-button-map 12 1 1 3 4 5 6 7
但是当我重新启动机器时,它会重置,因此我每次都必须再次执行此操作 - 据我了解,我的触摸板的 xinput 不会12
每次都这样(如本例所示)。
我怎样才能使这个改变永久生效或者在每次启动时自动进行这个映射改变?
答案1
我怎样才能使这个改变永久生效或者在每次启动时自动进行这个映射改变?
最简单的方法是创建一个新的启动应用程序为此并使用这个:
sh -c 'sleep 5 && xinput set-button-map 12 1 1 3 4 5 6 7'
... 在里面Command:类似于的字段这个例子...它将在重启和登录时自动执行。
注意这sleep 5
将延迟命令的执行五秒钟(如果需要,可以增加它)以允许图形用户会话在xinput
执行之前完全加载...这是必要的,因为xinput
需要一个工作的图形用户会话来执行并完成它的工作。
据我了解,我的触摸板的 xinput 不会
12
每次都
如果设备是可移动的并且下次再次插入时连接到不同的端口,则这是可能的。
虽然 ID 可能会改变,但设备名称通常不会...因此,您可以查看输出以xinput list
获取设备名称并使用它来获取 ID,如下所示:
xinput list --id-only "Exact Device Name" 2>/dev/null
...或者像这样:
xinput list 2>/dev/null | grep --color=never -Po "Exact Device Name.*=\K[0-9]+"
...并且可以在上面的sh
命令字符串中代替设备 ID(在命令替换语法中$(...)
),如下所示:
sh -c 'sleep 5 && xinput set-button-map "$(xinput list --id-only "Exact Device Name" 2>/dev/null)" 1 1 3 4 5 6 7'
或者像这样:
sh -c 'sleep 5 && xinput set-button-map "$(xinput list 2>/dev/null | grep --color=never -Po "Exact Device Name.*=\K[0-9]+")" 1 1 3 4 5 6 7'
...并且您的设备ID应该会被自动发现。
答案2
如果您编辑 .profile 启动文件,您可以在启动时执行该文件。
.profile 位于 /home/{user} 目录中。
如果 .profile 文件不存在,您可以创建它。
# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
# umask 022
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
PATH="$HOME/.local/bin:$PATH"
fi
sh -c 'sleep 5 && xinput set-button-map 12 1 1 3 4 5 6 7'
答案3
找出设备的确切名称:
xinput list
xinput list | grep "TM3127-001"
你不能依赖“Touchpad”、“TouchPad”等等。我知道这永远不会改变。
xinput list | grep "TM3127-001" | grep -Eo 'id=[0-9]{1,2}'
隔离 ID 号(上面),然后grep
提取数字(下面):
xinput list | grep "TM3127-001" | grep -Eo 'id=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}'
sudo nano /path/to/script/my_script.sh
使用以下脚本my_script.sh
。
将 替换YOUR_UNIQUE_STRING
为您的设备名称(我的是 )TM3127-001
。
保存并退出。
#!/bin/bash
device_id=$(xinput list | grep "YOUR_UNIQUE_STRING" | grep -Eo 'id=[0-9]{1,2}' | grep -Eo '[0-9]{1,2}')
xinput set-button-map "$device_id" 1 1 3 4 5 6 7
exit 0
将模式更改为可执行:sudo chmod +x /path/to/script/my_script.sh
sudo nano /etc/rc.local
将以下内容放在文件末尾:
/path/to/script/my_script.sh start
现在保存、退出并重新启动。您的按钮映射现在是永久的。