DDE Shell Dock 硬件监控插件(org.deepin.ds.dock.hwmonitor)是一个运行在 deepin/UOS v25(dde-shell 2.x)任务栏(Dock)上的插件,直接在任务栏中以文字形式实时显示本机硬件信息,左键点击可弹出设置面板进行个性化配置。
org.deepin.ds.dock.hwmonitor
代码仓库在GitHub:https://github.com/crazy-zxx/dde-dock-hwmonitor
displayMode
dockPosition
netInterface
auto
light
dark
width_*
# 一键打包 ./build-deb.sh # 生成 dde-dock-hwmonitor_1.0.8_amd64.deb ./build-deb.sh 1.1.0 # 指定版本号 # 安装(对方机器) sudo apt install ./dde-dock-hwmonitor_1.0.8_amd64.deb # 卸载 sudo apt remove dde-dock-hwmonitor
deb 包安装内容:插件库、QML 界面、DConfig 元数据、23 种语言翻译、开始菜单 .desktop 入口 + 多尺寸 PNG/SVG 图标、启动脚本 /usr/bin/hwmonitor-launcher。
.desktop
/usr/bin/hwmonitor-launcher
cmake -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release cmake --build build sudo cmake --install build systemctl --user restart dde-shell@DDE.service
依赖:libdde-shell-dev(≥2.0)、libdtk6core-dev、libdtk6gui-dev、qt6-base-dev、qt6-declarative-dev、qt6-tools-dev、cmake、ninja。
libdde-shell-dev
libdtk6core-dev
libdtk6gui-dev
qt6-base-dev
qt6-declarative-dev
qt6-tools-dev
适用范围:Deepin 25 / UOS 25(dde-shell 2.x,amd64)。
数据来源:CPU /proc/stat(两次采样差值)、内存 /proc/meminfo、GPU sysfs gpu_busy_percent 或 nvidia-smi、温度 /sys/class/hwmon/*/temp*_input、网速 /proc/net/dev。 二、开发过程说明(deepin Skills 辅助开发) 1. 技术选型 需求是"任务栏(Dock)上的硬件监控 + 点击弹出设置面板"。通过 dde-shell-development skill 判断:这属于 dde-shell 插件体系(DApplet → Containment → Panel 三层模型),根元素用 AppletItem,插件 ID 规则 org.deepin.ds.dock.*,Plugin.Parent 指向 org.deepin.ds.dock,而不是 dde-tray-loader 的 PluginsItemInterfaceV2 托盘体系。 2. 使用的 deepin Skills 及作用
数据来源:CPU /proc/stat(两次采样差值)、内存 /proc/meminfo、GPU sysfs gpu_busy_percent 或 nvidia-smi、温度 /sys/class/hwmon/*/temp*_input、网速 /proc/net/dev。
/proc/stat
/proc/meminfo
sysfs gpu_busy_percent
nvidia-smi
/sys/class/hwmon/*/temp*_input
/proc/net/dev
需求是"任务栏(Dock)上的硬件监控 + 点击弹出设置面板"。通过 dde-shell-development skill 判断:这属于 dde-shell 插件体系(DApplet → Containment → Panel 三层模型),根元素用 AppletItem,插件 ID 规则 org.deepin.ds.dock.*,Plugin.Parent 指向 org.deepin.ds.dock,而不是 dde-tray-loader 的 PluginsItemInterfaceV2 托盘体系。
AppletItem
org.deepin.ds.dock.*
Plugin.Parent
org.deepin.ds.dock
PluginsItemInterfaceV2
references/plugin-development.md
references/api/qml-api.md
references/api/core.md
Applet
D_APPLET_CLASS(HwMonitorApplet)
#include "xxx.moc"
ds_install_package
/usr/share/dsg/configs/org.deepin.dde.shell/
hwmonitorapplet.cpp
load()
init()
MonitorBackend
/proc
while(!atEnd())
readAll()
Settings
SettingsPanel.qml
dockOrder
finishEdit()
qquickspinbox_p.h
TypeError
onClicked
increase()/decrease()
valueChanged
valueModified
onValueChanged
initialized
componentComplete()
enabled=false
Qt.quit()
dde-shell@DDE.service
Restart=always
Icon=
hwmonitor-launcher
build-deb.sh
pkexec dpkg -i
dde-shell --list
journalctl --user
[hwmonitor] applet constructed/load/init
ffmpeg x11grab
tesseract
xdotool
dde-dconfig get/set
整个开发以 dde-shell-development skill 为纲(确定插件体系、Applet 生命周期、QML API、打包与加载排查),dtk-development skill 为辅(DConfig 持久化、DTK 控件、主题),从骨架搭建、数据采集、设置面板到打包分发逐步完成。过程中通过"阅读 skill 参考文档 → 定位宿主源码(Qt/dtkdeclarative)→ 截屏 OCR + xdotool 端到端实测"的方式解决了 /proc 读取、SpinBox 聚焦失效、图标命名等实际问题,最终交付了功能完整、可打包分发(deb + 开始菜单入口 + 单实例启动)的 Dock 硬件监控插件。
No replies yet
Featured Collection
Popular Events
一、项目文档
1. 项目简介
DDE Shell Dock 硬件监控插件(
org.deepin.ds.dock.hwmonitor)是一个运行在 deepin/UOS v25(dde-shell 2.x)任务栏(Dock)上的插件,直接在任务栏中以文字形式实时显示本机硬件信息,左键点击可弹出设置面板进行个性化配置。代码仓库在GitHub:https://github.com/crazy-zxx/dde-dock-hwmonitor
displayMode:single 单行 / double 双行dockPosition:left 任务栏左侧 / right 任务栏右侧netInterface:留空统计全部非回环网卡,或指定单个网卡(如 wlp3s0)auto跟随系统;light/dark手动指定width_*为每个条目数值预留固定字符宽度(0=自动),避免数值位数变化导致任务栏抖动3. 安装方式
方式一:.deb 包(推荐分发)
deb 包安装内容:插件库、QML 界面、DConfig 元数据、23 种语言翻译、开始菜单
.desktop入口 + 多尺寸 PNG/SVG 图标、启动脚本/usr/bin/hwmonitor-launcher。方式二:源码构建
依赖:
libdde-shell-dev(≥2.0)、libdtk6core-dev、libdtk6gui-dev、qt6-base-dev、qt6-declarative-dev、qt6-tools-dev、cmake、ninja。适用范围:Deepin 25 / UOS 25(dde-shell 2.x,amd64)。
4. 使用说明
5. 技术架构
3. 各阶段的 Skill 调用与实现
3.1 插件骨架搭建(dde-shell-development)
references/plugin-development.md、references/api/qml-api.md、references/api/core.md:AppletItem,附加属性Applet(id/pluginId/parent/rootObject)D_APPLET_CLASS(HwMonitorApplet)+#include "xxx.moc"工厂注册,缺了会导致编译通过但无法加载org.deepin.ds.dockds_install_package安装插件包、DConfig 元数据装到/usr/share/dsg/configs/org.deepin.dde.shell/hwmonitorapplet.cpp:构造 →load()(创建 Settings/Backend)→init()(启动采集、主题联动)。3.2 硬件数据采集(dtk-development 配合)
MonitorBackend用 QTimer 定时刷新:CPU/proc/stat差值、内存/proc/meminfo、网速/proc/net/dev(排除 lo)、温度 sysfs、GPU 兼容 amdgpu/nvidia。/proc虚拟文件 size=0,while(!atEnd())一次都不读 → 改用readAll()解析,解决"内存/网速一直 0"。3.3 设置面板(dtk-development:DConfig + DTK 控件)
Settings封装 DConfig 读写(themeMode/displayMode/dockPosition/netInterface/itemOrder/itemVisible/itemWidth/fontFamily/fontSize/颜色/enabled)。SettingsPanel.qml用 D.RadioButton/D.ComboBox/D.SpinBox/D.CheckBox/D.Switch/D.ToolButton/D.Button 实现全部设置项。3.4 对话中迭代解决的具体问题(按时间线)
/proc读取方式。netInterface)。dockOrder:左 5 / 右 21)。width_*,等宽字体 + 左对齐。finishEdit(),经查 Qt 6.8qquickspinbox_p.h源码确认该方法已被移除,会报TypeError;onClicked调用increase()/decrease()只发valueChanged不发valueModified,导致设置不保存;onValueChanged写回,并用initialized标志防止 C++componentComplete()阶段把默认值 0 钳制到 6 时误写配置(曾导致 fontSize 被写成 6);enabled=false+ 停止后端采集 +Qt.quit()退出进程(利用dde-shell@DDE.service的Restart=always1 秒自动恢复任务栏)。.desktop+ SVG/多尺寸 PNG 图标;排查"图标不显示"发现是Icon=名与文件名不匹配;启动脚本hwmonitor-launcher加 flock 单实例锁 + 运行状态检查,防止重复点击重复启动。3.5 构建、打包与测试验证
build-deb.sh一键打 deb(含 postinst 自动刷新 DConfig/桌面数据库/图标缓存),本机用pkexec dpkg -i纳入 dpkg 管理。dde-shell --list确认插件被发现;journalctl --user查[hwmonitor] applet constructed/load/init与 QML 错误;ffmpeg x11grab截屏 +tesseractOCR 定位任务栏/面板控件坐标,用xdotool模拟点击/输入做端到端验证(如:输入字号 12+回车→点向上按钮→配置 12→13);dde-dconfig get/set直接读写配置验证持久化与"退出/重新启用"机制。4. 总结
整个开发以 dde-shell-development skill 为纲(确定插件体系、Applet 生命周期、QML API、打包与加载排查),dtk-development skill 为辅(DConfig 持久化、DTK 控件、主题),从骨架搭建、数据采集、设置面板到打包分发逐步完成。过程中通过"阅读 skill 参考文档 → 定位宿主源码(Qt/dtkdeclarative)→ 截屏 OCR + xdotool 端到端实测"的方式解决了
/proc读取、SpinBox 聚焦失效、图标命名等实际问题,最终交付了功能完整、可打包分发(deb + 开始菜单入口 + 单实例启动)的 Dock 硬件监控插件。