我怎样才能使 xinput 设置按钮映射永久生效?

我怎样才能使 xinput 设置按钮映射永久生效?

我在联想 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

1号航站楼

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}'

航站楼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

现在保存、退出并重新启动。您的按钮映射现在是永久的。

相关内容