跳转至内容

鼠标按钮

来自 ArchWiki

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 样式仍需修复,部分章节不清晰 (在 Talk:Mouse buttons 讨论)

本文或本章节的准确性存在争议。

原因: 2021年8月 - 本页面的大部分内容(尤其是 evdev Xorg 设置部分)是几年前编写的,当时 Arch 的默认输入驱动程序不同。默认输入驱动程序已迁移到 libinput,在此期间 libinput 经历了重大发展。直接使用 evdev 仍然是可能的,但存在一些注意事项,详情请参阅 此处。 (在 Talk:Mouse buttons 讨论)

本文档描述了如何配置具有三个以上按键的鼠标。

在 X 中测试鼠标输入的先决条件

本文档假定您正在使用 Xorg (X Window System) 而不是 Wayland

首先,您需要检查 X 从您的鼠标接收到的信息。X 事件可以通过 xev 工具显示。运行以下命令会弹出一个窗口:

$ xev -event button | grep button

任何对该窗口的 xevent(例如移动、调整大小或点击)都会报告到您启动 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

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 重复了 xbindkeys,假定有 xte 而未链接 Xorg#Automation。 (在 Talk:Mouse buttons 讨论)

来自 xautomationxte 在我们想要将键盘按键绑定到鼠标时非常有用。

以下是一个示例 ~/.xbindkeysrc,它将 Shift_R 绑定到鼠标按键 3(“右键点击”)

~/.xbindkeysrc
"xte 'mouseclick 3'"
  Shift_R

将键盘按键绑定到鼠标按键

xvkbd 和 xbindkeys

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 重复了 xbindkeys,假定有 xvkbd 而未链接 Xorg#Automation。 (在 Talk:Mouse buttons 讨论)

假设我们想将一些鼠标按键绑定到键盘按键。我们将遇到的问题是我们不知道如何模拟按键。这时 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

本文章或章节需要扩充。

原因: “读取输入的不同方法”指的是什么? (在 Talk:Mouse buttons 讨论)

有些程序,尤其是游戏,使用不同的输入读取方法,因此需要另一个程序:evrouterAUR

为了使 evrouter 命令能够读取输入设备,它必须在 input 组中运行(或以 root 身份运行)。可以通过将您自己添加到该组来实现:

# gpasswd -a user input

现在我们可以使用 --dump 选项来显示要更改的按钮的名称:

提示 对于 USB 设备,udev 通常会在 /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 title
# Window "(null)": # Resource name
# Window "(null)": # Class name
"Microsoft Trackball Explorer®" "/dev/input/event1" none key/275 "fill this in!"

Window "(null)": # Window title
# Window "(null)": # Resource name
# Window "(null)": # Class name
"Microsoft Trackball Explorer®" "/dev/input/event1" none key/276 "fill this in!"

以“fill this in!”结尾的行可以复制到配置文件中,该文件默认为 ~/.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(1) 获取详细信息。

设置好配置文件后,将其作为守护进程运行:

$ evrouter /dev/input/event*

要停止守护进程:

$ evrouter -q
$ rm -f /tmp/.evrouter*
注意 如果 /tmp/.evrouter:0.0 文件存在但退出时未删除,evrouter 将无法启动,因此您需要手动删除它。

用户工具

本节概述了用于配置鼠标设置(尤其是其按钮)的硬件特定工具。有关通用重映射工具,请参阅 Input remap utilities

  • Piperpiper)是一款用于配置游戏鼠标的图形用户界面,支持 Wayland。要与您的鼠标一起工作,它必须在 支持的设备列表 中。
  • 用于 Logitech MX 鼠标的 lomocoAUR 可以帮助您设置正确的 DPI,启用或禁用智能滚动(支持启动时加载!),等等。请务必查看 /etc/udev/lomoco_mouse.conf 并设置您希望在鼠标由 udev 加载时自动应用的选项。
    注意 lomoco 软件包可能已过时。有一个针对较新 Logitech 鼠标的 hack:[1]
  • 用于配置 Logitech 鼠标的工具(Linux 版 Logitech Options)是 logiopsAUR。它可以将按钮重新映射到操作、支持手势、智能切换等。

evdev Xorg.conf 设置

本节解释了如何使用 evdev 配置具有三个以上按键的鼠标。也有其他方法可以实现这一点,但这里介绍的一些注意事项和工具可能对有其他需求的用户有用。有些部分也可以帮助使用其他驱动程序让额外的鼠标按键正常工作。

我们将使用 Xorg 的 evdev 驱动程序。EVentDEVice 是一个用于 USB 输入设备的先进驱动程序,它比标准的 Xorg mouse 驱动程序提供了更大的控制力。它也比 mouse 驱动程序更“直接”,能够降低延迟和减少翻译问题。

  • 请注意,evdev 既是内核模块也是 Xorg 输入驱动程序。所有 Arch 内核都包含 evdev 模块。

对于 Xorg 11R7.0 或更新版本,只需对 /etc/X11/xorg.conf 进行以下更改:

