키보드, 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

답변1

이 명령이 첫 번째 마우스 버튼의 기능을 물리적 버튼 #8에 매핑한다고 가정합니다.

xinput set-button-map 10 8 2 3

이 가정은 올바르지 않습니다. 실제로 이 명령은 정반대로 작동합니다. 실제로 이벤트를 "버튼 8"의 다른 인스턴스로 전송하도록 물리적 버튼 #1을 설정하면 "첫 번째 마우스 버튼" 동작을 효과적으로 사용할 수 없게 됩니다.

물리적 버튼 #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는 일반적으로 마우스 휠 위/아래 작업에 해당합니다.

답변2

더 나은 해결책을 찾았습니다.숫자패드는 이렇게 보관할 수 있어요다른 솔루션으로는 불가능합니다.

전환할 수 있는 키보드 키가 있습니다.마우스 버튼 모드, 이런 식으로 왼쪽 클릭에는 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

마우스 제스처가 활성화되면 시스템 트레이에 다음 아이콘이 나타납니다.

여기에 이미지 설명을 입력하세요.

관련 정보