Linux

如何通過鍵盤映射滑鼠按鈕,Linux

  • March 7, 2020

我使用 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 通常對應於滑鼠滾輪向上/向下操作。

引用自:https://unix.stackexchange.com/questions/496515