Hi all. I recently purchased a Huion Kamvas 16 gen3. On Fedora with KDE, this pen display is detected without any software needing to be installed. Through the existing settings module, I can map the pen input to the pen display. However, it’s not fully supported: one of the pen’s buttons is not configurable, and though the other two are configurable, changing the settings doesn’t appear to do anything. The unconfigurable button has its default behaviour (selecting the Eraser) working in Krita, while the others do nothing no matter what I select.
The tablet’s buttons and dials are completely unconfigurable; there is no option under “Drawing Tablet” to change them. The buttons are set up by default to send some slightly weird key combinations (wtf is Ctrl+Alt+Z supposed to be for, Huion?) so these can at least be listened for in a specialist app like Krita. The dials however do not do anything, and I would very much like to map them.
Beyond getting the tablet fully working, I would very much like there to be a resource where people like me can go to work out where the problem is, as there are several layers:
- At the driver level, the signals the device is sending need to be picked up
- Also at the driver level, these need to be made available to user-land software in a manner it can recognise
- At the application level, these signals need to be interpreted correctly
- At the config level (like in KDE settings) these signals need to be intercepted correctly to enable customisation
The tablet presents itself as 4 separate devices, which complicates matters. Listening to each of these with evtest reveals that at some level the raw input of all of the functionality of the device is making it to the OS: the dials send events, as do all the buttons on the tablet and the pen. The dials are under a different device than the buttons.
Clearly this is not enough for Krita to understand the inputs; I wonder if it simply doesn’t know to monitor the dial device. And the evtest testing indicates that at least one of the pen button presses is sent in a strange way: it registers as a BTN_TOUCH event with the same values as if I had tapped the pen on the tablet, but preceded by an MSC_SCAN event with a different value.
I tried to work around all of this using input-remapper but with no real success. I was able to remap one of the non-working pen buttons, but not the MSC_SCAN, BTN_TOUCH one. And input-remapper receives no events at all when I try to record stuff with the dials, so that’s a non-starter. I suspect something is going wrong at step 2 above - the information is there in the driver and raw data, but not presented in a way that anything knows to listen for it.
There are two other possibilities to look at: there is a proprietary driver from Huion. I tried it, but for some reason it didn’t correctly map the tablet surface: the bottom right of the tablet mapped to its centre. Changing the remapping settings resulted in slightly different breakage, but nothing made it usable, so that was a non-starter
Then there is OpenTabletDriver. Unfortunately it does not have support for this recent model of tablet, and in any case there is a years-old PR on their github to add support for wheels/dials that doesn’t seem to be going anywhere fast.
I can code so can try to contribute somewhere, but I don’t know where the problem lies so I don’t know where to target my efforts. What I’m really looking for is advice on how to work out where these events are getting lost so I can target that point for support, workarounds, or coding work. Thanks!