鼠标按键

来自 Arch Linux 中文维基
(重定向自All Mouse Buttons Working

本文存在的问题[编辑 | 编辑源代码]

这篇文章或章节的翻译不反映原文。

原因:使用 AI 翻译,可能有偏差(在 Talk:鼠标按键# 中讨论)

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:格式仍需修正,部分章节不清晰(在Talk:鼠标按键讨论)

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

原因: 截至 2021 年 8 月 - 此页面的许多内容(特别是 evdev Xorg 设置部分)是在几年前编写的,当时 Arch 默认的输入驱动与现在不同。默认输入驱动已经迁移到 libinput,在此期间它经历了显著的开发。直接使用 evdev 仍然是可能的,但有一些需要注意的问题,这些问题在这里有详细的描述。(在 Talk:鼠标按键 中讨论)


配置鼠标加速度[编辑 | 编辑源代码]

在 Xorg 配置中[编辑 | 编辑源代码]

这个页面假设您使用的是 Xorg 而不是 Wayland

您首先想要检查 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 选项来显示要更改的按钮叫什么:

提示:对于 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 "(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(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 进行以下更改。

查找鼠标名称[编辑 | 编辑源代码]

注意: 有时为了获得准确的信息,可能需要在没有加载 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[编辑 | 编辑源代码]

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:需要一些语言改进,并且已签名的编辑肯定需要被移除。下面有些内容似乎已不再相关,见 Template:Out of date 下面。(在Talk:鼠标按键讨论)

现在,我们需要在 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 调整[编辑 | 编辑源代码]

注意: 对于使用 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。这将允许您在需要进行更改时只编辑 ~/.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[编辑 | 编辑源代码]

Mad Catz Mouse

Logitech M560/M545/M546[编辑 | 编辑源代码]

这些鼠标为 Windows 8 设计,具有非传统行为:鼠标显示为鼠标和键盘,一些按钮不发出标准的鼠标按钮事件,而是键盘和鼠标按钮的组合。这阻止了在 Linux 下 "舒适地" 使用此鼠标。

适当的驱动程序允许鼠标像普通鼠标一样使用:

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:应该被打包在 AUR 中(在Talk:鼠标按键讨论)

另见 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"