Files
2026-06-16 15:13:04 +08:00

130 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ktouch V2
适配 UOS 和麒麟 V10 的触摸屏映射校准工具。支持多屏环境下自动检测触摸屏与显示器对应关系,计算校准矩阵并写入系统,解决触摸紊乱问题。
## 功能
- **图形化配置** — 全屏窗口引导用户依次点击各显示器,自动建立触摸屏与显示器的映射
- **后台守护** — systemd 服务持续监控屏幕/触摸屏/USB 变化,自动触发重新校准
- **显示器管理** — 内置显示器设置工具(kdisplay),支持分辨率、旋转方向调整
- **旋转适配** — 校准矩阵自动适配屏幕旋转(横屏/竖屏/倒置)
- **签字笔支持** — 传统方式配置签字笔设备
- **现场诊断** — kscreen-debug 脚本快速排错,kscreen-log 采集日志
## 架构
```
opt/ktouch/
├── kscreen-remap-daemon # ← 主控进程(Python),systemd 服务入口
├── kscreen-setup # 配置脚本:拉起 screen_binder → 解析结果 → 写入 config
├── kscreen-remap # 单次校准:读取 config → 计算矩阵 → 写入 libinput
├── screen_binder # GUI:全屏窗口 + 触摸检测,输出显示器-触摸屏对应表
├── screen_ds # 显示器监控:检测分辨率/坐标变化,写入 screen.txt
├── screen_ds_once # 单次更新显示器信息(screen_ds 阉割版)
├── touch_ds # 触摸屏监控:检测矩阵变化,写入 touchmap.txt
├── touch_set # 校准计算:根据配置计算变换矩阵,写入 libinput
├── usb_ds # USB 监控:检测触摸屏插拔,写入 usbadd.txt
├── check_save # 二次确认窗口:允许用户放弃本次校准
├── kdisplay # 显示器设置 GUI 工具
├── display_monitor.py # 分辨率变化监控脚本
├── kscreen-debug # 现场排错脚本
├── kscreen-log # 日志采集脚本
├── kscreen-fix-daemon # 服务修复脚本
├── desktops/ # 桌面快捷方式
├── forest-light/ # 主题文件
└── config # 触摸屏配置文件
```
**运行流程:**
1. `kscreen-remap-daemon` 作为 systemd 服务启动,拉起各监控进程
2. 高频轮询 `screen.txt`(显示器变化)、`usbadd.txt`USB 插拔)
3. 低频轮询 `touch_ds` 检测触摸矩阵变化
4. 任一条件触发 → `kscreen-remap` 执行校准
5. 用户可通过快捷方式手动触发 `kscreen-setup` 重新配置映射
## 显示器设置(UOS 专属)
UOS 环境下可通过 `kdisplay` 调用系统显示服务(`com.deepin.daemon.Display`)调整显示器参数,与触摸校准联动。
```
kdisplay ───DBus──► com.deepin.daemon.Display
│ │
│ GUI 操作 ├── 分辨率 / 旋转 / 主屏切换
│ · 刷新检测 ├── SwitchMode 合并显示模式
│ · 设置分辨率 └── Save 持久化
│ · 旋转方向
│ · 指定主显示器 display_monitor.py
│ · 自定义分辨率 后台持续检测分辨率变化
│ 通知 kscreen-remap-daemon 重新校准
└── 应用并保存 → 重启显示服务
```
**主要功能:**
| 功能 | 说明 |
|------|------|
| 分辨率设置 | 列出当前显示器支持的 60Hz 模式,支持自定义分辨率 |
| 旋转方向 | 支持正常 / 左转90° / 右转90° / 翻转 |
| 主显示器 | 可指定任意已启用的显示器为主显示器 |
| 自定义分辨率 | 非标分辨率写入 `display_config/` 目录,重启后保持 |
| 排列示意图 | 右侧画布实时展示多屏几何排列 |
自定义分辨率配置文件存放在 `opt/ktouch/display_config/`,格式为 `<显示器名>`
**用法:**
```bash
# GUI 方式
/opt/ktouch/kdisplay
# 命令行快捷方式
kdisplay
```
> 仅在 UOS 环境下可用(依赖 D-Bus 服务 `com.deepin.daemon.Display`)。
> 麒麟 V10 不支持此功能。
## 编译
```bash
# 依赖
sudo apt install libinput-tools python3-evdev python3-pyudev
sudo apt install libevdev-dev libinput-dev libmtdev-dev libudev-dev libwacom-dev
# 编译
cd src
make # 仅编译到 src/
make install # 编译并安装到 ../opt/ktouch/
make clean
```
## 打包
```bash
# 先确保二进制已编译安装
cd src && make install
# 打包为 .deb
chmod +x build_deb.sh
./build_deb.sh # 输出到当前目录
./build_deb.sh ~/dist/ # 输出到指定目录
```
脚本自动从 `DEBIAN/control` 读取包名、版本、架构,生成 `ktouch_<版本>_<架构>.deb`
## 安装
```bash
sudo dpkg -i ktouch_*.deb
# postinst 会自动配置 systemd 服务、快捷方式、用户组权限
# 安装完成后需重启以使 input 组生效
```
## License
MIT