「LAPTOP/PROJECT-BD」- 增加外置手写支持 | 支持外接屏幕手写数学笔记

实现:确保绘画程序能够正常工作

# 11/28/2023 测试 esrille/paint 程序

git clone https://github.com/esrille/paint

编译安装,参考 docs/en/install.md 即可:

pip install opencv-python

git clone https://github.com/esrille/paint.git
./autogen.sh
make
sudo make install

实现:通过外接屏幕完成绘制图像

# 12/01/2023 通过外接触屏显示器并配备手写笔(hardware),实现在绘画程序上绘制图形。

目标:需要实现 Type C 接入外接屏幕后,屏幕触屏能够正常工作,需要实现手写笔在程序上绘画能够在这个屏幕上写字;

选择外接屏幕

我们应该如何选择触屏显示器?
1)学习普通显示器相关参数及其含义;
2)学习触屏显示器相关参数及其含义;
3)显示器参数:现阶段(12/01/2023),15.6,1920×1080,60Hz,USB Type C(供电+显示)
4)该触摸屏要能够在 Ubuntu Wayland 下正常运行,需要保证外接屏幕能够手写输入;

便携显示器 15.6 寸 144Hz 手机笔记本电脑外接屏 switch/PS5/ 扩展副屏
https://item.taobao.com/item.htm?id=740036183589
469.00 * 1 (12/04/2023)

经过简单测试,通过 Type C 接入,能够实现基础操作(简单手写绘制、多点触控)。

但是,我们发现触摸功能出现在错误的屏幕上:外接屏幕具有触摸功能,当触摸外接屏幕时,笔记本内置屏幕获得触摸操作。—— 这并非屏幕本身的问题,后面我们将解决该问题。

选择手写笔

我们应该如何选择手写笔?
1)针对书写笔,其能够在电容屏幕上书写皆可;

手机平板通用电容笔 7.0 电阻电容两用笔触摸触屏 gps 电子书手写笔游戏儿童绘画适用苹果 iPad 安卓华为小米触控笔 [交易快照]

https://detail.tmall.com/item.htm?id=673773622333

5.90 * 1 (12/04/2023)

算是买错了,我们希望笔尖是电容笔头,能够进行书写。而这款笔尖是 ABS 塑料,无法在电容屏上使用。

视频剪辑专用笔适用剪映抖音代替手指尖头触屏笔点手机修图触摸屏通用屏幕点击电容剪影制作高精度编辑触控笔

https://detail.tmall.com/item.htm?id=680819620882

6.9 * 1 (12/29/2023)

现在(12/31/2023)经过简单的测试,iPhone 备忘录书写正常(体验略差)、Microsoft OneNote 书写失败、Microsoft WhiteBoard 书写失败,符合预期。至于 OneNote、WhiteBoard 的失败,或许是因为其产品本身的特性,手或笔的单点触摸是移动画面。

[WIP] 测试绘画功能

目标:借助外接屏幕,实现在绘画程序中绘制图案。

在前面测试中,我们发现触摸功能出现在错误的屏幕上:外接屏幕具有触摸功能,当触摸外接屏幕时,笔记本内置屏幕获得触摸操作。

The touchscreen is working, but a click on the secondary screen is recorded as a click on the first screen, which is wrong.

我们期望中的方案:通过简单或常见的命令配置来解决,而非引入复杂的其他工具。“简单或常见的命令”泛指类似于 xinput 的命令或工具。

方案一、通过 xinput 修改
Map touchscreen input to correct screen : r/linuxquestions

考虑到桌面环境走向,所以我们使用 Wayland 环境,但是 xinput 无法在 Wayland 环境中使用。所以 xinput –map-to-output ‘G2Touch Multi-Touch’ DisplayPort-2 命名自然无法生效。

若要借助 Xwayland 特性,根据 man xinput 描述「These X Input Extension devices are only visible to other X clients connected to the same Xwayland process.」。但是,针对我们的 Ubuntu 23 桌面环境,pstree -p 5655 -a -T,并无 X Client 运行在 Xwayland 下。

至此,通过 Xwayland + xinput 来解决该问题的方案被彻底否认。

方案二、通过 sway 实现
swaywm/sway: i3-compatible Wayland compositor
sway-input(5) — sway — Debian experimental — Debian Manpages

Sway 是个平铺式窗口管理器(是 i3wm 替代),通过 input.map_to_output 配置(Touch Display Mapping),能够解决该问题。

但是,我们暂时并不想为解决该问题而引入其他窗口或(更换桌面环境)。并且,现在(12/28/2023)的 Sway 并不兼容 Nvidia 显卡驱动。

方案三、退回 X11 环境

现在(01/01/2024)看来,Wayland 是未来的趋势,我们暂时不打算退回 X11 桌面环境。如果最后确实无法解决该问题,那么我们再考虑该方案。

方案四、尝试 udev 方案
Mutter should respect libinput_device_get_output() (#368) · Issues · GNOME / mutter · GitLab
IVI/Mapping multiple touchscreen Wayland – Tizen Wiki

现在(01/02/2024),根据 Tizen Wiki/IVI/Mapping multiple touchscreen Wayland 文档,udev 为我们提供可能性。但是,为了能够理解 udev 相关的配置,需要我们具备 CSnT / Linux Kernel 基础,所以我们需要进行相关知识的学习。

方案五、尝试 Wayland 解决
Touch input – The Wayland Protocol

# 12/28/2023 接下来,我们将尝试能够通过 Wayland 将 Touch 与 Screen 进行绑定;

[WIP] 测试书写效果

#01/03/2024 虽然能够书写,但是体验较差,存在如下问题:

1)屏幕延迟严重,导致绘制曲线时,最终图形轨迹与移动轨迹并不吻合。

2)当手放在屏幕上时,针对触摸屏来说属于多点触控,进而无法正常书写。

通过上面的两个问题,我们意识到,我们还有很长的路要走,我们决定暂时使用 Windows 笔记本电脑。 ⇒ (过渡期)

[WIP] 实现笔记软件支持插入手写对象(handwriting)

目标:需要将手写程序以插件的方式集成到 Zim Desktop Wiki 中;

研究 esrille/paint 程序,将其集成到 Zim Desktop Wiki 中;

研究 GNU Build System 以去除程序中的相关配置;