鼠标按键 - Arch Linux 中文维基

跳转到内容

# 鼠标按键

来自 Arch Linux 中文维基

相关文章

- 鼠标加速度
- 鼠标轮询率

翻译状态：

- 本文（或部分内容）译自 Mouse buttons，最近一次同步于 2024-06-07，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

## 本文存在的问题

这篇文章或章节的翻译质量不佳。

原因：使用 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` 不会。另一个解决方案是将其添加到您的 `~/.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

Mad Catz Mouse

### Logitech M560/M545/M546

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

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

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

原因：应该被打包在 AUR 中（在Talk:鼠标按键讨论）

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

分类：​

- 鼠标
- X 服务器
- 使用“模板:风格”标记的页面或章节

隐藏分类：​

- 使用“模板:糟糕的翻译”标记的页面或章节
- 使用“模板:准确性”标记的页面或章节

鼠标按键
添加话题