현재 Razer Naga의 측면 버튼을 매핑하는 데 문제가 있습니다. 저는 Elementary OS를 실행하고 있지만 제가 아는 한 Ubuntu이고 이것이 저에게도 매우 잘 작동한다는 점을 추가해야 합니다.
Naga 측면에는 현재 1-12로 매핑된 12개의 버튼이 있습니다. 이를 숫자 키패드 매핑(마우스 자체의 물리적 스위치를 통해 구성 가능)으로 변경하는 옵션이 있어 문제가 해결되었지만 실수로 오른쪽 클릭이 60% 실패했습니다.
또한 완전히 다른 두 대의 컴퓨터에서 동일한 물리적 마우스를 사용하여 동일한 상황에 직면했다는 점도 언급하고 싶습니다.
나의 최종 목표는 최소한 3개의 버튼(1-3)을 다른 버튼(논의를 위해 F1, F2, F3이라고 가정해 보겠습니다)에 바인딩하는 것입니다.
나는 지금까지 많은 인터넷 검색을 해왔지만 내가 발견한 주요 차이점 중 하나는 xinput
다른 사람들이 이 문제를 해결했을 때 내 결과의 차이였습니다.
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]
⎜ ↳ Razer Razer Naga id=14 [slave pointer (2)]
⎜ ↳ Razer Razer Naga id=13 [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)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Power Button id=8 [slave keyboard (3)]
↳ Lenovo EasyCamera id=9 [slave keyboard (3)]
↳ Ideapad extra buttons id=10 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=11 [slave keyboard (3)]
다른 사람들의 출력에서 포인터 섹션에 "Razer Naga"가 있고 키보드 섹션에 하나가 있는 것을 발견했습니다. 내 글에서 볼 수 있듯이 포인터 섹션에는 두 개만 나열되어 있습니다.
다른 해결 방법에서는 키보드 입력용 키맵을 대체하는 스크립트를 실행하는 것이 좋습니다. 제 생각에는 이 방법이 적합하지 않을 것 같습니다.
xev
버튼 중 하나를 눌렀을 때 어떤 일이 일어나는지 보여주기 위해 를 사용해 보았지만 실제로는 도움이 되지 않았습니다. 다음은 마우스 왼쪽 버튼을 클릭하는 예입니다.
ButtonRelease event, serial 37, synthetic NO, window 0x3a00001,
root 0x9d, subw 0x3a00002, time 16486037, (24,50), root:(618,357),
state 0x100, button 1, same_screen YES
이제 측면에 신비한 "1" 버튼이 있습니다.
KeyPress event, serial 37, synthetic NO, window 0x3a00001,
root 0x9d, subw 0x3a00002, time 16536943, (31,58), root:(625,365),
state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES,
XLookupString gives 1 bytes: (31) "1"
XmbLookupString gives 1 bytes: (31) "1"
XFilterEvent returns: False
KeyRelease event, serial 37, synthetic NO, window 0x3a00001,
root 0x9d, subw 0x3a00002, time 16537199, (31,58), root:(625,365),
state 0x0, keycode 10 (keysym 0x31, 1), same_screen YES,
XLookupString gives 1 bytes: (31) "1"
XFilterEvent returns: False
이 시점에서는 어디에서 진행해야 할지 잘 모르겠습니다(xinput에 나열된 두 장치 중 어느 장치가 버튼에 매핑되어 있는지조차 모릅니다). 따라서 조언이나 조언을 주시면 감사하겠습니다!
답변1
상황을 완전히 이해하지는 못했지만(잘 설명하지 않았다는 것은 아니지만) Naga 매핑에 문제가 발생했고 온라인에서 해결책을 찾지 못한 후 시도해 보기로 결정했습니다. 일하고 있는.
문제는 시스템이 장치를 키보드가 아닌 포인터로 표시하더라도 내 솔루션이 효과가 있을 수 있다는 것입니다. 한번 해보고 알려주세요!
내 솔루션이 최고는 아닐 수도 있지만 나에게는 효과적입니다. 저는 C++로 작은 데몬을 작성하여 다운로드하고 설치할 수 있는 github 저장소에 넣었습니다.여기
아이디어는 다음 세 단계를 달성하는 것입니다.
다음 명령을 사용하여 버튼이 "아무 작업도 수행하지 않도록" 장치를 음소거합니다.
$xinput set-int-prop <id> "Device Enabled" 8 0
xinput에서 키보드 ID는 어디에 표시됩니까? (귀하의 경우에는 13일 수도 있습니다.)
버튼 누름에 의해 트리거되는 이벤트를 캡처합니다. 이벤트 장치 노드에서 원시 입력을 가져와서 이 작업을 수행합니다. C++, 일부 sys linux 라이브러리 및 input.h를 사용합니다. Google에서 이 작업을 수행하는 방법을 볼 수 있습니다(링크를 두 개 이상 게시할 수 없지만 reddit 링크에는 이에 대해 설명하는 페이지의 링크가 있습니다). 이 접근 방식의 좋은 점은 xinput이 보는 한 모든 장치에서 데이터를 캡처할 수 있다는 것입니다(xinput에 버튼이 있고 xinput에 제가 믿는 ID가 있는 한 xinput이 포인터라고 생각하는지 여부는 중요하지 않습니다). 기능은 작동하지만 그것에 대해 내 말을 인용하지 마십시오).
C++ system() 호출과 xdotool(공식 우분투 저장소에서 설치할 수 있음)을 사용하여 키 누르기를 시뮬레이션합니다(system() 호출을 사용하면 모든 종류의 시스템 유틸리티 또는 사용자 정의 스크립트를 실행할 수 있습니다). 자세한 내용은 xdotool 맨페이지를 참조하세요. 하지만 가장 좋은 점은 xdotool 및 "--window getactivewindow"를 사용하면 현재 초점이 맞춰진 창에서 시뮬레이션된 키 누르기가 발생한다는 것입니다!
추가 설명은 다음과 같습니다. http://www.reddit.com/r/razer/comments/37yc3y/tutorial_remapping_naga_side_keyboard_numpad_in/
제가 수행한 모든 작업에 대한 정보가 포함되어 있는 github 저장소를 확인해 보시기 바랍니다. 그리고 소스 코드(100줄 정도)는 다른 장치나 상황에 쉽게 추론됩니다. Naga와 Ubuntu가 있는 경우 설치 프로그램을 사용하면 모든 것이 자동으로 설정됩니다.
질문한 사람에게 행운이 있기를 바라며, "nagastart.sh" 파일에 키보드 장치의 ID를 수동으로 지정하면 이 작업이 수행됩니다. 한 줄만 바꾸면 됩니다. (현재 스크립트는 키보드 장치에서 Naga를 검색합니다.)
이것이 충분한 정보였기를 바랍니다. 그렇지 않다면 제가 할 수 있는 모든 것을 기꺼이 설명해 드리겠습니다. (그건 많지 않아요)
그런데, 아주 안전한 방법은 아니므로 잘못된 장치 ID로 설치하면 예상치 못한 동작이 발생합니다(예: 키보드 ID=13이고 ID=14를 입력하면 마우스 클릭이 이상한 동작을 하게 됩니다). 하지만 그러지 마세요. 걱정하다. 터미널을 열고 모든 나가를 죽이십시오. 모든 변경 사항을 제거하려면 실행하십시오.
$sudo rm /usr/local/bin/naga ~/.config/autostart/naga.desktop /usr/local/bin/nagastart.sh
행운을 빌어요!