Huion Kamvas Pro 19 - review on GNU/Linux

Published on

Useful links:

Technical:

Special Offer/Promo code
Black Friday (Nov.21th~Dec.2nd): KamvasPro19 will have a 20% discount on Amazon and Store.

Intro

Here is my video review of the Huion Kamvas Pro 19 pen display tablet. Everything about my feelings, and tests about the hardware is in the video above.

This blog post here is a list of my installation method, scripts and tweaks to install the device under a GNU/Linux operating system.

I spent a lot of time to do research on this unit, but at the end of the day, I'm just a tweaker: all the credits for improving the support of this tablet goes to Joshua Goins (restrate), José Expósito, Benjamin Tissoires (bentiss) and Peter Hutterer (whot) (and probably many more I forgot, sorry).

The proprietary driver

I don't use the proprietary driver provided by Huion for ethical reasons, but I know that many users will be happy to know of its existence and will probably make an exception for this binary in order to "simplify their lives". I don't blame them.

Link: https://www.huion.com/download/

Wayland

Wayland is the default session on all major GNU/Linux distributions. Unfortunately, it is currently very difficult to set up this type of tablet in Wayland. In Wayland, all this kind of input and configuration has been delegated to the desktop environment developers. So now you understand that there will never be a single Wayland method to configure a tablet under any desktop environment, but a Gnome-on-Wayland method, a KDE/Plasma-on-Wayland method, a Sway-on-Wayland method, etc.

On a recent Fedora GNOME 41 Gnome or Plasma, you'll get very basic options, out-of-the-box and you might even access more thanks to CLI tools like gsetwacom for GNOME or ktabletconfig for Plasma. But you might also hit a wall as soon as you'll want to configure something not exposed to the GUI or this CLI tool.

Great progress is being made and if you install the latest udev-hid-bpf and libwacom you may soon see all the features of this tablet exposed in the system settings (even with the remote control!). However, it is not yet available via the usual packages, and it may take some time for it to spread downstream to all GNU/Linux distributions. So, it is painful to say, but in most cases your best option for Wayland now might be to use Huion's proprietary driver temporarily:

X11

I'm using a Debian 12 KDE on X11 setup. On it, I could setup the tablet correctly (almost a perfect support) with a collection of xsetwacom command-lines executed at system boot via a script.

Remaining issues

  1. The Kdial remote will be a pain to customise, but you can do it with this method for all keys except for the dial, but big progress and even an official support are made on the udev-hid-bpf project

Fix unwanted Eraser mode on stylus

By default, the second button of the stylus will simulate a stylus flip to eraser while holding it. You'll prefer a right-click to that.
You'll also have no possibility to setup the extra button on the thick stylus.

For that, you need to apply the rules contained in the udev-hid-bpf project. That one contains a rule to make it work again as a right-click (or any button because it will be exposed to xsetwacom for customization after that).

To install it, download the latest package of udev-hid-bpf (packages, not source code or asset), and unpack it somewhere. Then go to the directory and execute the bash script ./install.sh.

Reboot your system. You can check if everything is correctly loaded with the CLI command line tool tree:

sudo tree /sys/fs/bpf/hid/

Note: On my GNU/Linux installation based on Debian 12 Bookworm, you'll need a newer kernel to load BPF programs with eBPF. To do this, I install the curl package and then the Liquorix kernel using the one-liner command line provided on their website.

Setup X11 to put xsetwacom in control

For that, we need the ID of the tablet first.
Plug the tablet and run in a terminal:

lsusb

This command will list all usb devices connected to your computer and their ID.
My line looks like that:

Bus 001 Device 002: ID 256c:006b HUION Huion Tablet_GT1902

Copy your ID somewhere, mine here is 256c:006b, and if we have the exact same model, your might be the same.

Then change directory (cd) to the place where X11 stores its rules:

cd /usr/share/X11/xorg.conf.d/

I'll create a new file in this directory (note it require your system root password because we are editing a system file with 'sudo'). I'm using here the text-editor "micro", but you can use your favorite. "nano" is often installed anywhere, but has less user-friendly keyboard shortcut and color syntax by default.

sudo micro 70-huion.conf

We can copy/paste the paragraph under at the end of the file; if your USB identifier differs, you'll need to adjust the line starting with MatchUSBID:

Section "InputClass"
  Identifier "Huion Kamvas Pro 19 Tablet"
  MatchIsTablet "on"
  Driver "wacom"
  MatchUSBID "256c:006b"
  MatchDevicePath "/dev/input/event*"
EndSection

Save and then reboot your system.
At this point, you should see your Huion tablet stylus listed if you write in a terminal:

xsetwacom --list

Bravo! Xsetwacom is now in charge of your tablet, and that's a good news because you can setup almost any aspect of your tablet with this CLI tool.

Create an Xsetwacom script

Don't be affraid of the word "script"; it is just a series of command written line by line on a text file so the computer will execute all of them at once. Each line will setup one aspect of your tablet. Line starting by the character # are not interpreted by your computer, so I added some notes on them to guide you in the customisation of the script. Open a non-rich text editor (eg. Micro, Kate, Geany, Gnome text also called Gedit, etc...) and copy/paste the script under, and then read it and try to customise it to your needs. On this script you'll find my own settings as an example:

#! /bin/bash
# -------------------
# Huion Kamvas Pro 19
# -------------------
# License: CC-0/Public-Domain license
# author: deevad

# Tablet definition
# Identifier obtained using the 'xsetwacom --list' command line
# The tablet appears after creating a special rule for Xorg. 
# See blog post on https://www.davidrevoy.com/index.php?tag/hardware for it.
tabletstylus="HUION Huion Tablet_GT1902 Pen stylus"
tableteraser="HUION Huion Tablet_GT1902 Pen eraser"

# Constrain the stylus to use it's own monitor
# Monitor name here "HDMI-A-0" was obtained
# using the 'xrandr' command-line. Your monitor's name might be different (eg. "HDMI-1", "DisplayPort-3", etc...). 
output="HDMI-A-0"
xsetwacom --set "$tabletstylus" MapToOutput $output
xsetwacom --set "$tableteraser" MapToOutput $output

# Calibration (reset)
# Start by reseting calibration to default area
xsetwacom --set "$tabletstylus" ResetArea
# Default area is '0 0 32767 32767'
# You can obtain it with the command line:
# xsetwacom --get "HUION Huion Tablet_GT1902 Pen stylus" Area

# Calibration (set)
# Calibrate your device manually with tweaking the numbers under
# and then re-run the script. Add 50 here, substract 50 there, and see the effects.
# (you can also use a tool like `xinput_calibrator`)
# The number are set like this: "MinX" "MinY" "MaxX" "MaxY"
# default: Area 0 0 32767 32767
xsetwacom --set "$tabletstylus" Area 100 120 32794 32797
xsetwacom --set "$tableteraser" Area 100 120 32794 32797

# Pressure sensitivity calibration
# You can use this widget online here to create your curve
# https://linuxwacom.github.io/bezier.html
# The number are set like this: "X1" "Y1" "X2" "Y2"
# default: PressureCurve 0 0 100 100
xsetwacom --set "$tabletstylus" PressureCurve 30 30 35 100

# Styluse's buttons:
# First button on the stylus
# I like to get the Control key to pick color on this one.
# default: button 2 2
xsetwacom set "$tabletstylus" button 2 key Ctrl

# Second button on the stylus
# I leave the default right-click
xsetwacom set "$tabletstylus" button 3 3

# Third button on the thick stylus
# The key of your choice? "e" for eraser mode?
xsetwacom set "$tabletstylus" button 8 key e

# Data trimming and suppression
# Better to not filter or delete any data of this device for increasing its precision
# data pt.s filtered (0-100)
# default is 2
xsetwacom --set "$tabletstylus" Suppress 0 
# data pt.s trimmed (1-20)
# default is 4
xsetwacom --set "$tabletstylus" RawSample 1

# Mapping touchscreen
# This is tricky, and I had to make a workaround to capture the good ID among three identical
# It re-use the $output parameter set on "Constrain the stylus to use it's own monitor"
id=`xinput --list | grep -F 'HUION Huion Tablet_GT1902  ' | grep -Po '(?<=id=)dd?' | tail -2 | head -n 1`
xinput map-to-output ${id} ${output}
id=`xinput --list | grep -F 'HUION Huion Tablet_GT1902  ' | grep -Po '(?<=id=)dd?' | tail -1 | head -n 1`
xinput map-to-output ${id} ${output}

Save your script under the name of your choice, I saved mine as huion_Kamvas-Pro-19.sh (using the extension .sh at the end of the file will ease identifying the file as a Bash script later). To run it, after saving the file you need to give this text file execution permission. You can do so with many desktop environment by right clicking on the file, go to the property of the files, and in a permission tab add the "execute" checkbox. Another way to do it is via command line in the same directory:

chmod +x huion_Kamvas-Pro-19.sh

Now, if you run:

./huion_Kamvas-Pro-19.sh

The script should run and apply your preference. If your desktop environment is modern enough; you should have a way to add a script at autostart (usually in Settings > Autostart). This way, the preferences will be applied each time you start your computer. You can of course change options, and execute the script as many time you want to test and adjust.

You might also create a shortcut on your main menu to execute quickly the script.

Monitor Luminosity/Brightness and OSD

Some desktop environment will propose you an icon and a slider to manage the screen luminosity. If it works this way, then you are all set.

But if you can't access a simple slider, or you need all other options of this display, you can do it via ddcutil:

initiate modprobe and ddcutil:

sudo modprobe i2c-dev
sudo ddcutil detect

In the list, the monitor will be detected as HAT, you can list all its options with:

sudo ddcutil --mfg=HAT capabilities

For example, if you want to reduce the brightness, first check it with:

sudo ddcutil --mfg=HAT getvcp 10 

   VCP code 0x10 (Brightness                    ): current value =   100, max value =   100

Then you can set it to 75% or back to 100% this way:

sudo ddcutil --mfg=HAT setvcp 10 75
sudo ddcutil --mfg=HAT setvcp 10 100

Conclusion: contribute?

That's all, this guide can be of course continued or updated!

You can send me your tips via comments, or on various Gitlab or Githubs thread mentionned in this article or via email.