鼠標按鍵

出自 Arch Linux 中文维基

本文存在的問題[編輯 | 編輯原始碼]

這篇文章或章節的翻譯不反映原文。

原因:使用 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"