Skip to content

Instantly share code, notes, and snippets.

@Lokawn
Last active June 2, 2022 19:05
Show Gist options
  • Save Lokawn/8f8bf5cd13a8df61a3a7902a7c2b034c to your computer and use it in GitHub Desktop.
Save Lokawn/8f8bf5cd13a8df61a3a7902a7c2b034c to your computer and use it in GitHub Desktop.
Setup XP-Pen Deco Mini 7

Set-up express keys and stylus keys:

  • When Stylus comes in proximity of PenTablet BTN_TOOL_PEN code is generated,
  • On pressing lower button BTN_STYLUS code is generated
  • On pressing upper button BTN_TOOL_RUBBER, BTN_TOUCH codes are generated.
  • Different Scancodes are generated with the express keys which need to be mapped to keycodes and then can be used.

-> Get scancodes & device identification info using evtest/evemu-record.

 sudo evtest | grep -B1 "value 1" 
 
 -> For PenTablet and PenTablet Keyboard Device

-> Create a hwdb file /etc/udev/hwdb.d/10-xp-pen-modifiers.hwdb.

-> Compile hwdb.bin.

 systemd-hwdb update

-> Trigger the udev rules by either you do this by physically unplugging and re-plugging the device or by running

 udevadm trigger /sys/class/input/eventXYZ

-> Check if the configuration was loaded.

 udevadm info /sys/class/input/eventXYZ

Set-up Tablet:

-> Install Wacom driver xf86-input-wacom.

-> Enable Wacom X.org driver

-> Verify that the tablet is handled by the Wacom driver.

 xsetwacom list

-> Configure Wacom X.org driver -> Set tablet to relative mode :

 xsetwacom  --set "UGTABLET 6 inch PenTablet stylus" Mode Relative
 xsetwacom  --set "UGTABLET 6 inch PenTablet eraser" Mode Relative
 xsetwacom  --set "UGTABLET 6 inch PenTablet Mouse touch" Mode Relative

-> Set tablet area :

 xsetwacom  --set "UGTABLET 6 inch PenTablet stylus" Area "0 0 98301 98301"
 xsetwacom  --set "UGTABLET 6 inch PenTablet eraser" Area "0 0 98301 98301"
 xsetwacom  --set "UGTABLET 6 inch PenTablet Mouse touch" Area "0 0 98301 98301"

-> Disable Hower click xsetwacom --set "UGTABLET 6 inch PenTablet stylus" TabletPCButton on.

  • Persistent Settings

SOURCES

