<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Luc's developer blog</title><link>https://luc.lino-framework.org</link><description>Luc's developer blog</description><copyright>2001-2026 Luc Saffre</copyright><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en</language><lastBuildDate>Sun, 13 Sep 2026 20:06:26 +0000</lastBuildDate><item><title>Install Huion Kamvas 13 graphics tablet on Ubuntu</title><link>https://luc.lino-framework.org/blog/2026/0913.html</link><description>&lt;section id="install-huion-kamvas-13-graphics-tablet-on-ubuntu"&gt;
&lt;h1&gt;Install Huion Kamvas 13 graphics tablet on Ubuntu&lt;a class="headerlink" href="#install-huion-kamvas-13-graphics-tablet-on-ubuntu" title="Link to this heading"&gt;¶&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Sunday, September 13, 2026&lt;/p&gt;
&lt;p&gt;I’m still trying to get our new Huion Kamvas 13 graphics tablet to work on
Ubuntu 26.04. More precisely the model is named GS 1331.&lt;/p&gt;
&lt;p&gt;The opentabletdriver is installed, but the pencil isn’t detected at all (it
doesn’t cause a mouse cursor to appear). I followed the instructions  in
&lt;a class="reference external" href="https://opentabletdriver.net/Wiki/FAQ/General"&gt;https://opentabletdriver.net/Wiki/FAQ/General&lt;/a&gt;, and &lt;code class="xref std std-cmd docutils literal notranslate"&gt;&lt;span class="pre"&gt;lsusb&lt;/span&gt;&lt;/code&gt; sees and reports
it the tablet:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Bus&lt;/span&gt; &lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;Device&lt;/span&gt; &lt;span class="mi"&gt;011&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="mi"&gt;256&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;006&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="n"&gt;HUION&lt;/span&gt; &lt;span class="n"&gt;Huion&lt;/span&gt; &lt;span class="n"&gt;Tablet_GS1331&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;The name “Tablet_GS1331” is indeed not in the  &lt;a class="reference external" href="https://opentabletdriver.net/Tablets?search=gs%201331"&gt;list of supported tablets&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Gemini told me this:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;Since OpenTabletDriver works entirely in user-space, it relies on explicit
layout files (.json) for every specific device revision. Your HUION Kamvas 13
(GS1331) under the 256c:006d identifier is a known variant. Support for it was
officially tracked and added in OpenTabletDriver Pull Request #3178, but
depending on your exact version package on Ubuntu 26, it may not be natively
bundled yet.
[1] (&lt;a class="reference external" href="https://github.com/OpenTabletDriver/OpenTabletDriver/issues/3447"&gt;https://github.com/OpenTabletDriver/OpenTabletDriver/issues/3447&lt;/a&gt;),
[2] (&lt;a class="reference external" href="https://support.huion.com/en/support/solutions/articles/44001769972-does-huion-have-a-tablet-driver-that-supports-linux"&gt;https://support.huion.com/en/support/solutions/articles/44001769972-does-huion-have-a-tablet-driver-that-supports-linux&lt;/a&gt;-),
[3] (&lt;a class="reference external" href="https://github.com/OpenTabletDriver/OpenTabletDriver/releases"&gt;https://github.com/OpenTabletDriver/OpenTabletDriver/releases&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;You can get your pen working immediately by manually dropping the device
configuration file into your local path and ensuring conflicting kernel
modules are cleared.&lt;/p&gt;
&lt;p&gt;(Followed by instructions)&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;OpenTabletDriver&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Configurations&lt;/span&gt;
&lt;span class="n"&gt;nano&lt;/span&gt; &lt;span class="o"&gt;~/.&lt;/span&gt;&lt;span class="n"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;OpenTabletDriver&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Configurations&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Huion_GS1331&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;And then pasted the suggested JSON suggested by Gemini (taken from some thread
on GitHub) into the file:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;Huion Kamvas 13 (GS1331)&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;SupportedIdentifiers&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;VendorID&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;9580&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;ProductID&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;109&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;Digitizer&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;Width&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;293.76&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;Height&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;165.24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;MaxX&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;58752&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;MaxY&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;33048&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;Pen&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;MaxPressure&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8191&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;&amp;quot;Buttons&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;&amp;quot;ButtonCount&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="s2"&gt;&amp;quot;ReportParser&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;OpenTabletDriver.Configurations.Parsers.UCLogic.UCLogicTiltReportParser&amp;quot;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I also added two lines to my &lt;code class="file docutils literal notranslate"&gt;&lt;span class="pre"&gt;/etc/modprobe.d/blacklist.conf&lt;/span&gt;&lt;/code&gt; file as
suggested by Gemini:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;blacklist&lt;/span&gt; &lt;span class="n"&gt;hid_uclogic&lt;/span&gt;
&lt;span class="n"&gt;blacklist&lt;/span&gt; &lt;span class="n"&gt;wacom&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Though this might be complete nonsense in my case. TODO: remove them later and
test whether it works without them.&lt;/p&gt;
&lt;p&gt;I then discovered that actually my &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;otd-daemon&lt;/span&gt;&lt;/code&gt; service fails to load. “sudo
journalctl -t otd-daemon” reports:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sept  13 21:55:53 ding otd-daemon[334263]: You must install .NET to run this application.
sept  13 21:55:53 ding otd-daemon[334263]: App: /usr/lib/opentabletdriver/OpenTabletDriver.Daemon
sept  13 21:55:53 ding otd-daemon[334263]: Architecture: x64
sept  13 21:55:53 ding otd-daemon[334263]: App host version: 8.0.25
sept  13 21:55:53 ding otd-daemon[334263]: .NET location: Not found
sept  13 21:55:53 ding otd-daemon[334263]: Learn more:
sept  13 21:55:53 ding otd-daemon[334263]: https://aka.ms/dotnet/app-launch-failed
sept  13 21:55:53 ding otd-daemon[334263]: Download the .NET runtime:
sept  13 21:55:53 ding otd-daemon[334263]: https://aka.ms/dotnet-core-applaunch?missing_runtime=true&amp;amp;arch=x64&amp;amp;rid=linux-x64&amp;amp;os=ubuntu.26.04&amp;amp;apphost_vers&amp;gt;
sept  13 21:55:53 ding otd-daemon[334263]: Failed to resolve libhostfxr.so [not found]. Error code: 0x80008083
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I have installed two versions of .NET: &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotnet-runtime-10.0&lt;/span&gt;&lt;/code&gt;, which is part of
the Ubuntu 26.04 distribution, and &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;dotnet-runtime-8.0&lt;/span&gt;&lt;/code&gt;, which I installed
manually as instructed in the Microsoft documentation, because “apt install
opentabletdriver” failed when only version 10 was installed. It reported no
errors when version 8 was installed as well.&lt;/p&gt;
&lt;p&gt;After reading &lt;a class="reference external" href="https://learn.microsoft.com/fr-be/dotnet/core/runtime-discovery/troubleshoot-app-launch?pivots=os-linux"&gt;this&lt;/a&gt;
I thought okay, it’s trying to use the default version (10), let’s set
&lt;span class="target" id="index-0"&gt;&lt;/span&gt;&lt;code class="xref std std-envvar docutils literal notranslate"&gt;&lt;span class="pre"&gt;DOTNET_ROOT&lt;/span&gt;&lt;/code&gt; so that it finds the old version.&lt;/p&gt;
&lt;p&gt;Indeed I have the following:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;$ cat /etc/dotnet/install_location
/usr/lib/dotnet
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;I said “locate dotnet” to find out that I have a directory
&lt;cite&gt;/usr/share/dotnet/shared/Microsoft.NETCore.App/8.0.31&lt;/cite&gt;, which seems to be the
root directory of the version 8 because it contains a lot of files.&lt;/p&gt;
&lt;p&gt;I then (after reading &lt;a class="reference external" href="https://serverfault.com/questions/413397/how-to-set-environment-variable-in-systemd-service"&gt;this&lt;/a&gt;)
said “sudo nano /usr/lib/systemd/user/opentabletdriver.service” and added the
following line in the &lt;code class="docutils literal notranslate"&gt;&lt;span class="pre"&gt;[Service]&lt;/span&gt;&lt;/code&gt; section:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;DOTNET_ROOT=/usr/share/dotnet&amp;quot;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Now the driver loads, and the pencil works! But the mouse pointer is about 4 cm
to the right of where it should be. And it doesn’t click. Seems that it needs
calibration or something.&lt;/p&gt;
&lt;p&gt;I need to open the OTD GUI. Usually this would go using:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;otd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gui&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;But because OTD requires the old .NET version, I must use the same trick as with
the driver:&lt;/p&gt;
&lt;div class="highlight-default notranslate"&gt;&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="n"&gt;DOTNET_ROOT&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dotnet&lt;/span&gt; &lt;span class="n"&gt;otd&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;gui&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Gemini tells me:&lt;/p&gt;
&lt;blockquote&gt;
&lt;div&gt;&lt;p&gt;If the cursor moves but tapping the pen on the glass doesn’t left-click,
OpenTabletDriver isn’t passing the pressure threshold as a digital click event
to Linux. [1] (&lt;a class="reference external" href="https://opentabletdriver.net/Wiki/FAQ/Linux"&gt;https://opentabletdriver.net/Wiki/FAQ/Linux&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;In the OTD GUI, click on the Pen Settings tab. Look at the Tip Binding
configuration. Click the … (Advanced Binding Editor) next to Tip.&lt;/p&gt;
&lt;/div&gt;&lt;/blockquote&gt;
&lt;p&gt;These instructions don’t work exactly as is, but today I’m too tired to play
with such things. That’s for tomorrow.&lt;/p&gt;
&lt;/section&gt;
</description><guid isPermaLink="false">https://luc.lino-framework.org/blog/2026/0913.html</guid><pubDate>Sun, 13 Sep 2026 00:00:00 +0000</pubDate></item></channel></rss>