滑鼠按鍵 - 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 伺服器
- 使用「模板:風格」標記的頁面或章節

隱藏分類：​

- 使用「模板:糟糕的翻譯」標記的頁面或章節
- 使用「模板:準確性」標記的頁面或章節

滑鼠按鍵
新增話題