xorg .conf 파일은 지정된 장치뿐만 아니라 모든 장치에 대한 버튼을 다시 매핑합니다.

xorg .conf 파일은 지정된 장치뿐만 아니라 모든 장치에 대한 버튼을 다시 매핑합니다.

측면에 버튼이 있는 스타일러스가 있습니다. 버튼은 가운데 클릭 이벤트를 보내고 오른쪽 클릭 이벤트를 보내길 원합니다.

이것은 내 입력 장치입니다.

$ xinput
⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Mouse          id=9    [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Consumer Control   id=10   [slave  pointer  (2)]
⎜   ↳ Microsoft Surface Keyboard Touchpad       id=11   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E UNKNOWN                    id=12   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Touchscreen                id=14   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Mouse                      id=15   [slave  pointer  (2)]
⎜   ↳ ipts 1B96:005E Pen Pen (0)                id=17   [slave  pointer  (2)]
⎣ Virtual core keyboard                     id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ Video Bus                                 id=6    [slave  keyboard (3)]
    ↳ Surface Pro 3/4 Buttons                   id=7    [slave  keyboard (3)]
    ↳ Microsoft Surface Keyboard Keyboard       id=8    [slave  keyboard (3)]
    ↳ ipts 1B96:005E Pen                        id=13   [slave  keyboard (3)]
    ↳ Microsoft Surface Keyboard Consumer Control   id=16   [slave  keyboard (3)]

다음과 같이 /etc/X11/xorg.conf.d에 .conf 파일을 만들었습니다(또는 /usr/share/X11/xorg.conf.d에 .conf 파일을 만들었고 동일한 문제가 있었습니다).

Section "InputClass"
    Identifier  "ipts 1B96:005E Pen Pen (0)"
    Option  "ButtonMapping" "1 3 2 4 5 6 7"
EndSection

문제는 내 .conf 파일이 터치패드와 스타일러스를 다시 매핑한다는 것입니다. "ipts 1B96:005E Pen"을 식별자로 사용해도 동일한 문제가 있습니다.

xinput을 직접 사용하고 "xinput set-button-map "ipts 1B96:005E Pen Pen (0)" 1 3 2 4 5 6 7"이 작동하지만 중단 등에서 살아남을 수는 없습니다.

이 구성을 수정하는 가장 좋은 방법은 무엇입니까?

답변1

에서 언급했듯이xorg.conf 매뉴얼 페이지, 여기에서 설정한 옵션(이 경우 ButtonMapping)을 대상 장치로 제한하려면 InputClass 섹션에서 하나 이상의 Match 매개변수를 사용해야 합니다. 이러한 매개변수는 다음과 같습니다.

  • 일치하는 제품
  • 공급업체 일치
  • 장치 경로 일치
  • PnPID 일치
  • USBID 일치
  • 게임은 ...(이렇게 하려면 전체 장치 유형이 필요하며 부울 값만 허용됩니다. 아래 예를 참조하세요.)

참고: MatchUSBID 매개변수에서 발생하는 일반적인 장애물은 해당 매개변수 내에서 발견된 16진수 문자의 경우와 관련이 있습니다. 명령에서 ID를 얻으면 lsusb소문자를 포함하는 출력만 생성하므로 괜찮습니다. 그러나 예제에서 완벽하게 설명된 것처럼 다른 명령(예: xinput대문자로 16진수 문자열 출력)은 작동하지 않습니다. 위에 링크된 매뉴얼 페이지를 인용하면 다음과 같습니다.

ID는 ":"으로 구분된 소문자 16진수로 구성됩니다.


질문에 제공한 명령 출력에서 ​​이러한 일치 조건을 사용하여 문제를 해결하기 위해 InputClass 섹션을 구성할 수 있습니다. 하지만 다른 하위 집합을 시도하고 궁극적으로 가장 작은 숫자를 사용하여 원하는 동작을 생성하는 것을 사용하는 것이 좋습니다. . 하위 집합 일치 항목(단순성을 위해, 그러나 더 중요한 것은 이식성을 위해).

Section "InputClass"
  Identifier     "Surface Pen"
  MatchProduct   "Pen Pen (0)"
  MatchVendor    "ipts"
  MatchUSBID     "1b96:005e"
  MatchIsPointer "true"
  Option         "ButtonMapping" "1 3 2 4 5 6 7"
EndSection

관련 정보