#evdev:input:b[bustype]v[vendor]p[product]e[version]*
#evdev:input:b0003v28BDp0928e0100* # needs testing
# ID_INPUT_KEY=1
# KEYBOARD_KEY_70005= # first key from right side if tablet is erect
# KEYBOARD_KEY_70008=leftalt
# KEYBOARD_KEY_458978=leftalt
# KEYBOARD_KEY_458796=leftalt
# KEYBOARD_KEY_458976=leftalt # last 4 keys, each of them sends 2 scancodes on keypress
# KEYBOARD_KEY_458774=leftalt
# KEYBOARD_KEY_458976=leftalt # ctrl
# KEYBOARD_KEY_458781=leftalt
# KEYBOARD_KEY_458976=leftalt
# KEYBOARD_KEY_458839=leftalt
# KEYBOARD_KEY_458976=leftalt
# KEYBOARD_KEY_458838=leftalt
# ID_INPUT_TABLET=1
# KEYBOARD_KEY_d0044=333 #Lower Button -> Map it to right click
# KEYBOARD_KEY_d0044=button 1 #Lower Button -> Map it to right click
# KEYBOARD_KEY_d0045=334 #Upper Button -> Map it to middle click
# KEYBOARD_KEY_d0045=button 3 #Upper Button -> Map it to middle click
Section "InputClass"
Identifier "Tablet"
MatchDevicePath "/dev/input/event*"
MatchUSBID "28bd:0928
Driver "wacom"
Option "TabletPCButton" "on" # Disable Hower Click
Option "TPCButton" "on"
Option "Mode" "Relative"
Option "Area" "0 0 98301 98301" # Not Working
EndSection
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:
Event type 0 (EV_SYN)
Event type 1 (EV_KEY)
Event code 1 (KEY_ESC)
Event code 2 (KEY_1)
Event code 3 (KEY_2)
Event code 4 (KEY_3)
Event code 5 (KEY_4)
Event code 6 (KEY_5)
Event code 7 (KEY_6)
Event code 8 (KEY_7)
Event code 9 (KEY_8)
Event code 10 (KEY_9)
Event code 11 (KEY_0)
Event code 12 (KEY_MINUS)
Event code 13 (KEY_EQUAL)
Event code 14 (KEY_BACKSPACE)
Event code 15 (KEY_TAB)
Event code 16 (KEY_Q)
Event code 17 (KEY_W)
Event code 18 (KEY_E)
Event code 19 (KEY_R)
Event code 20 (KEY_T)
Event code 21 (KEY_Y)
Event code 22 (KEY_U)
Event code 23 (KEY_I)
Event code 24 (KEY_O)
Event code 25 (KEY_P)
Event code 26 (KEY_LEFTBRACE)
Event code 27 (KEY_RIGHTBRACE)
Event code 28 (KEY_ENTER)
Event code 29 (KEY_LEFTCTRL)
Event code 30 (KEY_A)
Event code 31 (KEY_S)
Event code 32 (KEY_D)
Event code 33 (KEY_F)
Event code 34 (KEY_G)
Event code 35 (KEY_H)
Event code 36 (KEY_J)
Event code 37 (KEY_K)
Event code 38 (KEY_L)
Event code 39 (KEY_SEMICOLON)
Event code 40 (KEY_APOSTROPHE)
Event code 41 (KEY_GRAVE)
Event code 42 (KEY_LEFTSHIFT)
Event code 43 (KEY_BACKSLASH)
Event code 44 (KEY_Z)
Event code 45 (KEY_X)
Event code 46 (KEY_C)
Event code 47 (KEY_V)
Event code 48 (KEY_B)
Event code 49 (KEY_N)
Event code 50 (KEY_M)
Event code 51 (KEY_COMMA)
Event code 52 (KEY_DOT)
Event code 53 (KEY_SLASH)
Event code 54 (KEY_RIGHTSHIFT)
Event code 55 (KEY_KPASTERISK)
Event code 56 (KEY_LEFTALT)
Event code 57 (KEY_SPACE)
Event code 58 (KEY_CAPSLOCK)
Event code 59 (KEY_F1)
Event code 60 (KEY_F2)
Event code 61 (KEY_F3)
Event code 62 (KEY_F4)
Event code 63 (KEY_F5)
Event code 64 (KEY_F6)
Event code 65 (KEY_F7)
Event code 66 (KEY_F8)
Event code 67 (KEY_F9)
Event code 68 (KEY_F10)
Event code 69 (KEY_NUMLOCK)
Event code 70 (KEY_SCROLLLOCK)
Event code 71 (KEY_KP7)
Event code 72 (KEY_KP8)
Event code 73 (KEY_KP9)
Event code 74 (KEY_KPMINUS)
Event code 75 (KEY_KP4)
Event code 76 (KEY_KP5)
Event code 77 (KEY_KP6)
Event code 78 (KEY_KPPLUS)
Event code 79 (KEY_KP1)
Event code 80 (KEY_KP2)
Event code 81 (KEY_KP3)
Event code 82 (KEY_KP0)
Event code 83 (KEY_KPDOT)
Event code 85 (KEY_ZENKAKUHANKAKU)
Event code 86 (KEY_102ND)
Event code 87 (KEY_F11)
Event code 88 (KEY_F12)
Event code 89 (KEY_RO)
Event code 90 (KEY_KATAKANA)
Event code 91 (KEY_HIRAGANA)
Event code 92 (KEY_HENKAN)
Event code 93 (KEY_KATAKANAHIRAGANA)
Event code 94 (KEY_MUHENKAN)
Event code 95 (KEY_KPJPCOMMA)
Event code 96 (KEY_KPENTER)
Event code 97 (KEY_RIGHTCTRL)
Event code 98 (KEY_KPSLASH)
Event code 99 (KEY_SYSRQ)
Event code 100 (KEY_RIGHTALT)
Event code 102 (KEY_HOME)
Event code 103 (KEY_UP)
Event code 104 (KEY_PAGEUP)
Event code 105 (KEY_LEFT)
Event code 106 (KEY_RIGHT)
Event code 107 (KEY_END)
Event code 108 (KEY_DOWN)
Event code 109 (KEY_PAGEDOWN)
Event code 110 (KEY_INSERT)
Event code 111 (KEY_DELETE)
Event code 113 (KEY_MUTE)
Event code 114 (KEY_VOLUMEDOWN)
Event code 115 (KEY_VOLUMEUP)
Event code 116 (KEY_POWER)
Event code 117 (KEY_KPEQUAL)
Event code 119 (KEY_PAUSE)
Event code 121 (KEY_KPCOMMA)
Event code 122 (KEY_HANGUEL)
Event code 123 (KEY_HANJA)
Event code 124 (KEY_YEN)
Event code 125 (KEY_LEFTMETA)
Event code 126 (KEY_RIGHTMETA)
Event code 127 (KEY_COMPOSE)
Event code 128 (KEY_STOP)
Event code 129 (KEY_AGAIN)
Event code 130 (KEY_PROPS)
Event code 131 (KEY_UNDO)
Event code 132 (KEY_FRONT)
Event code 133 (KEY_COPY)
Event code 134 (KEY_OPEN)
Event code 135 (KEY_PASTE)
Event code 136 (KEY_FIND)
Event code 137 (KEY_CUT)
Event code 138 (KEY_HELP)
Event code 140 (KEY_CALC)
Event code 142 (KEY_SLEEP)
Event code 150 (KEY_WWW)
Event code 152 (KEY_SCREENLOCK)
Event code 158 (KEY_BACK)
Event code 159 (KEY_FORWARD)
Event code 161 (KEY_EJECTCD)
Event code 163 (KEY_NEXTSONG)
Event code 164 (KEY_PLAYPAUSE)
Event code 165 (KEY_PREVIOUSSONG)
Event code 166 (KEY_STOPCD)
Event code 173 (KEY_REFRESH)
Event code 176 (KEY_EDIT)
Event code 177 (KEY_SCROLLUP)
Event code 178 (KEY_SCROLLDOWN)
Event code 179 (KEY_KPLEFTPAREN)
Event code 180 (KEY_KPRIGHTPAREN)
Event code 183 (KEY_F13)
Event code 184 (KEY_F14)
Event code 185 (KEY_F15)
Event code 186 (KEY_F16)
Event code 187 (KEY_F17)
Event code 188 (KEY_F18)
Event code 189 (KEY_F19)
Event code 190 (KEY_F20)
Event code 191 (KEY_F21)
Event code 192 (KEY_F22)
Event code 193 (KEY_F23)
Event code 194 (KEY_F24)
Event code 240 (KEY_UNKNOWN)
Event type 4 (EV_MSC)
Event code 4 (MSC_SCAN)
Key repeat handling:
Repeat type 20 (EV_REP)
Repeat code 0 (REP_DELAY)
Value 250
Repeat code 1 (REP_PERIOD)
Value 33
Properties:
Testing ... (interrupt to exit)
Event: time 1643834542.499979, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70005
Event: time 1643834542.499979, type 1 (EV_KEY), code 48 (KEY_B), value 1
Event: time 1643834542.499979, -------------- SYN_REPORT ------------
Event: time 1643834542.579950, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70005
Event: time 1643834542.579950, type 1 (EV_KEY), code 48 (KEY_B), value 0
Event: time 1643834542.579950, -------------- SYN_REPORT ------------
Event: time 1643834549.171105, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70008
Event: time 1643834549.171105, type 1 (EV_KEY), code 18 (KEY_E), value 1
Event: time 1643834549.171105, -------------- SYN_REPORT ------------
Event: time 1643834549.263235, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70008
Event: time 1643834549.263235, type 1 (EV_KEY), code 18 (KEY_E), value 0
Event: time 1643834549.263235, -------------- SYN_REPORT ------------
Event: time 1643834552.370892, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1643834552.370892, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 1
Event: time 1643834552.370892, -------------- SYN_REPORT ------------
Event: time 1643834552.506938, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e2
Event: time 1643834552.506938, type 1 (EV_KEY), code 56 (KEY_LEFTALT), value 0
Event: time 1643834552.506938, -------------- SYN_REPORT ------------
Event: time 1643834554.822512, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7002c
Event: time 1643834554.822512, type 1 (EV_KEY), code 57 (KEY_SPACE), value 1
Event: time 1643834554.822512, -------------- SYN_REPORT ------------
Event: time 1643834554.930635, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7002c
Event: time 1643834554.930635, type 1 (EV_KEY), code 57 (KEY_SPACE), value 0
Event: time 1643834554.930635, -------------- SYN_REPORT ------------
Event: time 1643834557.058360, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834557.058360, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1643834557.058360, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70016
Event: time 1643834557.058360, type 1 (EV_KEY), code 31 (KEY_S), value 1
Event: time 1643834557.058360, -------------- SYN_REPORT ------------
Event: time 1643834557.182271, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834557.182271, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1643834557.182271, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70016
Event: time 1643834557.182271, type 1 (EV_KEY), code 31 (KEY_S), value 0
Event: time 1643834557.182271, -------------- SYN_REPORT ------------
Event: time 1643834560.229940, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834560.229940, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1643834560.229940, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7001d
Event: time 1643834560.229940, type 1 (EV_KEY), code 44 (KEY_Z), value 1
Event: time 1643834560.229940, -------------- SYN_REPORT ------------
Event: time 1643834560.381956, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834560.381956, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1643834560.381956, type 4 (EV_MSC), code 4 (MSC_SCAN), value 7001d
Event: time 1643834560.381956, type 1 (EV_KEY), code 44 (KEY_Z), value 0
Event: time 1643834560.381956, -------------- SYN_REPORT ------------
Event: time 1643834562.321843, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834562.321843, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1643834562.321843, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1643834562.321843, type 1 (EV_KEY), code 78 (KEY_KPPLUS), value 1
Event: time 1643834562.321843, -------------- SYN_REPORT ------------
Event: time 1643834562.433835, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834562.433835, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1643834562.433835, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70057
Event: time 1643834562.433835, type 1 (EV_KEY), code 78 (KEY_KPPLUS), value 0
Event: time 1643834562.433835, -------------- SYN_REPORT ------------
Event: time 1643834564.753566, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834564.753566, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 1
Event: time 1643834564.753566, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1643834564.753566, type 1 (EV_KEY), code 74 (KEY_KPMINUS), value 1
Event: time 1643834564.753566, -------------- SYN_REPORT ------------
Event: time 1643834564.837446, type 4 (EV_MSC), code 4 (MSC_SCAN), value 700e0
Event: time 1643834564.837446, type 1 (EV_KEY), code 29 (KEY_LEFTCTRL), value 0
Event: time 1643834564.837446, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70056
Event: time 1643834564.837446, type 1 (EV_KEY), code 74 (KEY_KPMINUS), value 0
Event: time 1643834564.837446, -------------- SYN_REPORT ------------
sudo evtest /dev/input/event14 | grep -B1 "BTN_" #/dev/input/event14: *UGTABLET 6 inch PenTablet*
Event type 1 (EV_KEY)
Event code 320 (BTN_TOOL_PEN)
Event code 321 (BTN_TOOL_RUBBER)
Event code 330 (BTN_TOUCH)
Event code 331 (BTN_STYLUS)
--
Testing ... (interrupt to exit)
Event: time 1654179761.025348, type 1 (EV_KEY), code 320 (BTN_TOOL_PEN), value 1 #Stylus comes in proximity
--
Event: time 1654179764.637424, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1654179764.637424, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 1 #Lower button pressed
--
Event: time 1654179764.793411, -------------- SYN_REPORT ------------
Event: time 1654179764.801429, type 1 (EV_KEY), code 320 (BTN_TOOL_PEN), value 0
--
Event: time 1654179764.801466, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0044
Event: time 1654179764.801466, type 1 (EV_KEY), code 331 (BTN_STYLUS), value 0
Event: time 1654179764.801466, -------------- SYN_REPORT ------------
Event: time 1654179764.837431, type 1 (EV_KEY), code 320 (BTN_TOOL_PEN), value 1
--
Event: time 1654179769.229567, -------------- SYN_REPORT ------------
Event: time 1654179769.253603, type 1 (EV_KEY), code 320 (BTN_TOOL_PEN), value 0
Event: time 1654179769.253603, -------------- SYN_REPORT ------------
Event: time 1654179769.253645, type 1 (EV_KEY), code 321 (BTN_TOOL_RUBBER), value 1 #Upper Button Pressed
Event: time 1654179769.253645, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1654179769.253645, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 1
--
Event: time 1654179769.385577, type 4 (EV_MSC), code 4 (MSC_SCAN), value d0045
Event: time 1654179769.385577, type 1 (EV_KEY), code 330 (BTN_TOUCH), value 0
Event: time 1654179769.385577, type 1 (EV_KEY), code 321 (BTN_TOOL_RUBBER), value 0
--
@Lokawn
Copy link
Author

Lokawn commented Jun 2, 2022

Tried but didn't work

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment