Для графического планшета GAOMON M106K пару лет назад драйвера для Linux не было. Скорее всего, до сих пор нет. Поэтому пару лет назад написал для себя скрипт на Python, с помощью которого планшет у меня заработал в Ubuntu и Raspbian.
Сначала про подготовку к запуску скрипта. Нужно будет кое-что установить (под root`ом):
# apt-get install python3-pip && \
pip3 install --upgrade pip && \
pip3 install setuptools && \
pip3 install Xlib && \
pip3 install pyautogui
Библиотека pyautogui по умолчанию работает не очень (перемещение курсора дёрганое), поэтому нужно поправить в ней один файл (версия питона может отличаться):
# cp __init__.py /usr/local/lib/python3.4/dist-packages/pyautogui/__init__.py
После этого нужно проверить в скрипте planshet.py имя файла устройства (у меня он подключался под именем /dev/hidraw2) и запустить его под root`ом (иначе не будет прав на чтение из файла устройства).
Сам «драйвер» planshet.py:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
"""
"driver" for GAOMON M106K by Maxim Kuznetsov http://kmsvsr.ru
To install needed packages and modules run "install.sh" as superuser
Don`t forget to replace or edit /usr/local/lib/python.../dist-packages/pyautogui/__init__.py
before use
"sudo ./planshet.py" to run. Sudo is for access to read from device /dev/hidraw0
Works in Linux Mint 18
"""
import time
import struct
# https://pyautogui.readthedocs.io/en/latest/mouse.html#the-mousedown-and-mouseup-functions
import pyautogui
MONITOR_HEIGHT = 1050
MONITOR_WIDTH = 1400
def start_driver():
"""Open device and start to process input actions"""
# init
with open("/dev/hidraw2", "rb") as device_file:
lm_pressed = False
rm_pressed = False
mm_pressed = False
last_move_time = int(round(time.time() * 1000))
# endless cycle of reading data from device
while True:
data = device_file.read(8) # 8 is for my GAOMON M106K
values = struct.unpack('HHHH',data)
print(
f"Buttons: {hex(values[0])}; "
f"X: {hex(values[1])}; "
f"Y: {hex(values[2])}; "
f"Press: {hex(values[3])}"
)
# https://stackoverflow.com/questions/1181464/controlling-mouse-with-python
current_time = int(round(time.time() * 1000))
deadline_time = last_move_time + 15
if deadline_time < current_time:
x_pos = values[1] * MONITOR_WIDTH / 0x7fff
y_pos = values[2] * MONITOR_HEIGHT / 0x7fff
buttons = values[0]
press = values[3]
pyautogui.moveTo(x_pos, y_pos)
last_move_time = current_time
# Left mouse button is touch by pen
if press > 0:
if not lm_pressed:
pyautogui.mouseDown(button='left')
lm_pressed = True
else:
if lm_pressed:
pyautogui.mouseUp(button='left')
lm_pressed = False
# Right mouse button is touch by pen with bottom button on it
if buttons == 0xc20a:
if not rm_pressed:
pyautogui.mouseDown(button='right')
rm_pressed = True
else:
if rm_pressed:
pyautogui.mouseUp(button='right')
rm_pressed = False
# Middle mouse button is touch by pen with top button on it
if buttons == 0xc40a:
if not mm_pressed:
pyautogui.mouseDown(button='middle')
mm_pressed = True
else:
if mm_pressed:
pyautogui.mouseUp(button='middle')
mm_pressed = False
if __name__ == "__main__":
start_driver()
Весь «драйвер» получился чуть больше 50 строчек кода. Может быть кому-нибудь пригодится подключить так же другую модель планшета или ещё какое-нибудь необычное устройство ввода, для которого нет нормального драйвера под Linux.
Из недоделок: не работают кнопки на планшете, либо они подключаются другим устройством, либо через /dev вообще не доступны, лишку не разбирался.