查找鼠标名称

注意 为了获得准确的信息,有时需要从没有加载 Xorg 或鼠标驱动程序的启动会话中执行此命令。

第一步是找到鼠标/鼠标的名称。为此,请执行以下命令:

$ 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

注意 我的鼠标是 Logitech G5;您的鼠标可能不同,因此 Name 也会不同。

复制设备名称,然后打开 /etc/X11/xorg.conf

配置 Xorg

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 需要一些语言改进,并且必须删除已签名的编辑。其中一些内容似乎也不再相关,请参阅下面的 Template:Out of date。 (在 Talk:Mouse buttons 讨论)

现在,我们需要在 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 鼠标用户。我没有为其他鼠标测试过,但如果您不添加此项,您的鼠标 *可能* 不起作用。如果您不需要添加此项,则不要添加。

Option "Device" "/dev/input/event[#]"

放在 InputDevice 部分,否则鼠标将无法被识别。

[#] = 您从以下命令获得的数字

grep -E "Name|Handlers" /proc/bus/input/devices
  • 编辑者:bapman

使用上述方法,您的鼠标在重启后可能无法工作(事件编号会改变)。为了解决这个问题,您可以使用 /dev/input/by-id 中的符号链接。例如:

Option      "Device" "/dev/input/by-id/usb-Logitech_USB_Receiver-event-mouse"

要找到合适的 id,请执行:

ls /dev/input/by-id/
  • 编辑者:Diamir

本文或本章节已过时。

原因: udev 规则将不起作用,SYSFS=BUS= 键已被移除 [2]。 (在 Talk:Mouse buttons 讨论)

对于桌面型键盘-鼠标,这不起作用,因为只有一个 USB 连接,并且 /dev/input/by-id 中只有一个键盘。在这种情况下,我们可以创建一个 udev 规则来获得一个一致的链接。以下规则创建了链接 /dev/input/usbmouse,它指向正确的事件条目:

KERNEL=="event[0-9]*", BUS=="usb", SYSFS{modalias}=="usb:v045Ep008Ad7373dc00dsc00dp00ic03isc00ip00", SYMLINK+="input/usbmouse"

您可以将其命名为 z10_usb_mouse.rules 并将其放在 /etc/udev/rules.d 中。

SYSFS(modalias) 的加密值可以通过以下方式获得:

输入命令 cat /proc/bus/input/devices

您会发现键盘和鼠标,并看到 event4 在此情况下是鼠标。

I: Bus=0003 Vendor=045e Product=008a Version=0111
N: Name="Microsoft Microsoft Wireless Optical Desktop� 1.00"
P: Phys=usb-0000:00:10.0-2/input0
S: Sysfs=/devices/pci0000:00/0000:00:10.0/usb1/1-2/1-2:1.0/input/input3
U: Uniq=
H: Handlers=kbd event0 
B: EV=120013
B: KEY=1000000000007 ff800000000007ff febeffdff3cfffff fffffffffffffffe
B: MSC=10
B: LED=107
I: Bus=0003 Vendor=045e Product=008a Version=0111
N: Name="Microsoft Microsoft Wireless Optical Desktop� 1.00"
P: Phys=usb-0000:00:10.0-2/input1
S: Sysfs=/devices/pci0000:00/0000:00:10.0/usb1/1-2/1-2:1.1/input/input4
U: Uniq=
H: Handlers=kbd mouse0 event1 
B: EV=17
B: KEY=3000000000000 0 1f0000 f8400244000 601878d800d448 1e000000000000 0
B: REL=7c3
B: MSC=10

所以,我输入以下命令(根据您的具体情况调整 event #):

udevinfo -a -p $(udevinfo -q path -n /dev/input/event4) | grep modalias
ATTRS{modalias}=="input:b0003v045Ep008Ae0111-0,1,2,4,k71,72,73,74,83,86,8A,8C,8E,8F,9B,9C,9E,9F,A3,A4,A5,A6,AB,AC,B5,B6,CE,D2,D5,E2,E7,E8,E9,EA,EB,110,111,112,113,114,1B0,1B1,r0,1,6,7,8,9,A,am4,lsfw"
ATTRS{modalias}=="usb:v045Ep008Ad7373dc00dsc00dp00ic03isc00ip00"
ATTRS{modalias}=="pci:v00001106d00003038sv00001043sd000080EDbc0Csc03i00"

获取 ATTRS,它会与 usb: 一起完成 "SYSFS{modalias}== " 条目。

最后,在 xorg.conf 中使用 usbmouse 作为 Device Option:

Option "Device" "/dev/input/usbmouse"

evdev Xorg - 后续配置

Google Chrome

可以工作。水平滚动开箱即用 - 向左或向右推滚轮。拇指按键也可用作上一页/下一页。

Opera

可以工作。注意:可以在 Preferences > Advanced > Shortcuts > Mouse set-up 中轻松将按键映射到功能。例如,将 button 8 绑定到 back

  1. 导航到鼠标设置并展开 Application 下拉菜单:
  2. 在输入列中,键入:Button 8
  3. 在操作列中,键入:Back

Firefox

水平滚动

要启用后退和前进,而不是滚动左/右,请在 about:config 中更改以下设置:

mousewheel.default.action.override_x         2
mousewheel.default.delta_multiplier_x       -100

拇指按键 - 前进和后退

注意 根据 xev 是否能正确检测到您所有的鼠标按钮(功能可以在每个应用程序的基础上映射),或者您想更改默认行为,以下内容可能不是必需的。

为此,我们需要将键盘按键映射到所需的鼠标按钮,并安装 xvkbdAURxbindkeys

在大多数使用后退/前进功能的现代应用程序中,XF86Back 默认映射到后退,XF86Forward 映射到前进。在大多数 MX 鼠标上,拇指按键解析为 8 和 9。如果您的鼠标不同,请使用 xev 检查按钮编号,并替换示例中使用的编号(b:8 和 b:9)。

因此,如果您有一个 MX 鼠标,您将创建文件 ~/.xbindkeysrc,其中包含:

# Mouse Buttons
"xvkbd -xsendevent -text "\[XF86Back]""
m:0x0 + b:8 
"xvkbd -xsendevent -text "\[XF86Forward]""
m:0x0 + b:9

现在进行测试……运行以下命令,如果它按预期工作,请记住将 xbindkeys 添加到 .xinitrc 或在每次 X 启动时执行它的地方。此外,这应该可以在 Epiphany 和 Konqueror 中使用,无需任何额外配置或使用 IMWheel

xbindkeys

由于 xvkbd 在官方存储库中不可用,这里是另一个使用 xautomation 包中的 xte 的示例:

# Mouse Buttons
"xte "key XF86Back""
m:0x0 + b:8
"xte "key XF86Forward""
m:0x0 + b:9

xmodmap 调整

注意 以上内容对于 evdev 用户来说都不是必需的,但对于非 evdev 用户保留在这里。除非您的鼠标出现问题,否则请忽略整个部分。

对于某些人来说,更改按钮代码的顺序可能更舒适,例如左撇子。根据您使用的环境,按钮代码可以通过两种不同的方式配置。如果您使用 .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 则不会。另一种解决方案是将此添加到您的 ~/.xinitrcxmodmap ~/.Xmodmap。这样您就可以使用 *DM 和 startx,同时只需在需要更改时编辑 ~/.Xmodmap

您可能需要稍微调整这些数字才能获得所需的行为。有些鼠标使用按钮 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"
    # Match just the keyboard section of the G600
    MatchIsKeyboard "true"
    # evdev assumes it is a mouse when it sees the absolute axis. Stop that from happening. 
    Option "IgnoreAbsoluteAxes" "on"  
EndSection

Mad Catz 鼠标

Mad Catz 鼠标

Logitech M560/M545/M546

这些鼠标是为 Windows 8 设计的,行为不同寻常:鼠标既被识别为鼠标 *又* 被识别为键盘,并且某些按钮发出的不是标准的鼠标按钮事件,而是键盘和鼠标按钮组合按压的信号。这妨碍了在此 Linux 上“舒适”地使用此鼠标。

适当的驱动程序允许将鼠标用作普通鼠标:

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因: 应该打包在 AUR 中 (在 Talk:Mouse buttons 讨论)

另请参阅 Xbindkeys 以获取鼠标按钮映射。

Logitech G5 鼠标:绑定 + 和 -

如果您想绑定 G5/7 鼠标上的 `+` 和 `-` 按钮,它们通常用于改变 DPI,您必须使用由 lomoco 作者发布的 `g5hack` [3]

wget http://piie.net/temp/g5_hiddev.c
gcc -o g5hack g5_hiddev.c
./g5hack /dev/usb/hiddev0 3

这将使您的 DPI 变为 2000,点亮第一个 LED,并禁用即时 DPI 更改,因此您可以与 evrouter 一起使用它。如果您经常使用它,建议将其复制到 /usr/bin 目录。

# cp g5hack /usr/bin/

如果您想绑定您的 `+` 和 `-` 按钮,您必须将底部的一行(上面有注释“‘-’按钮不再工作”的那一行)复制到您将要使用的模式下,例如,在“case 3:”下,您可以将其放在上面注释为“turn on third led”的那一行(当然要先删除旧的)。

对于报告为“product 0xc049”的最新 G5 鼠标,原始 hack 不起作用。您只需将 #define MOUSE_G5 0xc041 更改为 #define MOUSE_G5 0xc049 并重新编译。

您可以使用 systemd unit 在系统启动时执行 g5hack 工具。详情请参阅 Systemd#Writing unit files

如果 Arch 是虚拟机客户机

如果您想支持两个或三个以上的鼠标按钮,功能将取决于您的虚拟机管理程序软件。

VMware workstation

对于您的基于 Arch 的客户机 VM,请将以下行添加到其 .vmx 配置文件中:

mouse.vusb.enable = "TRUE"
mouse.vusb.useBasicMouse = "FALSE"