参赛方向:方向二(任务栏托盘插件,基于 dde-tray-development)+ 方向三(DTK 创新原生应用,基于 dtk-development) 参赛作品版本:0.0.2(2026-08-20 发布)
dde-tray-development
dtk-development
dtk-update 是一个基于 DTK6 的系统更新管理托盘小程序:它在 DDE 任务栏以托盘插件形式常驻,监控系统软件包更新并托管更新、安装、卸载、清理等操作。与一般更新器"绑死某个发行版"不同,dtk-update 把包管理操作放在可插拔后端抽象之下,统一委托给系统包管理器(apt/dpkg、dnf/rpm、pacman、zypper、linyaps/玲珑 等),因此一份代码可以跨 deepin/UOS、Debian、Ubuntu、Fedora、Arch、openSUSE 等多个发行系运行,并天然支持玲珑、snap、flatpak 等跨发行系沙箱应用生态。
项目提供四种形态的入口:deepin/UOS 任务栏托盘插件(PluginsItemInterfaceV2)、不依赖 dde-dock 私有接口的 freedesktop 通用托盘(QSystemTrayIcon)、独立 DTK 主窗口(dtk-update-gui)、以及可选的 D-Bus/systemd 用户守护进程(dtk-update-daemon)。四个入口共用同一份 src/indicator 共享核心与 src/core 纯业务逻辑,保证行为一致。
PluginsItemInterfaceV2
QSystemTrayIcon
dtk-update-gui
dtk-update-daemon
src/indicator
src/core
.deb
pkexec
sudo
PackageBackend
BackendFactory
^Inst/
Installing:
.rpmnew
.rpmsave
.rpmorig
*.pacnew
*.pacsave
*.pacorig
rc
backend.conf
com.deepin.dock.PluginsItemInterface_V2
Type_Tray | Attribute_CanSetting
init()
src/core 纯业务逻辑(与 UI 无关,完整单元测试) package/ PackageBackend(抽象) · Apt/Dnf/Pacman/Zypper(系统后端) · Linyaps/Snap/Flatpak(沙箱后端) · BackendFactory · PackageParser dependency/ DependencyResolver(后端 dry-run 解析) security/ SecurityAdvisor(deepin 安全中心 D-Bus + 上游公告 + 最近通知) healthcheck/ PreUpdateCheck / PostUpdateCheck(预检/后检,只读探测) monitor/ UpdateMonitor(状态机 + 定时调度,聚合沙箱后端) src/indicator UpdateIndicator(与桌面环境解耦的共享核心,两个托盘复用)+ UpdateDialogs src/tray dde-tray-loader 插件(PluginsItemInterfaceV2,仅 deepin/UOS) src/tray-generic 跨发行系 freedesktop 托盘(QSystemTrayIcon,无 dde-dock 私有依赖) src/ui 独立 DTK 主窗口(DMainWindow) src/daemon 后台 D-Bus 服务(com.dtk.update.Daemon) tests core 层 GoogleTest 单元测试
核心设计约束:包管理写操作一律 pkexec 提权;src/core 禁止包含 Dock/Tray/UI 头文件;后端接线集中化(attachSandboxBackends 一行调用接入全部沙箱后端);一切探测只读、一切写操作先经用户确认。
attachSandboxBackends
从 https://github.com/taotieren/dtk-update/releases 下载对应架构的 .deb(支持 amd64 / arm64 / loong64 三架构),然后:
sudo apt install ./dtk-update_0.0.2_<架构>.deb
安装完成后,deepin 25 任务栏即可在托盘区域看到 dtk-update 图标;dtk-update-gui 主窗口与 dtk-update-tray-generic 通用托盘、dtk-update-daemon 守护进程同步安装。
dtk-update-tray-generic
编译依赖(Debian/Ubuntu/Deepin/UOS 下,与 debian/control 的 Build-Depends 一致):
debian/control
Build-Depends
sudo apt-get install -y \ cmake debhelper-compat pkg-config \ qt6-base-dev qt6-tools-dev \ libdtk6core-dev libdtk6gui-dev libdtk6widget-dev libdtk6log-dev \ libgtest-dev libpolkit-qt6-1-dev libxkbcommon-dev
dde-dock-dev 为可选依赖:仅存在于 deepin/UOS 源(beige 中由 dde-tray-loader-dev 提供)。未安装时 CMake 自动跳过 src/tray 插件,其余目标照常编译;在 deepin 25 上安装它即可编出完整托盘插件。
dde-dock-dev
dde-tray-loader-dev
src/tray
git clone https://github.com/taotieren/dtk-update.git cd dtk-update && mkdir build && cd build cmake .. make -j$(nproc) ctest --output-on-failure # 单元测试 sudo make install
sudo apt remove dtk-update
NotShowIn=deepin
--show-config
说明:以下为建议截图清单,正式发帖时在此处插入实际截图。
本作品在开发全程通过 CodeBuddy(AI 编程工具)加载并使用 deepin 官方 Skills,主要包括:
flags
icon()
DApplication
DMainWindow
DConfig
DLogManager
github-actions-templates
codebuddy-md-improver
AGENTS.md
开发中 deepin Skills 的关键帮助点:
项目模块划分思路参考了开源项目 arch-update(预检/后检分离、托盘集成、配置透明化);包管理实现针对多发行版通过可插拔后端抽象重写,未直接照搬其 Rust 实现。引用部分已在 README 中说明。
说明:正式发帖时在此处插入 CodeBuddy 中实际调用 deepin Skills 的对话记录截图。
维护者信息复用仓库 git 配置(git config user.name / git config user.email):
git config user.name
git config user.email
taotieren
admin@taotieren.com
git@github.com:taotieren/dtk-update.git
Featured Collection
Popular Events
【deepin插件开发活动】dtk-update —— 跨发行版 DTK 系统更新管理托盘插件
一、作品简介
dtk-update 是一个基于 DTK6 的系统更新管理托盘小程序:它在 DDE 任务栏以托盘插件形式常驻,监控系统软件包更新并托管更新、安装、卸载、清理等操作。与一般更新器"绑死某个发行版"不同,dtk-update 把包管理操作放在可插拔后端抽象之下,统一委托给系统包管理器(apt/dpkg、dnf/rpm、pacman、zypper、linyaps/玲珑 等),因此一份代码可以跨 deepin/UOS、Debian、Ubuntu、Fedora、Arch、openSUSE 等多个发行系运行,并天然支持玲珑、snap、flatpak 等跨发行系沙箱应用生态。
项目提供四种形态的入口:deepin/UOS 任务栏托盘插件(
PluginsItemInterfaceV2)、不依赖 dde-dock 私有接口的 freedesktop 通用托盘(QSystemTrayIcon)、独立 DTK 主窗口(dtk-update-gui)、以及可选的 D-Bus/systemd 用户守护进程(dtk-update-daemon)。四个入口共用同一份src/indicator共享核心与src/core纯业务逻辑,保证行为一致。二、源码仓库
.deb(见下)三、功能特性(功能介绍)
3.1 核心能力
pkexec/polkit 提权执行,绝不在进程内sudo,进程级并发锁防止 GUI 与托盘同时触发系统写入。PackageBackend抽象接口 +BackendFactory自动探测。系统后端按发行系自动匹配(apt→Debian 系、dnf→Fedora 系、pacman→Arch 系、zypper→openSUSE 系);沙箱后端(linyaps/玲珑、snap、flatpak)与发行系正交、逐个独立探测,0/1/N 个均合法。新增一个发行版只需继承基类、登记注册表两步,无需改动任何 UI。^Inst/与 DNFInstalling:格式分流),无结构化输出的后端优雅降级为仅目标包而非失败。.rpmnew/.rpmsave/.rpmorig、Arch*.pacnew/*.pacsave/*.pacorig)、失败的 systemd 单元——均为只读探测、绝不自动处理;具备容器感知,容器内自动跳过宿主状态检查避免误报。pacman(Arch/Manjaro)与 zypper(openSUSE/SLES)作为系统级后端已实现并完整登记,与 apt/dnf 同属发行系强绑定后端,不进入沙箱后端列表。rc状态包、孤儿包)与可清理的下载缓存,交由用户显式清理,绝不自动删除。backend.conf(INI 风格),优先级为用户段 > 全局段 > DConfig > 发行版预设。3.2 设计亮点
src/core保持与 UI 完全无关、可独立单元测试(GoogleTest,全量 70+ 用例);包管理命令、输出解析、可用性探测全部下沉到具体后端。PluginsItemInterfaceV2(IIDcom.deepin.dock.PluginsItemInterface_V2),Type_Tray | Attribute_CanSetting,图标使用主题图标,翻译在init()内自行加载。四、技术架构
核心设计约束:包管理写操作一律
pkexec提权;src/core禁止包含 Dock/Tray/UI 头文件;后端接线集中化(attachSandboxBackends一行调用接入全部沙箱后端);一切探测只读、一切写操作先经用户确认。五、安装方式
5.1 从 Release 安装(推荐,deepin 25 / UOS v25)
从 https://github.com/taotieren/dtk-update/releases 下载对应架构的
.deb(支持 amd64 / arm64 / loong64 三架构),然后:安装完成后,deepin 25 任务栏即可在托盘区域看到 dtk-update 图标;
dtk-update-gui主窗口与dtk-update-tray-generic通用托盘、dtk-update-daemon守护进程同步安装。5.2 从源码构建
编译依赖(Debian/Ubuntu/Deepin/UOS 下,与
debian/control的Build-Depends一致):5.3 卸载
六、使用说明
dtk-update-tray-generic):在非 deepin 发行系(Ubuntu/Fedora/Arch/openSUSE 等)提供同样的更新管理能力,随系统自启;NotShowIn=deepin避免 deepin 上出现重复托盘。dtk-update-gui):独立主窗口,展示完整更新状态、包列表、安全公告与配置(--show-config查看当前配置)。dtk-update-daemon):可选后台服务,订阅系统唤醒与网络状态变化,恢复联网/唤醒后自动触发检查;systemd 用户服务管理。七、演示截图(3-5 张)
dtk-update-gui主窗口(更新状态 + 包列表 + 配置页)八、开发过程与 deepin Skills 的使用
8.1 使用的 deepin Skills 模块
本作品在开发全程通过 CodeBuddy(AI 编程工具)加载并使用 deepin 官方 Skills,主要包括:
dde-tray-developmentPluginsItemInterfaceV2接口(IIDcom.deepin.dock.PluginsItemInterface_V2)、flags(Type_Tray | Attribute_CanSetting)、icon()主题图标、init()内加载翻译等托盘插件规范dtk-developmentDApplication、DMainWindow、DConfig、DCI 图标、DLogManager;debian 打包依赖按 DTK 模块映射;兼容 DTK5 自动探测github-actions-templates.deb)codebuddy-md-improverAGENTS.md项目指南(架构约束、已知坑、发行纪律)开发中 deepin Skills 的关键帮助点:
pkexec)集成方式,保证写操作安全合规。8.2 引用与二次开发说明
项目模块划分思路参考了开源项目 arch-update(预检/后检分离、托盘集成、配置透明化);包管理实现针对多发行版通过可插拔后端抽象重写,未直接照搬其 Rust 实现。引用部分已在 README 中说明。
8.3 AI 编程工具中调用 deepin Skills 的对话记录截图
dde-tray-development技能并按其规范实现PluginsItemInterfaceV2托盘插件的对话记录dtk-development技能进行 DTK6 主窗口 / DConfig / DCI 图标开发的对话记录github-actions-templates生成多架构 CI 打包流水线的对话记录九、与活动要求的对照
dde-tray-development)+ 方向三(DTK 原生应用dtk-update-gui,dtk-development)。debian/control完整声明 Build-Depends,CI 三架构自动打包验证。.deb(活动要求至少 amd64,本作品额外覆盖 arm64、loong64)。十、已知限制
dde-tray-loader-dev的 deepin 系打包环境中编入.deb;其他发行系自动跳过该插件,仅发布通用托盘 + GUI + 守护进程。十一、版本与维护者信息
11.1 版本
11.2 维护者
维护者信息复用仓库 git 配置(
git config user.name/git config user.email):taotierenadmin@taotieren.comgit@github.com:taotieren/dtk-update.git)