docs: 更新README和设计文档

- README: 移除已废弃的D-Bus接口和依赖,更新为当前实际功能
- README: 添加数据采集方式对比表、QML属性接口文档、安装方式
- 新增 docs/GPU_SWITCH_AND_DRIVER_INSTALL.md: 显卡切换和驱动安装设计方案
This commit is contained in:
2026-07-14 00:23:33 +08:00
parent d5a2c380ab
commit 46854dfd36
2 changed files with 330 additions and 72 deletions
+136 -72
View File
@@ -1,53 +1,100 @@
# 显卡切换任务栏插件
# GPU 显卡驱动管理任务栏插件
Deepin显卡驱动管理任务栏插件,集成到DDE Shell任务栏中,提供显卡设备检测、驱动安装和切换功能
Deepin V25 DDE Shell 任务栏插件,实时检测 GPU 设备、显示驱动信息和温度/使用率监控
## 功能特性
- 自动检测系统显卡设备
- 显示当前安装的驱动版本
- 列出可用的驱动版本
- 一键切换显卡驱动
- 实时显示安装进度
- 安装完成后提示重启
- **GPU 设备检测** - 通过 `lspci` + `sysfs` 检测所有显卡(NVIDIA/AMD/Intel
- **驱动信息显示** - 驱动模块名 + 版本号(NVIDIA 用 nvidia-smi/procAMD 用内核版本)
- **实时温度监控** - NVIDIA 用 `nvidia-smi`AMD 用 `hwmon`2 秒自动刷新
- **GPU 使用率** - 进度条显示,NVIDIA 用 `nvidia-smi`AMD 用 `gpu_busy_percent`
- **显存使用** - 已用/总量 (MB),带使用率百分比
- **主副显标识** - 通过 `boot_vga` 区分主显卡(绿色"主显"标签)
- **GPU 切换模式检测** - 自动识别 PRIME / Bumblebee / Solo / Hybrid 模式
- **国际化** - 支持简体中文、繁体中文、英文
## 截图
```
┌─────────────────────────────────────┐
│ GPU 显卡驱动管理 │
│─────────────────────────────────────│
│ 当前驱动: nvidia, amdgpu [PRIME] │
│─────────────────────────────────────│
│ ┌─────────────────────────────────┐ │
│ │ NV NVIDIA GeForce RTX 3060 主显│ │
│ │ nvidia 580.119.02 │ │
│ │ 54°C 108/6144 MB │ │
│ │ GPU ████░░░░░░ 36% │ │
│ └─────────────────────────────────┘ │
│ ┌─────────────────────────────────┐ │
│ │ AMD AMD Radeon Vega │ │
│ │ amdgpu Linux 6.18.36 │ │
│ │ 90°C 471/512 MB │ │
│ │ GPU ████████░░ 71% │ │
│ └─────────────────────────────────┘ │
│ [ 刷新 ] │
└─────────────────────────────────────┘
```
## 依赖项
- Qt6 >= 6.0
- Dtk6 Core
- deepin-graphics-driver-manager(运行时依赖)
### 构建依赖
```
cmake (>= 3.16)
g++
qt6-base-dev
qt6-l10n-tools # lrelease 翻译编译
libdde-shell-dev # DDE Shell 插件头文件
libdtk6core-dev # DTK6 Core
```
### 运行时依赖
```
dde-shell # 任务栏宿主
lspci # GPU 检测(pciutils 包)
nvidia-smi # NVIDIA 监控(可选,nvidia-driver 包自带)
```
## 构建
```bash
# 安装构建依赖
sudo apt install -y cmake g++ qt6-base-dev qt6-tools-dev libdtk6core-dev
sudo apt install -y cmake g++ qt6-base-dev qt6-l10n-tools libdde-shell-dev libdtk6core-dev
# 构建项目
# 构建
cmake -Bbuild
cmake --build build
```
## 安装
```bash
# 安装插件到系统(deepin v25需关闭磐石)
sudo cmake --install build
### 方式一:一键脚本
# 重启任务栏加载插件
```bash
bash install.sh
```
### 方式二:手动安装
```bash
sudo cmake --install build
systemctl --user restart dde-shell@DDE
```
或者注销并重新登录。
### 方式三:deb 包
```bash
bash build-deb.sh --install
```
## 卸载
```bash
# 卸载插件
sudo rm -f /usr/lib/x86_64-linux-gnu/dde-shell/libdde-graphics-driver.so
sudo rm -rf /usr/lib/x86_64-linux-gnu/dde-shell/org.deepin.ds.graphics-driver
# 重启任务栏
sudo rm -f /usr/lib/x86_64-linux-gnu/dde-shell/org.deepin.ds.graphics-driver.so
sudo rm -rf /usr/share/dde-shell/org.deepin.ds.graphics-driver
systemctl --user restart dde-shell@DDE
```
@@ -55,73 +102,90 @@ systemctl --user restart dde-shell@DDE
```
├── package/
│ ├── metadata.json # 插件元数据
│ └── driverview.qml # QML界面
├── graphicsdriverapplet.h # 主插件类头文件
├── graphicsdriverapplet.cpp # 主插件类实现
├── gpuindicator.h # GPU指示器类头文件
├── gpuindicator.cpp # GPU指示器类实现
├── debian/ # Debian打包文件
├── CMakeLists.txt # 构建配置
── README.md # 项目说明
│ ├── metadata.json # 插件元数据ID、父插件、dockOrder
│ └── driverview.qml # QML 界面(弹窗、卡片、tooltip
├── translations/
│ ├── *_zh_CN.ts # 简体中文翻译
│ └── *_zh_TW.ts # 繁体中文翻译
├── graphicsdriverapplet.h # C++ 插件类头文件
├── graphicsdriverapplet.cpp # C++ 插件类实现
├── debian/ # Debian 打包配置
── docs/ # 设计文档
│ └── GPU_SWITCH_AND_DRIVER_INSTALL.md
├── CMakeLists.txt # 构建配置
├── install.sh # 一键构建安装脚本
├── build-deb.sh # 一键 deb 打包脚本
└── README.md
```
## 技术实现
### 架构设计
### 架构
```
┌─────────────────────────────────────────────────────────
DDE Shell Taskbar
├─────────────────────────────────────────────────────────
dde-graphics-driver-applet
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ │ GPU检测模块 │驱动管理 │ │ UI界面
└─────────────┘ └─────────────┘ └─────────────┘
├─────────────────────────────────────────────────────────┤
D-Bus Interface
com.deepin.daemon.GraphicsDriver
├─────────────────────────────────────────────────────────
│ deepin-graphics-driver-manager │
│ (现有的驱动管理服务,无需修改) │
└─────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────┐
│ DDE Shell Taskbar │
├──────────────────────────────────────────────┤
org.deepin.ds.graphics-driver │
│ ┌──────────┐ ┌──────────┐ ┌───────────
│ │ GPU 检测 │ │ 实时监控 │ │ QML UI │ │
│ lspci │ │ nvidia-smi│ │ 卡片
│ │ sysfs │ │ hwmon │ │ tooltip │ │
│ boot_vga │ │ drm 进度条
└──────────┘ └──────────┘ └───────────┘
──────────────────────────────────────────────
```
### D-Bus接口
### 数据采集方式
插件通过D-Bus与deepin-graphics-driver-manager服务通信:
| 数据 | NVIDIA | AMD/Intel |
|------|--------|-----------|
| GPU 检测 | `lspci -mm` | `lspci -mm` |
| 驱动名 | `/sys/bus/pci/.../driver` symlink | 同左 |
| 驱动版本 | `/proc/driver/nvidia/version` | `/proc/sys/kernel/osrelease` |
| 温度 | `nvidia-smi` | `/sys/class/hwmon/hwmonN/temp1_input` |
| GPU 使用率 | `nvidia-smi` | `/sys/class/drm/cardN/device/gpu_busy_percent` |
| 显存 | `nvidia-smi` | `/sys/class/drm/cardN/device/mem_info_vram_*` |
| 主副显 | `/sys/bus/pci/.../boot_vga` | 同左 |
| 切换模式 | `nvidia-drm-outputclass.conf` 检测 | - |
- `GetDevice()` - 获取显卡设备信息
- `GetCurrDriverName()` - 获取当前驱动名称
- `GetNewDriverName()` - 获取推荐驱动名称
- `PrepareInstall(name, language)` - 准备安装驱动
- `TestInstall()` - 测试安装
- `RealInstall()` - 实际安装
- `CancelInstall()` - 取消安装
### QML 属性接口
### 信号
- `ReportProgress(ratio)` - 安装进度报告
- `Cancel()` - 安装取消通知
| 属性 | 类型 | 说明 |
|------|------|------|
| `applet.ready` | bool | GPU 检测完成 |
| `applet.deviceInfo` | QString | GPU 信息(每行一个) |
| `applet.currentDriver` | QString | 当前驱动列表 |
| `applet.gpuSummary` | QString | GPU 摘要 |
| `applet.gpuStats` | QStringList | 实时统计(temp\|gpu\|mem\|used\|total |
| `applet.gpuMode` | QString | 切换模式(PRIME/Bumblebee/Solo/Hybrid |
| `applet.gpuPrimary` | QStringList | 主副显标识(true/false |
| `applet.refreshStats()` | void | 刷新实时统计 |
| `applet.refreshDeviceInfo()` | void | 重新检测 GPU |
## 使用说明
1. 插件安装后自动加载到任务栏
2. 点击任务栏图标打开驱动管理界面
3. 查看当前显卡设备和驱动信息
4. 选择要切换的驱动版本
5. 确认后开始安装过程
6. 安装完成后选择重启系统
1. 插件安装后自动加载到任务栏右侧
2. **悬停**任务栏图标 - 显示 GPU 温度和使用率摘要
3. **点击**图标 - 打开弹窗,查看详细 GPU 信息
4. 弹窗内数据每 2 秒自动刷新
5. **悬停**卡片 - 显示该 GPU 的驱动详情 tooltip
6. **点击刷新** - 重新检测 GPU 设备
## 开发计划
- [x] GPU 检测与驱动信息显示
- [x] 温度/使用率/显存实时监控
- [x] 主副显标识与 GPU 模式检测
- [ ] PRIME 显卡切换(全局开关)
- [ ] 驱动安装(pkexec + apt
详见 [设计方案文档](docs/GPU_SWITCH_AND_DRIVER_INSTALL.md)
## 许可证
GPL-3.0-or-later
## 贡献
欢迎提交Issue和Pull Request。
## 相关项目
- [dde-shell](https://github.com/linuxdeepin/dde-shell) - Deepin Shell插件系统
- [deepin-graphics-driver-manager](https://github.com/linuxdeepin/deepin-graphics-driver-manager) - 显卡驱动管理器
- [dde-shell](https://github.com/linuxdeepin/dde-shell) - Deepin Shell 插件系统