Linux(특히 Wayland)에서 XP-Pen 그리기 태블릿 구성

Linux(특히 Wayland)에서 XP-Pen 그리기 태블릿 구성

XP-Pen Deco mini 7 그리기 태블릿을 구입했습니다. 포인터와 압력은 기본적으로 작동하지만 왼손잡이 모드로 회전하여 키보드와 스타일러스 버튼의 동작을 변경하고 싶습니다.

나는 그것을 사용하고 있다그네Archlinux의 Wayland 신디사이저.

답변1

머리말

공식 리눅스 "드라이버"가 있습니다XP-Pen 웹사이트에서(반품오르바우). 내가 아는 한, DE를 통해 자동 시작되고 USB를 통해 태블릿과 상호 작용하는 사용자 공간 애플리케이션(X11 전용 Qt5에 연결됨)입니다. 일반 사용자가 XP-Pen USB 장치에 쓸 수 있도록 허용하는 udev 규칙이 제공됩니다.

strace모든 USB 장치( )를 시도했지만 /dev/bus/usb/*/*결국 내 태블릿을 찾을 수 없다고 표시됩니다. 어쩌면 당신에게 더 나은 행운이 찾아올 수도 있어요

태블릿 이벤트 처리 개요

                                         +————————————————+
                                         |                |
                                         |  Wayland       |
                                         |  compositor    |
                                         |                |
+——————————+  event  +—————————+  event  +——————————————+ |  event  +———————+
|  Tablet  |————————>|  Linux  |————————>|   libinput   | |————————>|  app  |
+——————————+         +—————————+         |              | |         +———————+
                                         | +——————————+ | |
                                         | | libwacom | | |
                                         +—+——————————+—+—+

Wayland 합성기(Sway, Mutter, KWin에서 Qt로) 사용라이브러리 입력입력 장치 및 해당 이벤트를 처리합니다. 이는 차례로 사용됩니다libwacom태블릿에 대한 하드웨어 정보(버튼 수, 코드, 스타일러스에 "고무" 팁이 있는지 여부 등)

라이브러리 입력다음을 통해 X11과 함께 사용할 수 있습니다.xf86-입력-libinput따라서 다음 단계는 Wayland에만 국한되지 않습니다.

왼손 모드

만약에libwacom보고서에 따르면 태블릿은 '가역적'입니다.라이브러리 입력포인터 이벤트를 왼쪽 모드로 변환하도록 구성할 수 있습니다.

원래libwacom알려진 그래픽 태블릿의 데이터베이스로 각각 .tablet파일에 설명되어 있습니다(참조:전체 목록환매 계약에서).

다음과 같은 경우 확인할 수 있습니다.libwacom태블릿에 대해 알아보세요:

$ libwacom-list-local-devices
/dev/input/event19 is a tablet but not supported by libwacom
Failed to find any devices known to libwacom.

.tablet그렇지 않은 경우 직접 만들어야 합니다 . XP-Pen Deco mini 7의 경우 다음 파일을 다음 위치에 만들었습니다 /usr/share/libwacom/xp-pen-deco-mini-7.tablet.

# XP-Pen
# Deco mini7
#

[Device]
Name=XP-Pen Deco mini7
ModelName=
DeviceMatch=usb:28bd:0928
Class=Bamboo
Width=7
Height=4.37
Styli=0xffffd;

[Features]
Stylus=true
Reversible=true
Touch=false
Buttons=0

가장 중요한 것은 두 가지 옵션입니다.

  • DeviceMatch태블릿이 인식되고 포맷되는 방식을 지정합니다 BUS:VENDOR_ID:MODEL_ID. 다음을 통해 값을 찾을 수 있습니다 udevadm.
$ udevadm info /dev/input/event19
...
E: ID_VENDOR_ID=28bd
...
E: ID_MODEL_ID=0928
...
E: ID_BUS=usb
  • Reversible태블릿을 왼손잡이 모드로 사용할 수 있음을 나타냅니다.

(다른 옵션에 대한 자세한 내용과 설명은 다음에서 확인할 수 있습니다.저장소의 예)

libwacom이 이제 태블릿을 인식하는지 확인합니다.

$ libwacom-list-local-devices
devices:
- name: 'XP-Pen Deco mini7'
  bus: 'usb'
  vid: '0x28bd'
  pid: '0x0928'
  nodes:
  - /dev/input/event19

이제 구성할 수 있습니다라이브러리 입력신디사이저를 통해. Sway의 경우 구성에 추가하세요.

input type:tablet_tool left_handed enabled

~을 위한난쟁이그리고케이드시스템 설정 GUI를 사용할 수 있습니다.

노트구성을 적용하려면 태블릿을 다시 삽입해야 할 수도 있습니다.

키보드 및 스타일러스 버튼 매핑

XP-Pen은 키보드 버튼 이벤트를 별도의 키보드 장치로 보냅니다. 다음 명령을 사용하여 볼 수 있습니다 evtest(버튼은 여기에 매핑됨).

$ sudo evtest /dev/input/event18
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x28bd product 0x928 version 0x100
Input device name: "UGTABLET 6 inch PenTablet Keyboard"
Supported events:
...
Testing ... (interrupt to exit)
Event: time 1648039909.676558, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039909.676558, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1648039909.676558, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1648039909.676558, type 1 (EV_KEY), code 44 (KEY_Z), value 1
Event: time 1648039909.676558, -------------- SYN_REPORT ------------
^Z
[1]+  Stopped                 sudo evtest /dev/input/event18
$ fg
sudo evtest /dev/input/event18
Event: time 1648039909.764562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039909.764562, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1648039909.764562, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1648039909.764562, type 1 (EV_KEY), code 44 (KEY_Z), value 0
Event: time 1648039909.764562, -------------- SYN_REPORT ------------
Event: time 1648039944.475630, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039944.475630, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1648039944.475630, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1648039944.475630, type 1 (EV_KEY), code 183 (KEY_F13), value 1
Event: time 1648039944.475630, -------------- SYN_REPORT ------------
Event: time 1648039944.551696, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1648039944.551696, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1648039944.551696, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1648039944.551696, type 1 (EV_KEY), code 183 (KEY_F13), value 0
Event: time 1648039944.551696, -------------- SYN_REPORT ------------

(처음 두 개의 버튼을 누른 결과입니다. 버튼 중 하나가 Ctrl+ Z에 매핑되어 있으므로 bash일시 중지 evtest)

다음과 같이 매핑될 수 있습니다.하비 데이터베이스(7). /etc/udev/hwdb.d/62-xp-pen-deco-mini-7.hwdb콘텐츠가 포함된 파일을 만듭니다 .

evdev:input:b0003v28BDp0928*
 KEYBOARD_KEY_70005=kp0
 KEYBOARD_KEY_70008=kp1
 KEYBOARD_KEY_700e2=kp2
 KEYBOARD_KEY_7002c=f16
 KEYBOARD_KEY_70016=f15
 KEYBOARD_KEY_7001d=f14
 KEYBOARD_KEY_70057=f13
 KEYBOARD_KEY_70056=z

첫 번째 줄은 .tabletfile과 유사한 장치와 일치하며 형식이 있습니다 b{BUS_ID}v{VENDOR_ID}p{MODEL_ID}. USB의 {BUS_ID}경우 0003.

그런 다음 스캔 코드를 형식의 키 맵에 작성합니다 KEYBOARD_KEY_{scancode}={key}. 스캔코드는 키 이름을 찾을 수 있는 evtest출력(줄)에서 가져오며 소문자여야 합니다. 위의 예에서는 애플리케이션별로 특정 작업을 바인딩할 수 있도록 마지막 버튼을 제외한 모든 버튼을 범용 키에 매핑했습니다.MSC_SCAN/usr/include/linux/input-event-codes.h

XP-Pen Deco mini 7의 경우 기본 매핑은 다음과 같습니다.

  • 70005 - B

  • 70008—e

  • 700e2 — 왼쪽 날개

  • 7002c — 공간

  • 700e2, 70016 — 왼쪽 Ctrl, s

  • 700e2, 7001d — 왼쪽 Ctrl, z

  • 700e2, 70057 — 왼쪽 Ctrl, kpplus

  • 700e2, 70056 — 왼쪽 Ctrl, kpminus

하지만 이는 태블릿 모델마다 다릅니다.

노트scancode 를 매핑하지 않기 때문에 700e2마지막 4개의 키가 전달됩니다.Ctrl

스타일러스 버튼 이벤트는 태블릿 입력 자체에서 생성됩니다.

$ sudo evtest /dev/input/event19
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x28bd product 0x928 version 0x100
Input device name: "UGTABLET 6 inch PenTablet"
...
Event: time 1648041701.178269, -------------- SYN_REPORT ------------
Event: time 1648041701.686282, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1648041701.686282, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 1
Event: time 1648041701.786243, -------------- SYN_REPORT ------------
Event: time 1648041701.790243, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1648041701.790243, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 0
Event: time 1648041704.130289, -------------- SYN_REPORT ------------
Event: time 1648041704.134281, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1648041704.134281, type 1 (EV_KEY), code 277 (BTN_FORWARD), value 1
Event: time 1648041704.262281, -------------- SYN_REPORT ------------
Event: time 1648041704.266286, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1648041704.266286, type 1 (EV_KEY), code 277 (BTN_FORWARD), value 0

기본적으로 아래쪽 버튼( scancode d0044)은 "마우스 가운데 버튼을 눌렀습니다" 이벤트를 발생시켜 매우 편리하지만 위쪽 버튼에는 눈에 띄는 효과가 없습니다. 이를 악용하는 방법에는 두 가지가 있습니다.

  • 마우스 버튼에 매핑하고 애플리케이션의 해당 버튼에 작업을 바인딩합니다.
KEYBOARD_KEY_d0045=btn_forward
  • BTN_TOOL_RUBBER시뮬레이션된 "고무" 펜촉 에 매핑
KEYBOARD_KEY_d0045=btn_tool_rubber

선호하는 변형을 추가 /etc/udev/hwdb.d/62-xp-pen-deco-mini-7.hwdb하고 바이너리 hwdb를 컴파일합니다.

$ sudo systemd-hwdb update

그리고 장치에 매핑을 적용합니다.

$ sudo udevadm trigger

노트이 매핑을 사용하려면 태블릿을 다시 삽입하거나 DE 애플리케이션을 다시 시작해야 할 수도 있습니다.

답변2

그리기 영역, 왼쪽 모드, 종횡비, 펜 압력 등과 같은 모든 옵션을 처리하려면 다음을 따르십시오.MadRunner의 답변(단락 왼쪽 모드).

.tablet구성을 생성한 후 프로젝트에 기여하려면 libwacom(나중에 오는 사람들이 이 프로세스를 거칠 필요가 없도록) 아래 지침에 따라 끌어오기 요청을 하세요."기부하다 libwacom"

그래픽 태블릿 버튼의 동작을 변경하는 더 쉬운 방법이 있습니다. 당신은 그것을 사용할 수 있습니다입력 리매퍼.

답변3

이 작업을 수행하려는 사람은 4시간 동안 작업을 수행한 후 다음을 사용해 보세요.

evdev:이름:(장치 이름):*

바꾸다

evdev:입력:b0003v28BDp0928*

답변해주셔서 정말 감사합니다! btn_middle스크롤로 작업을 완료하는 방법을 찾지는 못했지만 .

관련 정보