Linux
如何通過鍵盤映射滑鼠按鈕,Linux
我使用 Debian 9(又名“Stretch”)x86_64。
$ uname -a: Linux mypc 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 GNU/Linux
試圖從我的設備 Logitech MU-007 映射我的額外按鈕:
$ lsusb | grep Logitech Bus 001 Device 023: ID 046d:c069 Logitech, Inc. M-U0007 [Corded Mouse M500]
x輸入設備:
$ xinput | grep Logitech ⎜ ↳ Logitech USB Laser Mouse id=10 [slave pointer (2)]
xinput test 10
測試滑鼠左側兩個按鈕的返回 8 和 9的額外按鈕。$ xinput -version xinput version 1.6.2
嘗試了一個簡單的:
xinput set-button-map 10 8 2 3
或者
$ xmodmap -e "pointer = 9 2 3" Warning: Only changing the first 3 of 12 buttons. X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 116 (X_SetPointerMapping) Value in failed request: 0x9 Serial number of failed request: 9 Current serial number in output stream:
左邊的按鈕根本不起作用,不能像左鍵一樣選擇。
我也想保留左鍵點擊和額外的按鈕作為左鍵點擊。
知道為什麼
xinput
命令沒有選擇任何東西嗎?編輯
最後:
id=$(xinput list | grep -oP 'Logitech USB Laser Mouse.*id=\K\d+') xinput set-button-map $id 1 2 3 4 5 6 7 1 1 10 11 12
我找到了更好的解決方案。我可以通過這種方式保留其他解決方案無法實現的數字鍵盤。
我有一個鍵盤鍵可以在滑鼠鍵模式之間切換,這樣,我使用 F1 作為左鍵點擊,F2 作為中鍵點擊,F3 作為右鍵點擊。然後我可以用特殊鍵切換回鍵盤。
特殊鍵觸發此腳本(檢查您的 WM 鍵盤快捷鍵首選項)。
#!/bin/bash if [[ ! -s ~/.button-state ]]; then echo 0 > ~/.button-state fi state=$(<~/.button-state) if ((state==0)); then xkbset m yad --notification xxx & echo 1 > ~/.button-state elif ((state==1)); then xkbset -m pkill -f 'yad --notification xxx echo 0 > ~/.button-state else echo >&2 "weird error" exit 1 fi
啟用滑鼠手勢後,系統托盤中有此圖示:
您假設此命令會將第一個滑鼠按鈕的功能映射到物理按鈕 #8:
xinput set-button-map 10 8 2 3
這個假設是不正確的。實際上,該命令的工作方式完全相反:您實際上將物理按鈕 #1 設置為作為“按鈕 8”的另一個實例發送事件,這實際上使“第一個滑鼠按鈕”操作不可用。
如果你想讓物理按鈕 #8 充當額外的“第一個滑鼠按鈕”,你必須這樣做:
xinput set-button-map 10 1 2 3 4 5 6 7 1 9 10 11 12
預設映射是
1 2 3 4 5 6 7 8 9 10 11 12
,因此如果您希望物理按鈕 #8 與第一個滑鼠按鈕相同,請將8
映射中的數字替換為另一個1
。如果要完全禁用特定按鈕,請使用
0
與該物理按鈕對應的插槽。請注意,按鈕 4 和 5 通常對應於滑鼠滾輪向上/向下操作。