我使用 Debian 9(又名“Stretch”)x86_64。
$ uname -a:
Linux mypc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
尝试从我的设备 Logitech MU-007 映射我的额外按钮:
$ lsusb | grep Logitech
Bus 001 Device 023: ID 046d:c069 Logitech, Inc. M-U0007 [Corded Mouse M500]
x输入设备:
$ xinput | grep Logitech
⎜ ↳ Logitech USB Laser Mouse id=10 [slave pointer (2)]
测试xinput test 10
鼠标左侧两个按钮的额外按钮,返回 8 和 9。
$ xinput -version
xinput version 1.6.2
尝试了一个简单的:
xinput set-button-map 10 8 2 3
或者
$ xmodmap -e "pointer = 9 2 3"
Warning: Only changing the first 3 of 12 buttons.
X Error of failed request: BadValue (integer parameter out of range for operation)
Major opcode of failed request: 116 (X_SetPointerMapping)
Value in failed request: 0x9
Serial number of failed request: 9
Current serial number in output stream:
左侧按钮根本不起作用,无法像左键单击那样进行选择。
我也想保留左键单击和额外按钮作为左键单击。
知道为什么该xinput
命令没有选择任何内容吗?
编辑
最后:
id=$(xinput list | grep -oP 'Logitech USB Laser Mouse.*id=\K\d+')
xinput set-button-map $id 1 2 3 4 5 6 7 1 1 10 11 12
答案1
您假设此命令会将第一个鼠标按钮的功能映射到物理按钮 #8:
xinput set-button-map 10 8 2 3
这个假设是不正确的。事实上,该命令的工作方式完全相反:您实际上将物理按钮 #1 设置为将事件作为“按钮 8”的另一个实例发送,这实际上使“第一个鼠标按钮”操作不可用。
如果你想让物理按钮 #8 充当额外的“第一个鼠标按钮”,你必须这样做:
xinput set-button-map 10 1 2 3 4 5 6 7 1 9 10 11 12
默认映射为1 2 3 4 5 6 7 8 9 10 11 12
,因此如果您希望物理按钮 #8 的作用与第一个鼠标按钮相同,请将8
映射中的数字替换为另一个1
。
如果您想完全禁用某个特定按钮,请0
在与该物理按钮对应的插槽中使用。
请注意,按钮 4 和 5 通常对应于鼠标滚轮向上/向下操作。
答案2
我找到了更好的解决方案。我可以这样保留数字键盘这是其他解决方案不可能实现的。
我有一个键盘按键可以在之间切换鼠标键模式,这样,我使用 F1 作为左键单击,F2 作为中键单击,F3 作为右键单击。然后我可以使用特殊键切换回键盘。
特殊键触发此脚本(检查您的 WM 键盘快捷键首选项)。
#!/bin/bash
if [[ ! -s ~/.button-state ]]; then
echo 0 > ~/.button-state
fi
state=$(<~/.button-state)
if ((state==0)); then
xkbset m
yad --notification xxx &
echo 1 > ~/.button-state
elif ((state==1)); then
xkbset -m
pkill -f 'yad --notification xxx
echo 0 > ~/.button-state
else
echo >&2 "weird error"
exit 1
fi
启用鼠标手势后,系统托盘中会显示此图标: