Configuring the XpPen ACK05 Remote with only FLOSS on GNU/Linux: my investigation and workarounds.

Published on

Here is my research on how to use and configure the XPPen ACK05 Remote using only Free Libre and Open Source drivers and software under GNU/Linux. As you'll see, it's quite limited and many features just don't work. This guide will be updated as soon as I have new information on how to improve it, or as soon as new development improves support for this device.

Terminology:

  • ACK05 → The XPPen ACK05 Remote Controler device.
  • FLOSS → Free/Libre and Open-Source Software.

Device presentation

The ACK05, looks like a numeric keypad with a dial ring and nothing written on the keys. It comes with the "Pro (gen2)" tablet models of the XpPen brand: the Artist Pro (gen2) 14, 16 and 19 but also the Deco Pro (gen2) XLW, LW and MW. Well, it sounds like XPPen just decided to make the ACK05 the default remote for all their future tablets.

I got mine with my XpPen Artist 16 Pro (Gen2), which I reviewed last year.

But you can also buy one alone on the XpPen store for about $50. In fact, you don't need to pair the ACK05 with a tablet to use it properly; it's a standalone device. For artists, this small keyboard gives them closer access to a number of common keyboard shortcuts.


Photo of the XPpen ACK05 in usage situation for me, a right handed user of the Artist 16 Pro

Disassembling the ACK05

The ACK05 is also a tiny programmable keyboard in disguise, the Official User Manual (PDF) mention the device has a small memory to store the configuration. It also has its own microcontroller unit (MCU), an ID M52833 QIAAA0 2310AI code on it, a Nordic nRF52* family. It's a multi-protocol system-on-chip with lots of information and specifications (PDF) on the manufacturer's website.


Photo: tearing down the ACK05 device

What works, what doesn't

USB-C cable connection → it works out-of-the-box. For some reason, it's the only way to connect the device on GNU/Linux right now.

Bluetooth direct → it doesn't work. I tested it on three Bluetooth-enabled GNU/Linux computers I had at home and different distros. You can turn on the device and press the middle-of-the-dial button for 6 seconds until the LED flashes quickly, but none of them will see or pair with the device.

The USB dongle → it doesn't work. This is strange because I have never seen a mouse or keyboard with its own USB dongle have this kind of problem.

The Default Keyboard Shortcuts → it works out-of-the-box with a rather questionable layout. On the plus side, you have the three keys Shift, Ctrl and Alt clearly side by side in the middle of the device, and underneath a space bar that is easy to reach with the thumb. Undo and redo are surprisingly FLOSS standard: Ctrl+Z for undo, and Ctrl+Shift+Z for redo. On the bad side, the ACK05 key layout under GNU/Linux will automatically load the same layout as your main keyboard layout: in my case an Azerty French keyboard. This means that the default Ctrl+Z of the ACK05 will return a Ctrl+W by default, which is dangerous because it closes the document in many applications. In addition, while shortcuts like Ctrl+O for opening files and Ctrl+N for creating new ones are standard, their non-frequent use in workflows raises questions about their necessity, since these actions are typically performed only once per artwork.

The Dial → it kinda works out-of-the-box. The dial returns a Ctrl+ and Ctrl- action. It zooms in and out in Krita, and that's fine. However, the middle button of the dial has no effect and feels like it is disabled.

Customisation of keys → you can improve it, slightly. And that's my transition to the next part of this article!

Customising the keys

First, it's probably impossible to program the ACK05 with FLOSS, I spent more than a day trying and every method I tried was a dead end. Even for specialized FLOSS software in programmable keyboards like QMK Firmware it is impossible. FLOSS projects tend to flee the Nordic nRF52* family of microcontrollers because all the tools available so far are proprietary.

So we have to deal with manipulating the keystroke from the default built-in layout. And this is something that is possible, but far from ideal and has a lot of limitations. I already published a full tutorial about this for USB numeric keypads.


the MSC Scan code on the default layout.

The limitations: You cannot change, for example, the 'Ctrl+O' (double-key) shortcut to 'M' (single-key). You can only replace one of the keys in the shortcut. For example, you can change the 'O' to a 'T', and the shortcut will become 'Ctrl+T' (transform tool in Krita). Also keep in mind that changing 'Ctrl' will affect all other shortcuts that use 'Ctrl', so it's generally not advisable to do this.

With this limitation, all I can do is find a better use for the top three shortcuts. I'm going to replace them with a quick action combo in Krita to deform/scale/rotate an area: Ctrl+r (rectangular selection), Ctrl+t (transform), Enter (apply/confirm/validate). I'll also fix the bug with the French Azerty layout that prevents me from using Undo and Redo.


The MSC Scan change proposal, in green.

Follow the my previous tutorial for detailed steps, but in short, I create a new udev/hwdb.d rule:

sudo $EDITOR /etc/udev/hwdb.d/99-xppen-ack05-remote.hwdb`

And I paste this custom code for the keys (and also my fix for the Azerty keyboard on the last line).

evdev:input:b0003v28BDp0202*
 KEYBOARD_KEY_70012=0x13 # [o] => [r]
 KEYBOARD_KEY_70011=0x14 # [n] => [t]
 KEYBOARD_KEY_7003e=0x1c # [F5] => [enter]
 KEYBOARD_KEY_7001d=0x11 # /! azerty french keyboard fix [z] => [w]

then I save and refresh systemd-hwdb and udevadm.

sudo systemd-hwdb update && sleep 2 && sudo udevadm trigger

done!

Conclusion

No wireless, very limited layout customization, and the middle button of the dial not working... Yes, it's far from what this device is capable of: being wireless and having multiple layouts.

But the fact that it somehow works for its core functionality "out-of-the-box" and without anyone working on a specific driver is a kind of small miracle of ingenuity; both from XpPen and from the input Linux developers. So bravo!

An idea for XpPen engineers; if you want to make the next iteration better, just look at how an open source project like the Duckypad handles drivers and customization.

In any case, a simple $15 USB numeric keypad will be of more value to your workflow under GNU/Linux such as the one I build in my tutorial. There are many variations on this: my favorite shortcut device at the moment is a little yellow "8Bit do Zero 2" gamepad. It connects via bluetooth and has a built-in mode that turns all buttons into keyboard input (with only one key press, for video games). With a udev/hwdb.d rule it became a perfect keyboard shortcut tool while painting. Especially because I can hold it in my left hand and it follows all my positions.

Sources