저는 10버튼 마우스(Logitech M705)를 사용합니다. X11에서는 etc/X11/xorg.conf.d
.
Wayland에서는 더 이상 작동하지 않습니다. 내 조사에 따르면 내가 뭔가를 해야 한다는 사실이 밝혀졌습니다 libinput
. 흔한 질문일 줄 알았는데 어디서도 답을 찾을 수가 없네요.
누군가 마우스 버튼을 다시 매핑하는 방법이나 이 작업을 수행할 수 없는 이유를 설명할 수 있습니까?
답변1
나는 이틀 동안 인터넷 검색을 하고, 내가 찾은 수십 가지 방법을 테스트하고, Wayland에서 마우스 버튼을 다시 매핑하는 데 어려움을 겪었습니다...
그래서 제가 배운 것을 공유합니다:
Logitech M570 트랙볼에는 2개의 추가 버튼이 있습니다. libinput에서 BTN_SIDE 및 BTN_EXTRA를 생성합니다.
[root@centos8 ~]# libinput debug-events --device /dev/input/event21
-event21 DEVICE_ADDED Logitech M570
seat0 default group1 cap:p left scroll-nat scroll-button
event21 POINTER_BUTTON +16.93s BTN_EXTRA (276) pressed, seat count: 1
event21 POINTER_BUTTON +17.09s BTN_EXTRA (276) released, seat count: 0
event21 POINTER_BUTTON +17.89s BTN_SIDE (275) pressed, seat count: 1
event21 POINTER_BUTTON +17.99s BTN_SIDE (275) released, seat count: 0
evtest를 사용하여 확인할 수 있으며 버튼 스캔 코드도 표시됩니다.
[root@centos8 ~]# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event21: Logitech M570
Select the device event number [0-21]: 21
Event: time 1589974995.415405, -------------- SYN_REPORT ------------
Event: time 1589974996.969613, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1589974996.969613, type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
Event: time 1589975000.165574, -------------- SYN_REPORT ------------
Event: time 1589975000.611570, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
Event: time 1589975000.611570, type 1 (EV_KEY), code 276 (BTN_EXTRA), value 1
Event: time 1589975002.369616, -------------- SYN_REPORT ------------
이제 스캔 코드를 원하는 버튼에 다시 매핑하기 위해 udev hwdb에 대한 규칙 파일을 만듭니다 /etc/udev/hwdb.d/70-mouse-remap.hwdb
. 예를 들면 다음과 같습니다.
# remap buttons on Logitech M570 trackball
evdev:name:Logitech M570:*
ID_INPUT_KEY=1
KEYBOARD_KEY_90004=btn_middle
KEYBOARD_KEY_90005=btn_middle
응, 그 버튼은진짜키보드 키 스캔 코드를 마우스 가운데 버튼에 다시 매핑합니다. 너무 일반적인 장치 식별자는 evdev:input:*
다른 장치를 방해할 수 있으므로 사용하지 마십시오. 예를 들어 내 Thinkpad T490에서는 마이크 음소거 버튼(Fn+F4)이 작동하지 않습니다.
파일을 저장하고 hwdb를 다시 검색하세요.
[root@centos8 ~]# systemd-hwdb update
또한 변경 사항을 확인하려면 USB에서 마우스(이 경우 무선 수신기)를 물리적으로 분리해야 했습니다. 다시 연결하고 규칙이 적용되었는지 확인하세요.
[root@centos8 ~]# udevadm info /dev/input/event21
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.4/1-4.4:1.2/0003:046D:C52B.0097/0003:046D:1028.0098/input/input84/event21
...
E: KEYBOARD_KEY_90004=btn_middle
E: KEYBOARD_KEY_90005=btn_middle
이제 libinput을 다시 테스트할 수 있으며 BTN_MIDDLE 이벤트를 생성하는 두 버튼이 모두 표시되어야 합니다.
[root@centos8 ~]# libinput debug-events --device /dev/input/event21
-event21 DEVICE_ADDED Logitech M570 seat0 default group1 cap:kp left scroll-nat scroll-button
event21 POINTER_BUTTON +1.45s BTN_MIDDLE (274) pressed, seat count: 1
event21 POINTER_BUTTON +1.59s BTN_MIDDLE (274) released, seat count: 0
event21 POINTER_BUTTON +2.20s BTN_MIDDLE (274) pressed, seat count: 1
event21 POINTER_BUTTON +2.28s BTN_MIDDLE (274) released, seat count: 0
모든 것이 제대로 작동하면 gnome-terminal과 같은 Wayland 기본 애플리케이션에 두 개의 추가 버튼을 붙여 넣을 수 있습니다.
즐기다.
답변2
이제 이를 수행하는 그래픽 방법이 있습니다. 모든 명령줄 솔루션이 손상될 것입니다. 내가 찾은 GUI 프로그램은 Key Mapper라고 하며 X11 및 Wayland에서 작동합니다. 루트 권한을 사용하고 모든 문제를 해결합니다.
- 설치 프로그램(예: deb 패키지)풀어 주다GitHub의 페이지(또는 아래 기사에서 언급한 것처럼 아치 기반 배포판을 위한 AUR 패키지도 있거나 pip를 사용할 수 있음)
- 키매퍼 열기
- 원하는 마우스를 선택하세요.
- "여기를 클릭하세요"를 클릭하세요
- 변경하려는 버튼을 클릭합니다. "키 누르기"가 멈춘 경우 먼저 하단 팝업의 지침에 따라 "기본값 복원"을 수행하십시오. 이전에 매핑된 변경 사항이 적용되며 "기본값 복원" 버튼은 삭제되지 않습니다. 그들을) .
- 버튼이 승인되면 버튼 이름이 왼쪽 열에 표시됩니다. 그런 다음 오른쪽 열을 클릭하고 버튼으로 수행할 작업을 입력하기 시작할 수 있습니다. 예를 들어, 이전 단계에서 클릭한 Logitech Marble 마우스 측면 버튼을 중간 클릭으로 지정하려면 "middle"을 입력한 다음 "BTN_MIDDLE"을 선택합니다.
- "적용"을 클릭하면 즉시 적용됩니다!
나는 이것을 검색하여 찾았습니다: 마우스 버튼 매핑 gui ubuntu
내가 찾은 기사에는 이에 대한 자세한 내용이 설명되어 있습니다.새로운 키매퍼 GUI(X11 및 Wayland 지원)를 사용하여 Linux에서 키보드 및 마우스 버튼을 다시 매핑합니다.2021년 2월 23일 Linux 반란에 대하여
답변3
Wayland를 실행하는 경우 다음과 같이 버튼을 다시 매핑할 수 있습니다.
xev | grep button
마우스 클릭 이벤트를 기록하고 창을 클릭하여 이벤트 수를 얻으려면 실행하세요 . 내 경우에는 가운데 버튼은 다음과 같습니다.state 0x10, button 2, same_screen YES
나는 그것을 다음에 매핑하고 싶습니다 :
state 0x10, button 13, same_screen YES
그런 다음 실행하여
xinput --list
포인팅 장치를 찾으십시오. 내 것은 다음과 같습니다.Logitech Performance MX id=9 [slave pointer (2)]
xinput get-button-map 9
반품:1 2 3 4 ... 20
xinput은 버튼 매핑을 설정합니다.
$ xinput set-button-map 9 1 13 3 4 .. 12 2 14 .. 20
노트:번호를 9
반환된 번호로 바꿉니다.id=
해당 키의 동작이 정의되면 이벤트가 매핑됩니다. 그렇지 않다면 문제가 조금 다릅니다. Wayland TBH에서는 이벤트에 대해 명령을 실행하는 방법을 찾지 못했고(Xorg에서는 매우 쉽습니다 xbindkeys
) 키 누르기 및 마우스 이벤트 동작을 완전히 사용자 정의했습니다. 나는 Wayland가 더 많은 노력을 하고 있다고 믿습니다.안전한이 동작을 비활성화합니다.
그럼에도 불구하고 여전히 Xorg로 쉽게 전환하고 그 기능을 즐길 수 있는 기회가 있습니다.
답변4
hwdb udev 규칙을 수정해 보세요. 이렇게 하면 마우스 버튼이 키보드 키(예: Launch8/F16)로 등록되고 모든 프로그램, wayland 또는 기타 프로그램의 기능이 비활성화됩니다.
# /usr/lib/udev/hwdb.d/71-mouse-local.hwdb
evdev:input:*
KEYBOARD_KEY_90004=key_f16
KEYBOARD_KEY_90005=key_f17
그런 다음 마우스를 루트로 연결 해제했다 systemd-hwdb update; udevadm trigger
가 다시 연결하십시오.
추가 온전성 검사: sudo udevadm info /dev/input/by-path/*-usb-*-mouse | grep -A3 -P3 KEYBOARD_KEY
또는 이와 같이 쿼리합니다. systemd-hwdb query "evdev:input:v046dp406a*
ID 추출에 대한 자세한 내용은 소스 코드를 참조하세요.
원천:https://yulistic.gitlab.io/2017/12/linux-keymapping-with-udev-hwdb/