鼠标按键

出自 ArchWiki

本条目或章节需要语言、wiki 语法或风格改进。参阅 Help:Style 以获取参考。

原因: 风格仍需修复,章节不清晰(在 Talk:Mouse buttons 中讨论)

本条目或章节的事实准确性存在争议。

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

本文介绍如何配置具有 3 个以上按钮的鼠标。

在 X 中进行鼠标输入的前提测试

本页面假定您正在使用 Xorg (X 窗口系统) 而不是 Wayland

您首先需要检查 X 从您的鼠标中看到了什么。X 事件可以通过 xev 实用程序显示。运行以下命令将弹出一个窗口

$ 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

本条目或章节需要语言、wiki 语法或风格改进。参阅 Help:Style 以获取参考。

原因: 重复 xbindkeys,假定 xte 而不是链接 Xorg#自动化。(在 Talk:Mouse buttons 中讨论)

当我们想要将键盘按键绑定到鼠标时,来自 xautomationxte 派上用场。

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

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

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

xvkbd 和 xbindkeys

本条目或章节需要语言、wiki 语法或风格改进。参阅 Help:Style 以获取参考。

原因: 重复 xbindkeys,假定 xvkbd 而不是链接 Xorg#自动化。(在 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 将无法启动,因此您必须自行删除它。

用户工具

本节概述了特定于硬件的工具,这些工具对于配置鼠标设置(尤其是其按钮)非常有用。对于通用的重新映射工具,请参阅 输入重映射实用程序

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

evdev Xorg.conf 设置

本节介绍如何使用 evdev 设置具有 3 个以上按钮的鼠标。还有其他方法可以实现此目的,但是此处描述的一些注释和工具可能对有其他需求的人有用。某些部分可能有助于使用其他驱动程序使额外的鼠标按钮工作。

我们将使用 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:过时。(在 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

所以我输入以下命令(根据您的具体情况调整事件编号)

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 作为设备选项

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

evdev Xorg - 配置后

Google Chrome 浏览器

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

Opera 浏览器

可用。注意:可以在 Preferences > Advanced > Shortcuts > Mouse set-up 中轻松地将按钮映射到功能。例如,将按钮 8 绑定到后退

  1. 导航到鼠标设置并展开应用程序下拉菜单
  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 在官方仓库中不可用,这里是另一个使用 xte 的示例,它来自 xautomation 软件包

# 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”的行上(当然要先删除旧的那行)。

对于最新的 G5 鼠标(报告为“product 0xc049”),原始 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"