鼠标按键
本文存在的问题[编辑 | 编辑源代码]
配置鼠标加速度[编辑 | 编辑源代码]
在 Xorg 配置中[编辑 | 编辑源代码]
您首先想要检查 X 从您的鼠标中看到的内容。可以通过 xev 实用程序显示 X 事件。运行以下命令会弹出一个窗口:
$ xev -event button | grep button
在该窗口中进行的任何 xevents(如移动、调整大小或点击)将被报告到您启动 xev 的控制台。由于您正在过滤包含 "button" 的行,它将显示鼠标点击和释放事件及其相关的按钮编号。对于大多数鼠标来说,这将是 '1' 表示左键,'2' 表示中键,'3' 表示右键。其他按钮将有所不同(例如,对于 Logitech MX Master 3,滚轮是 4 和 5,拇指轮是 6 和 7,拇指尖按钮是 9,内拇指按钮是 8)。
示例输出:
state 0x0, button 1, same_screen YES state 0x100, button 1, same_screen YES state 0x0, button 9, same_screen YES state 0x0, button 9, same_screen YES
这对应于鼠标左键的点击和释放,然后是拇指尖的点击和释放。
您可以使用 xev 来确认您的鼠标按钮编号,并确认 X 是否被通知鼠标点击。
重新绑定鼠标和键盘功能[编辑 | 编辑源代码]
这一节涵盖了使用各种工具重新排列鼠标和键盘功能的细节。
将鼠标按钮绑定到键盘功能[编辑 | 编辑源代码]
xte[编辑 | 编辑源代码]
当我们要将键盘按钮绑定到鼠标时,xautomation包中的xte非常有用。
以下是一个示例 ~/.xbindkeysrc
,它将 Shift_R
绑定到鼠标按钮 3("右键点击"):
~/.xbindkeysrc
"xte 'mouseclick 3'" Shift_R
将键盘键绑定到鼠标按钮[编辑 | 编辑源代码]
xvkbd 和 xbindkeys[编辑 | 编辑源代码]
假设我们想要将一些鼠标按钮绑定到键盘上。我们将遇到的问题是,我们不知道如何模拟按键。这时 xvkbdAUR 就派上用场了。我们可以将其与 xbindkeys包 一起使用。
$ xbindkeys --defaults >> ~/.xbindkeysrc $ xbindkeys
要重启 xbindkeys,请输入:
$ pkill -f xbindkeys $ xbindkeys
以下是示例 ~/.xbindkeysrc
配置:
"xvkbd -text \"[F8]\"" m:0x0 + b:8 "xvkbd -text \"[Shift][Left]\"" m:0x0 + b:9 "xvkbd -text \"[Shift][Right]\"" m:0x0 + b:10 "xvkbd -text 2" m:0x0 + b:11 "xvkbd -text 3" m:0x0 + b:12
如果你想检查你的鼠标按钮编号,请使用 xev。不要忘记在 xvkbd -text 使用时输入大写字母,并用 \ 转义开括号,否则你只会得到 [Shift] 这样的输出。
以下是一个 xbindkeys 的示例,用于启用 x 选择粘贴(第三键粘贴),你需要安装 xsel 和 xvkbd。它的功能是在按下鼠标的第 13 个按钮时执行该命令(在 ~/.xbindkeysrc 中):
"xvkbd -no-jump-pointer -text \"\D1$(xsel)\" 2>/dev/null" b:13
这是 Meta+M 的一个按键绑定示例:
"xvkbd -text \"{+Super_L}m{-Super_L}\"" b:10
evrouter[编辑 | 编辑源代码]
有些程序,特别是游戏,使用不同的输入读取方法,所以需要另一个程序:evrouterAUR。
为了让 evrouter
命令能够读取输入设备,它必须在 input
组(或作为 root)中运行。这可以通过将你自己添加到该组来实现:
# gpasswd -a user input
现在我们可以使用 --dump
选项来显示要更改的按钮叫什么:
/dev/input/by-id/
中创建符号链接,可以用来引用特定设备。$ evrouter --dump /dev/input/event*
device 0: /dev/input/event0: AT Translated Set 2 keyboard device 1: /dev/input/event1: Microsoft Microsoft Trackball Explorer® device 2: /dev/input/event2: Sleep Button device 3: /dev/input/event3: Power Button device 4: /dev/input/event4: Power Button device 5: /dev/input/event5: PC Speaker Display name: :0.0
现在按下你想要更改的按钮:
Window "(null)": # 窗口标题 # Window "(null)": # 资源名称 # Window "(null)": # 类名 "Microsoft Trackball Explorer®" "/dev/input/event1" none key/275 "填写这个!"
Window "(null)": # 窗口标题 # Window "(null)": # 资源名称 # Window "(null)": # 类名 "Microsoft Trackball Explorer®" "/dev/input/event1" none key/276 "填写这个!"
以 "填写这个!" 结尾的行可以复制到配置文件中,配置文件默认是 ~/.evrouterrc
。例如,使用 evrouter 内置的 X11 键盘事件模拟器:
~/.evrouterrc
"Microsoft Trackball Explorer®" "/dev/input/event*" any key/275 "XKey/1" "Microsoft Trackball Explorer®" "/dev/input/event*" any key/276 "XKey/2"
'event1' 被更改为 'event*' 以应对 udev 在启动时给它分配不同的设备编号。'none' 被更改为 'any' 以便在按下按钮时即使按下了任何修饰键规则也能工作。要确定键码(括号中的),可以使用命令
# xmodmap -pk
查看 evrouter(1) 获取字段的完整解释。
配置文件设置完成后,将其作为守护进程运行:
$ evrouter /dev/input/event*
要停止守护进程:
$ evrouter -q $ rm -f /tmp/.evrouter*
/tmp/.evrouter:0.0
文件存在但 evrouter 没有删除它,那么你需要自己删除它。用户工具[编辑 | 编辑源代码]
这一节概述了特定硬件的工具,这些工具对于配置鼠标设置以及特别是它们的按钮非常有用。有关通用重新映射工具,请参阅 Input remap utilities。
- Piper (piper包) 是一个图形用户界面,用于配置游戏鼠标,支持 Wayland。为了使它与您的鼠标兼容,鼠标必须是支持设备列表中的一部分。
- lomocoAUR 用于 Logitech MX 鼠标,将帮助您设置适当的分辨率,启用或禁用智能滚动(也支持启动时!),等等。一定要查看
/etc/udev/lomoco_mouse.conf
并设置您希望在鼠标被 udev 加载时自动应用的选项。注意: lomoco 软件包可能已过时。对于更新的 Logitech 鼠标,有一个黑客方案:[1] - logiopsAUR 是一个用于配置 Logitech 鼠标(Logitech Options for Linux)的工具。它可能重新映射按钮到动作,支持手势,智能偏移等等。
evdev Xorg.conf 设置[编辑 | 编辑源代码]
这一节解释了如何使用 evdev
设置具有超过 3 个按钮的鼠标。还有其他方法可以实现这一点,但这里描述的一些笔记和工具可能对有其他需求的人有用。有些部分可能有助于使用其他驱动程序让额外的鼠标按钮工作。
我们将为 Xorg 使用 evdev 驱动程序。EVentDEVice 是一个高级的 USB 输入设备驱动程序,提供了比标准 Xorg mouse
驱动程序更大的能力。它也比 mouse
驱动程序更 "直接",允许更低的延迟和更少的转换问题。
- 注意
evdev
既是一个内核模块也是一个 Xorg 输入驱动程序。所有的 Arch 内核都带有evdev
模块。
使用 Xorg 11R7.0 或更新版本,只需要对 /etc/X11/xorg.conf
进行以下更改。
查找鼠标名称[编辑 | 编辑源代码]
首先,我们需要找到鼠标/鼠标的名称。为此,请执行以下命令:
$ grep -E "Name|Handlers" /proc/bus/input/devices | grep -E -B1 'Handlers.*mouse'
这应该会输出类似于这样的内容:
N: Name="Logitech USB Gaming Mouse" H: Handlers=mouse0 event0 ts0
或者,如果您有多个鼠标:
N: Name="Kensington Kensington Expert Mouse Wireless" H: Handlers=event0 mouse0 -- N: Name="Logitech USB Receiver" H: Handlers=kbd event2 mouse1
鼠标是具有 Handlers=mouse0
的那个,所以设备名称是 Logitech USB Gaming Mouse
。
Name
也会不同。复制设备的名称,然后打开 /etc/X11/xorg.conf
。
配置 Xorg[编辑 | 编辑源代码]
现在,我们需要在 xorg.conf
中添加一个条目,告诉 X 如何使用这个鼠标。它应该看起来像这样:
Section "InputDevice" Identifier "Evdev Mouse" Driver "evdev" Option "Name" "Logitech USB Gaming Mouse" Option "evBits" "+1-2" Option "keyBits" "~272-287" Option "relBits" "~0-2 ~6 ~8" Option "Pass" "3" Option "CorePointer" EndSection
将 Name
选项替换为您从上面复制的名称。如果您使用多个鼠标或在尝试加载 Xorg 时遇到错误,您也可以省略 CorePointer
选项。其他选项都是 evdev 的基本鼠标配置,应该适用于大多数鼠标。
接下来,我们需要告诉 X 使用鼠标,所以在 xorg.conf
中查找 ServerLayout
。
修改 ServerLayout
部分,使用 "Evdev Mouse" 作为设备。完成后,它应该看起来像这样:
Section "ServerLayout" Identifier "Default Layout" Screen 0 "Monitor0" 0 0 InputDevice "Keyboard0" "CoreKeyboard" InputDevice "Evdev Mouse" "CorePointer" EndSection
在布局中,您唯一需要更改的是引用您的鼠标的 InputDevice
行。
这应该是所需的全部内容。
- 由 xxsashixx 编辑
这是针对 Logitech G5 鼠标用户的。我没有测试过其他鼠标,但如果你不添加这个,你的鼠标 '可能' 不会工作。 如果你不需要添加这个,那就不要添加。
在 InputDevice
部分中放入
Option "Device" "/dev/input/event[#]"
否则鼠标将不会被检测到。
[#] = 你从以下命令得到的数字:
grep -E "Name|Handlers" /proc/bus/input/devices
- 由 bapman 编辑
使用上述方法,你的鼠标可能在重启后无法工作(事件编号改变了)。为了解决这个问题,你可以在 /dev/input/by-id
中使用符号链接。例如:
和 Konqueror 一起使用。 xbindkeys
由于 xvkbd 在官方仓库中不可用,这里有一个使用 xte 的示例,它来自 xautomation包 包:
# 鼠标按钮 "xte 'key XF86Back'" m:0x0 + b:8 "xte 'key XF86Forward'" m:0x0 + b:9
xmodmap 调整[编辑 | 编辑源代码]
对于一些用户来说,更改按钮代码的顺序可能会更舒适,特别是对于左撇子。根据您使用的环境,按钮代码可以通过两种不同的方式进行配置。如果您使用 .xinitrc
来加载 X,那么请将其添加到 .xinitrc
(更改为您拥有的按钮数量):
xmodmap -e "pointer = 1 2 3 6 7 8 9 10 11 12 4 5" &
请注意,按钮 4 和 5 必须放在最后,否则您的滚轮将无法工作。
如果您使用 GDM/SDDM/XDM 而不是 .xinitrc
,那么请创建文件 ~/.Xmodmap
并将其添加到其中(更改为您拥有的按钮数量):
pointer = 1 2 3 6 7 8 9 10 11 12 4 5
- GDM/SDDM/XDM 会在存在时读取
~/.Xmodmap
文件,而startx
不会。另一个解决方案是将其添加到您的~/.xinitrc
:xmodmap ~/.Xmodmap
。这将允许您在需要进行更改时只编辑~/.Xmodmap
,同时使用 *DM 和startx
。
您可能需要稍微调整这些数字以获得所需的行为。有些鼠标使用按钮 6 和 7 作为滚轮,在这种情况下,这些按钮必须是最后几个数字。继续尝试,直到它有效!
xinput 调整[编辑 | 编辑源代码]
出于调试目的,可以使用 xinput
,因为它能够在用户空间即时更改按钮映射。以下行更正了按钮映射(已有报告称 Logitech M505/B605 鼠标和可能其他鼠标存在此问题):
$ xinput set-button-map "$(xinput | awk -F'[=]' '/Logitech M505\/B605/ {print $2}' | awk '{print $1}')" 1 2 3 4 5 8 9
设备特定配置[编辑 | 编辑源代码]
Logitech G600[编辑 | 编辑源代码]
众所周知,在 xorg-server 1.18.0-3 中,G600 的侧边按钮不被识别为独立的键盘设备,而是另一个鼠标,这会导致奇怪的行为(当点击主鼠标按钮之一时,鼠标光标移动到屏幕边缘)。
为了强制 xorg 将它们识别为键盘按钮,需要在 /etc/X11/xorg.conf
中添加以下部分:
Section "InputClass" Identifier "G600 misconfiguration fix" MatchProduct "G600" # 仅匹配 G600 的键盘部分 MatchIsKeyboard "true" # 当 evdev 看到绝对轴时,它假设它是鼠标。阻止这种情况发生。 Option "IgnoreAbsoluteAxes" "on" EndSection
Mad Catz Mouse[编辑 | 编辑源代码]
Logitech M560/M545/M546[编辑 | 编辑源代码]
这些鼠标为 Windows 8 设计,具有非传统行为:鼠标显示为鼠标和键盘,一些按钮不发出标准的鼠标按钮事件,而是键盘和鼠标按钮的组合。这阻止了在 Linux 下 "舒适地" 使用此鼠标。
适当的驱动程序允许鼠标像普通鼠标一样使用:
- Logitech M560 的内核模块(已合并到内核 v4.2)
- Logitech M545/M546 的内核模块
另见 Xbindkeys 用于鼠标按钮映射。
Logitech G5 鼠标:绑定 + 和 -[编辑 | 编辑源代码]
如果你想要在 G5/7 鼠标中绑定通常用于改变 DPI 的 +
和 -
按钮,你必须使用 lomoco 作者发布的 g5hack
[2]。
wget http://piie.net/temp/g5_hiddev.c gcc -o g5hack g5_hiddev.c ./g5hack /dev/usb/hiddev0 3
这将把你的 DPI 改为 2000,点亮第 1 个 LED 并禁用即时 DPI 更改,这样你就可以用它和 evrouter 一起使用。如果你经常使用它,我建议你把它复制到 /usr/bin
目录:
# cp g5hack /usr/bin/
如果你想绑定你的 +
和 -
按钮,你必须把底部的行(注释有 '"-" button does not function anymore' 的那一行)复制到你将使用的模式中,例如,在 "case 3:" 下,你可以把它放在注释有 'turn on third led' 的那一行上面(当然在此之前要删除旧的)。
对于报告为 "product 0xc049" 的最新 G5 鼠标,原始的 hack 不起作用。你必须简单地把 #define MOUSE_G5 0xc041
改为 #define MOUSE_G5 0xc049
然后重新编译。
你可以使用 systemd 单元在系统启动时执行 g5hack 工具。详见 Systemd#Writing unit files。
如果 Arch 是一个虚拟机客户机[编辑 | 编辑源代码]
如果你想支持超过两三个鼠标按钮,这种能力将取决于你的虚拟机软件。
VMware workstation[编辑 | 编辑源代码]
对于基于 Arch 的虚拟机客户机,添加以下行到它的 .vmx 配置文件中:
mouse.vusb.enable = "TRUE" mouse.vusb.useBasicMouse = "FALSE"