LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

Nspawn 容器化绘图板

几年前买了一款便宜的绘画板,高漫 1060pro,最近想着没事玩玩看呗。我并不想污染主系统(gentoo 不想装任何 dotnet 和内核驱动),就想着能否在容器里头驱动这外设,按原理,容器可以使用 xdotool mousemove 200 200 类似命令,就应该能够通过容器来驱动简单的外设才对。

买来之后一直没用它,主要有两个原因。首先呢,是官方没有 Linux 驱动,所以只能使用非官方驱动;其次呢,虽然按照产品线的硬件规格,可以找到兼容的 DIGImend 非官方内核驱动,不过只能作用板子 1/3 的区域。

后面阴差阳错发现另一个基本兼容市面大多数驱动板的项目 OpenTabletDriver,它并不需要我们打上内核补丁,这一下子安装体验就好很多了,但是鉴于当时的限制,高漫 1060pro 是需要自己去 github issue 上找 json 文件适配的,于是可以正常驱动后就卸载不想玩了,因为需要手动去安装配置的,我都觉得是不成熟的体现……

时至今日,再次翻到这绘图板,记忆一下子串起来,就想在 Nspawn 容器里,安装 OpenTabletDriver 来驱动高漫 1060pro,这应该是个折腾但是可行的方案。

首先在 /var/machines 目录下准备一个 debian 镜像:

debootstrap --include=systemd,dbus stable gaoman http://mirrors.ustc.edu.cn/debian

在镜像里头安装 OpenTabletDriver,去其官网下载 OpenTabletDriver.deb,由于其依赖 dotnet-6,所以我们再去 Microsoft 的官网下载 packages-microsoft-prod.deb,接下来就是安装命令:

apt install -y ./packages-microsoft-prod.deb
apt update
apt install -y ./OpenTabletDriver.deb

想驱动板子,需要隐射对应的设备,所以我们在 systemd 的 service 文件配置:

--bind-ro=/tmp/.X11-unix \  
--bind=/dev/dri \  
--bind=/dev/bus \  
--bind=/dev/input \  
--bind=/dev/uinput

DevicePolicy=auto

还有 /dev/hidrawXXX 因为是变动的,我们可以使用 machinectl bind --mkdir gaoman /dev/hidrawXXX 来映射实际的设备。设置好 DISPLAY 对应好 Host 机器,就可以使用 otd-daemon 命令来开启 OpenTabletDriver 的服务,使用 otd-gui 来图形配置模式。

由于 Gentoo 的主机和 Debian 容易的 /etc/group 是对不上号,很容易出现权限问题,所以测试阶段,我们直接在容器里头使用 root 来运行 otd-daemon。受限于 X,在主机也加上 xhost +LOCAL: 直接去忽略用户的权限问题。

测试没问题就开始折腾权限问题,在 /etc/group 统一主机和容器的 id,在容器里头改动的有:

root:x:0:chongwish
dialout:x:20:chongwish
audio:x:18:chongwish
video:x:27:chongwish
plugdev:x:272:chongwish
input:x:97:chongwish
chongwish:x:1000:
usb:x:85:chongwish

然后执行 chmod 660 /dev/hidrawXXchmod 660 /dev/uinput 就可以让用户有对触摸板的使用权。

现在假定 OpenTabletDriver 运行在 opentablet 容器,Xournal 运行在 application 容器,这时候也需要 application 有对 /dev/input/dev/uinput 的映射才能使用,主机的应用则不用。

最后再脚本化下,以后就可以忽略主机,直接在任何 Linux 发行版,不污染主机环境使用国产的绘画板,感觉还是挺不错的~