鼠標按鍵
本文存在的問題[編輯 | 編輯原始碼]
配置鼠標加速度[編輯 | 編輯原始碼]
在 Xorg 配置中[編輯 | 編輯原始碼]
您首先想要檢查 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
選項來顯示要更改的按鈕叫什麼:
/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 /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
進行以下更改。
查找鼠標名稱[編輯 | 編輯原始碼]
首先,我們需要找到鼠標/鼠標的名稱。為此,請執行以下命令:
$ 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
。
Name
也會不同。複製設備的名稱,然後打開 /etc/X11/xorg.conf
。
配置 Xorg[編輯 | 編輯原始碼]
現在,我們需要在 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 調整[編輯 | 編輯原始碼]
對於一些用户來説,更改按鈕代碼的順序可能會更舒適,特別是對於左撇子。根據您使用的環境,按鈕代碼可以通過兩種不同的方式進行配置。如果您使用 .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[編輯 | 編輯原始碼]
Logitech M560/M545/M546[編輯 | 編輯原始碼]
這些鼠標為 Windows 8 設計,具有非傳統行為:鼠標顯示為鼠標和鍵盤,一些按鈕不發出標準的鼠標按鈕事件,而是鍵盤和鼠標按鈕的組合。這阻止了在 Linux 下 "舒適地" 使用此鼠標。
適當的驅動程序允許鼠標像普通鼠標一樣使用:
- 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"