eb90da12f3
- 创建插件元数据 package/metadata.json - 实现主插件类 GraphicsDriverApplet (D-Bus通信) - 实现GPU指示器类 GpuIndicator (设备信息解析) - 创建QML界面 driverview.qml (驱动管理UI) - 添加CMake构建配置 - 编写开发指南文档 docs/DEVELOPMENT.md
5.2 KiB
5.2 KiB
开发指南
环境准备
1. 克隆dde-shell仓库
# 克隆dde-shell到本地
git clone https://github.com/linuxdeepin/dde-shell.git ~/dde-shell
# 或者作为子模块引入
git submodule add https://github.com/linuxdeepin/dde-shell.git third_party/dde-shell
2. 安装构建依赖
# Debian/Deepin系统
sudo apt build-dep .
# 或手动安装依赖
sudo apt install -y \
cmake \
g++ \
qt6-base-dev \
qt6-tools-dev \
libdtk6-core-dev \
libdtk6-widget-dev
3. 配置CMake
# 创建构建目录
mkdir build && cd build
# 配置,指定dde-shell路径
cmake .. -Ddde-shell_DIR=~/dde-shell/build
开发步骤
步骤1: 获取D-Bus接口定义
查看deepin-graphics-driver-manager的D-Bus接口:
# 克隆仓库
git clone https://github.com/linuxdeepin/deepin-graphics-driver-manager.git
# 查看接口定义
cat deepin-graphics-driver-manager/com.deepin.daemon.GraphicsDriver.xml
接口方法:
GetDevice()- 获取显卡设备信息(返回JSON字符串)GetCurrDriverName()- 获取当前驱动名称GetNewDriverName()- 获取推荐驱动名称PrepareInstall(name, language)- 准备安装驱动TestInstall()- 测试安装RealInstall()- 实际安装CancelInstall()- 取消安装
信号:
ReportProgress(ratio)- 安装进度报告(ratio为百分比字符串)Cancel()- 安装取消通知
步骤2: 适配D-Bus接口
编辑graphicsdriverapplet.cpp,根据实际接口调整:
// 检查D-Bus服务是否可用
QDBusConnection bus = QDBusConnection::sessionBus();
if (!bus.isConnected()) {
qWarning() << "Cannot connect to D-Bus session bus";
return false;
}
// 检查服务是否存在
QDBusInterface interface(
"com.deepin.daemon.GraphicsDriver",
"/com/deepin/daemon/GraphicsDriver",
"com.deepin.daemon.GraphicsDriver",
bus
);
if (!interface.isValid()) {
qWarning() << "GraphicsDriver service is not available";
return false;
}
步骤3: 完善GPU设备检测
根据GetDevice()返回的JSON格式,调整解析逻辑:
{
"vendor": "NVIDIA",
"model": "GeForce GTX 1660 Ti",
"driverVersion": "470.103.01",
"driverStatus": "installed",
"drivers": [
{
"name": "nvidia-driver-470",
"version": "470.103.01",
"description": "NVIDIA Driver 470 (推荐)"
},
{
"name": "nvidia-driver-460",
"version": "460.103.01",
"description": "NVIDIA Driver 460"
}
]
}
步骤4: 添加图标资源
创建icons/目录并添加图标:
mkdir icons
# 添加显卡图标(可以从deepin图标库获取)
wget https://github.com/linuxdeepin/deepin-icon-theme/raw/master/icons/deepin/scalable/apps/graphics-card.svg -P icons/
在QML中引用:
Image {
source: "qrc:/icons/graphics-card.svg"
}
步骤5: 测试插件
# 构建
cmake -Bbuild
cmake --build build
# 安装到本地测试
cmake --install build --prefix ~/.local
# 启动dde-shell测试模式
dde-shell -t
步骤6: 调试技巧
# 查看D-Bus服务
qdbus | grep GraphicsDriver
# 监听D-Bus信号
dbus-monitor "interface='com.deepin.daemon.GraphicsDriver'"
# 查看插件日志
QT_LOGGING_RULES="dde.shell*=true" dde-shell -t
常见问题
1. 插件未加载
检查metadata.json格式是否正确:
{
"Plugin": {
"Version": "1.0",
"Id": "org.deepin.ds.graphics-driver",
"Url": "driverview.qml",
"Category": "DDE"
}
}
2. D-Bus连接失败
确认deepin-graphics-driver-manager服务已启动:
# 检查服务状态
systemctl status deepin-graphics-driver-manager
# 手动启动服务
sudo deepin-graphics-driver-manager -d
3. 权限问题
安装驱动需要root权限,确保PolicyKit配置正确:
# 检查PolicyKit规则
pkaction --action-id com.deepin.daemon.GraphicsDriver --verbose
代码规范
命名规范
- 类名:
PascalCase(如GraphicsDriverApplet) - 方法名:
camelCase(如refreshDeviceInfo) - 常量:
UPPER_SNAKE_CASE(如DBUS_SERVICE) - 成员变量:
m_前缀(如m_dbusInterface)
文件组织
- 头文件:类声明、信号、槽、Q_PROPERTY
- 实现文件:构造函数、方法实现、D_APPLET_CLASS宏
- QML文件:界面布局、交互逻辑
发布流程
1. 版本号更新
更新CMakeLists.txt中的版本号:
project(dde-graphics-driver-applet VERSION 1.0.0 LANGUAGES CXX)
2. 构建Debian包
dpkg-buildpackage -uc -us -nc -b
3. 测试安装
sudo dpkg -i ../dde-graphics-driver-applet_1.0.0_amd64.deb
4. 提交到官方仓库
# Fork仓库后
git remote add upstream https://github.com/linuxdeepin/dde-shell.git
git push origin master
# 创建Pull Request