Files
JSwitchDisplayApplet/docs/DEVELOPMENT.md
T
Jokul eb90da12f3 feat: 初始化项目骨架
- 创建插件元数据 package/metadata.json
- 实现主插件类 GraphicsDriverApplet (D-Bus通信)
- 实现GPU指示器类 GpuIndicator (设备信息解析)
- 创建QML界面 driverview.qml (驱动管理UI)
- 添加CMake构建配置
- 编写开发指南文档 docs/DEVELOPMENT.md
2026-07-12 19:54:22 +08:00

5.2 KiB
Raw Blame History

开发指南

环境准备

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

相关资源