답변:
9 개의 버튼이있는 Logitech 마우스가 있는데 "중간 버튼"(# 2)을 누르면 스크롤 휠을 클릭합니다. 나는 어색하고 일반적으로 바퀴를 클릭하려고 할 때 나는 창을 스크롤하기 때문에 이것을 싫어합니다. 그래서 상단 버튼 (이 경우 # 9)을 중간 버튼 (# 2)에 자동으로 다시 매핑하고 싶었습니다. 또한 왼쪽 버튼 (# 1)을 두 번 클릭 할 수 있도록 아래쪽 버튼 (# 8)을 매핑하고 싶었습니다.
내 목표는 구체적이지만 아래 솔루션은 시작할 때 마우스 버튼을 자동으로 다시 매핑하려는 모든 상황으로 일반화 될 수 있습니다.
xinput
이 작업을 설치 해야합니다 . 이것은 전적으로 .xsessionrc
파일 에서 수행 할 수 있습니다 . 먼저, xinput
마우스에 지정된 이름을 찾은 다음이를 사용하여 입력 장치 ID와 상관시킵니다. 아래는 내 랩탑에서 출력 된 샘플입니다.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB Laser Mouse id=11 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
마우스가 스스로 호출 Logitech USB Laser Mouse
하고로 표시됩니다 id=11
. 마우스의 이름이 다릅니다. 독자를위한 연습으로 남겨둔다는 것을 알았습니다.
이 세션 에서 장치의 ID를 여전히 알고있는 동안을 사용하여 입력 핸들러가 마우스에있는 버튼 수를 확인하십시오 . 장치에 표시되는 버튼 수와 다를 수 있습니다.xinput list
deviceID
Logitech USB Laser Mouse id=11 [slave pointer (2)]
Reporting 7 classes:
Class originated from: 11. Type: XIButtonClass
Buttons supported: 16
Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" "Button Task" "Button Unknown" "Button Unknown" "Button Unknown" "Button Unknown"
내 마우스에는 9 개의 명백한 물리적 버튼이 있지만 xinput
16은보고됩니다.
USB의 특성상이 ID는 다시 시작할 때마다 변경 될 수 있으므로 한 번 발견 한 ID에 정적으로 입력 된 것을 스크립팅하는 것만으로는 충분하지 않습니다. 시작시이를 동적으로 구문 분석하고 현재 ID를 기반으로 다시 매핑을 실행해야합니다.
이제 이름을 알았 xinput test
으므로 다시 매핑 할 키를 알아낼 수 있습니다 . 색인을 가져 오려면 맵핑하려는 마우스 단추를 누르십시오. 참고로 1, 2 및 3 "항상"(즉, 일반적으로)은 3 버튼 마우스의 왼쪽, 가운데 및 오른쪽 버튼을 나타냅니다. 공통 재 맵핑은 마우스를 왼손잡이로 만듭니다. )
button press 2
button release 2
button press 9
button release 9
이 경우 버튼 # 9 (측면, 상단)를 버튼 # 2 (중간)에 매핑하려고합니다.
마우스가 무엇인지, 어떤 버튼을 변경하고자하는지 알았 ~/.xsessionrc
으므로 xinput
시작시 버튼 다시 매핑을 실행 하는 스크립트를 작성할 수 있습니다 . 아래는 내 완전한 스크립트입니다.
# Map button 9 (top side button) to button 2 (middle button)
my_mouse_id=$(xinput | grep "Logitech USB Laser Mouse" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
여기서 첫 번째 줄은에서보고 한대로 마우스의 ID와 동일한 임시 세션 변수를 설정합니다 xinput
. 이것은에 의해 수행 grep
에서 보고서에서 마우스의 알려진 이름을 보내고 xinput
다음 사용하여, sed
그에서 ID 번호 추출 id=xxx
보고서에 토큰을. 그런 다음이 값은 xinput set-button-map
지시문 에서 사용되어 다시 매핑을 실행합니다. 위의 예에서 유일한 변경 사항은 버튼 # 9가 버튼 # 2를 모방하도록 다시 매핑되고 있다는 것입니다. 다른 모든 설정은 기본 설정으로 유지됩니다.
업데이트 : @Lokasenna가 아래에 지적한 것처럼 장치 자체가 마우스와 키보드로보고되면 grep
사용 결과를 제한해야 할 수도 있습니다 -m 1
.
이 답변 도 참조하십시오 .
당신이 필요합니다 xinput
, xbindkeys
그리고 xautomation
(포함 xte
)이 작업을 위해 설치.
xinput list
및 xinput test
을 사용 하여 마우스의 장치 ID와 할당하려는 버튼 번호를 찾으십시오. 필자의 경우 하단 버튼 (# 8)을 왼쪽 버튼 (# 1)을 두 번 클릭하여 매핑하려고했습니다.
작성 또는 편집하십시오 ~/.xbindkeysrc
. 이 파일의 형식은 일련의 짝을 이루는 줄입니다. 첫 번째 줄은 이벤트에 대해 실행되는 명령입니다. 두 번째 줄은 이벤트 설명입니다. 의 xte
구성 요소를 사용하여 xautomation
이벤트를 입력 핸들러로 직접 보냅니다.
버튼을 놓을 때 더블 클릭 이벤트를 만들려면 다음을 추가했습니다.
"/usr/bin/xte 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
이 구성은 버튼 # 1에서 두 번의 마우스 클릭 순서를 버튼 # 8의 릴리스로 매핑합니다. (이론적으로 모든 명령을 마우스 버튼에 매핑 할 수 있다고 생각 하지만 가장 일반적인 경우입니다. 다른 실제 예는 이 답변 을 참조하십시오 .)
시스템에 여러 개의 마우스가 연결된 사용자의 경우 장치의 ID도 전달해야합니다. 이것은 모든 사용자에게 적용되지 않을 수 있으며 Unity와 함께 Ubuntu 16.04에서 발견되었습니다.
xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Kensington Kensington Expert Mouse id=9 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=13 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=14 [slave pointer (2)]
그런 다음 명령 출력 (이 예에서는 id = 9)에서 id = 값을 참조하여 .xbindkeysrc 파일을 수정하십시오.
"/usr/bin/xte -i 9 'mouseclick 1' 'mouseclick 1' &"
b:8 + Release
awk
진술을 귀하의 sed
진술 로 대체했습니다 . 개선 주셔서 감사합니다!
xinput set-button-map "Logitech Trackball" 1 3 3
xinput
과 같이 마우스를 두 번 표시합니다 : ↳ USB OPTICAL MOUSE id = 12 [슬레이브 포인터 (2)] ↳ USB OPTICAL MOUSE id = 13 [슬레이브 포인터 (2)] ID 13 만 명령을 사용 xinput test
합니다. 스크립트는 항상 첫 번째 ID를 포착합니다. 그런데 왜 어쨌든 두 번입니까? 이 마우스를 분리하면 사라지고 연결되면 다시 나타납니다.
이를위한 짧은 단계는 다음과 같습니다.
라는 유틸리티가 xinput
있습니다. xinput list
또는 xinput
모든 X 입력 장치와 해당 ID를 표시합니다. 여기에 다시 매핑하려는 마우스의 ID가 있습니다.
설정에서 21로 ID를 예로 사용하고 xinput --get-button-map 21
출력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
예를 들어 왼쪽 및 오른쪽 버튼을 바꾸려면 간단히 실행하십시오.
xinput --set-button-map 21 3 2 1
여기서 우리는 다시 매핑이 완료되었습니다.
시작할 때 실행하려면 파일에 넣으십시오.
echo "xinput --set-button-map 21 3 2 1" > leftmouseremap.sh
실행 권한을 부여하십시오
chmod +x leftmouseremap.sh
마지막으로 이것을 GUI에서 Statrtup Application에 수동으로 추가하거나 CLI에서 원하는 경우 아래 텍스트를 경로로 변경 ~/.config/autostart
하십시오 less .config/autostart/leftmouseremap.sh.desktop
.
[Desktop Entry]
Type=Application
Exec=/home/ruslan/leftmouseremap.sh
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name[en_US]=/home/ruslan/leftmouseremap.sh
Name=/home/ruslan/leftmouseremap.sh
Comment[en_US]=
Comment=
KDE의 경로는 다음과 같습니다 ~/.kde/Autosart
. 다른 데스크톱 관리자의 경우이 방법이 크게 다를 수 있습니다. 또는을 사용하여 일반적인 접근 방식으로 시작 실행을 수행 할 수 있습니다 /etc/rc.local
.
대역폭이 0 인 위대한 답변을 사용 하는 경우 Logitech의 MX Ergo와 같은 일부 장치는 포인터 및 키보드 장치로 표시됩니다.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech MX Ergo id=10 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=14 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
...
↳ Logitech MX Ergo id=15 [slave keyboard (3)]
결과적 grep "Logitech MX Ergo"
으로 두 값을 반환합니다. 후자는 매핑 문자열의 첫 번째 항목으로 포함되어 모든 마우스 버튼을 조입니다.
수정은 쉽습니다-그냥 grep
최대 개수 인수를 사용하십시오 -m 1
.
my_mouse_id=$(xinput | grep -m 1 "Logitech MX Ergo" | sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/')
echo $my_mouse_id > ~/temp/my_mouse_id
xinput --set-button-map $my_mouse_id 1 2 3 4 5 6 7 8 2 10 11 12 13 14 15 16
Ubuntu Software Center에서 다운로드 한 Easystroke Gesture Recognition을 사용하여 Logitech 마우스의 중간 버튼 매핑을 'Return'으로 변경할 수있었습니다. 편집 : 응용 프로그램에서 작업 추가, 이름 지정, 키 유형을 선택하고 세부 정보를 클릭 한 다음 Enter 키를 누르고 기록 스트로크를 누르고 프롬프트 중에 가운데 버튼을 누릅니다.
xinput
때 표시되지 않는 버튼 으로 사용하고 싶을 때 도움이됩니다 xinput list <devID>
.
12.04 이전에는 표준 저장소에 "btnx"라는 쉬운 그래픽 도구가 있었으며 시스템 구성에서 "버튼 속성"으로 추가되었습니다. 슬프게도 그러나 그것은 떨어졌다. 는 "신뢰할 수없는이"PPA 현재 14.04, 16.04 및 18.04 유지가 여기에 있습니다 : https://launchpad.net/~oliverstar/+archive/ubuntu/ppa (에서 발견 https://launchpad.net/ubuntu/xenial/+source / btnx )
시스템 설정과 통합되지 않지만 저렴한 5 버튼 마우스로 랩톱에서 잘 작동합니다. 키 입력 및 명령으로 다시 매핑 할 수 있으며 구성은 다른 방법보다 훨씬 간단합니다!
HP elitebook 2570p, Ubuntu 18.04.2가 있습니다. 여기에는 나에게 쓸모없는 트랙 포인트가 있으며 여기에는 공간 아래에 쓸모없는 트랙 포인트 버튼이 2 개 있습니다
터치 패드 아래에 있기 때문에이 키를 사용하지 않습니다. 이 버튼을 left = back_button (Alt_L + Left), 오른쪽 버튼 = middle_mouse_button으로 다시 매핑하고 싶습니다. "xinput"의 트랙 포인트는 id = 11이고 왼쪽 버튼은 1, 오른쪽은 3입니다.
누군가 터미널에 복사하기 위해 올바른 코드를 작성할 수 있습니까? xbindkeysrc와 결합했지만 모든 작업을 (트랙 포인트 및 터치 패드) 버튼으로 설정합니다.
sed 's/^.*id=\([0-9]*\)[ \t].*$/\1/'