feat: 添加GPU频率/功耗/风扇监控、温度告警、趋势图、右键菜单、进程列表、GPU切换
第二、三阶段功能: 数据增强(第一阶段): - GPU频率: NVIDIA nvidia-smi clocks.gr, Intel gt/gt0/rps_act_freq_mhz - 显存频率: NVIDIA nvidia-smi clocks.mem - 功耗: NVIDIA nvidia-smi power.draw, AMD hwmon power1_average - 风扇转速: NVIDIA nvidia-smi fan.speed, AMD hwmon fan1_input - 任务栏图标根据最高温度变色(≥80°C红/≥60°C橙) - readGpuStats 每次刷新前重置统计字段,避免残留旧值 交互提升(第二阶段): - 温度告警: GPU温度≥80°C时通过D-Bus发送桌面通知,30秒冷却 - 右键菜单: 使用Qt.labs.platform原生菜单+MenuHelper,支持刷新和GPU切换 - 迷你趋势图: Canvas绘制近60秒温度走势折线 - 英文翻译: 新增en.ts,23条全部翻译 高级功能(第三阶段): - NVIDIA进程列表: nvidia-smi --query-compute-apps查询,弹框中显示进程名和显存占用 - GPU切换: pkexec prime-select set <mode>,弹框按钮+右键菜单,仅PRIME模式显示 其他改进: - 自定义深色主题tooltip替代系统默认白色tooltip - 第一张卡片tooltip显示在下方避免被裁剪 - CMakeLists.txt lupdate添加C++源文件提取tr()翻译 - gpuStats格式扩展为9字段: temp|gpuUsage|memUsage|memUsed|memTotal|gpuClock|memClock|powerDraw|fanSpeed
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QTimer>
|
||||
#include <QVariantList>
|
||||
|
||||
DS_BEGIN_NAMESPACE
|
||||
|
||||
@@ -26,6 +27,10 @@ struct GpuInfo {
|
||||
int memUsage; // 显存使用率 (%),-1 表示不可用
|
||||
int memTotal; // 显存总量 (MB),-1 表示不可用
|
||||
int memUsed; // 显存已用 (MB),-1 表示不可用
|
||||
int gpuClock; // GPU 频率 (MHz),-1 表示不可用
|
||||
int memClock; // 显存频率 (MHz),-1 表示不可用
|
||||
double powerDraw; // 功耗 (W),-1 表示不可用
|
||||
int fanSpeed; // 风扇转速 (%),-1 表示不可用
|
||||
};
|
||||
|
||||
class GraphicsDriverApplet : public DApplet
|
||||
@@ -39,6 +44,8 @@ class GraphicsDriverApplet : public DApplet
|
||||
Q_PROPERTY(QString gpuMode READ gpuMode NOTIFY gpuModeChanged)
|
||||
Q_PROPERTY(QStringList gpuPrimary READ gpuPrimary NOTIFY gpuPrimaryChanged)
|
||||
Q_PROPERTY(bool ready READ ready NOTIFY readyChanged)
|
||||
Q_PROPERTY(QVariantList tempHistory READ tempHistory NOTIFY tempHistoryChanged)
|
||||
Q_PROPERTY(QStringList gpuProcesses READ gpuProcesses NOTIFY gpuProcessesChanged)
|
||||
|
||||
public:
|
||||
explicit GraphicsDriverApplet(QObject *parent = nullptr);
|
||||
@@ -54,9 +61,12 @@ public:
|
||||
QString gpuMode() const;
|
||||
QStringList gpuPrimary() const;
|
||||
bool ready() const;
|
||||
QVariantList tempHistory() const;
|
||||
QStringList gpuProcesses() const;
|
||||
|
||||
Q_INVOKABLE void refreshDeviceInfo();
|
||||
Q_INVOKABLE void refreshStats();
|
||||
Q_INVOKABLE bool switchGpu(const QString &mode);
|
||||
|
||||
signals:
|
||||
void deviceInfoChanged();
|
||||
@@ -66,11 +76,16 @@ signals:
|
||||
void gpuModeChanged();
|
||||
void gpuPrimaryChanged();
|
||||
void readyChanged();
|
||||
void tempHistoryChanged();
|
||||
void gpuProcessesChanged();
|
||||
|
||||
private:
|
||||
void detectGpus();
|
||||
void readGpuStats();
|
||||
void readGpuProcesses();
|
||||
void detectGpuMode();
|
||||
void checkTempAlert();
|
||||
void sendNotification(const QString &summary, const QString &body);
|
||||
static int findDrmCard(const QString &pciId);
|
||||
static QStringList runCommand(const QString &cmd, const QStringList &args);
|
||||
static QString parseGpuName(const QString &line);
|
||||
@@ -84,6 +99,12 @@ private:
|
||||
QString m_gpuMode;
|
||||
QStringList m_gpuPrimary;
|
||||
bool m_ready;
|
||||
// 温度历史:每个 GPU 保留最近 60 个温度采样
|
||||
QVector<QList<int>> m_tempHistory;
|
||||
// NVIDIA 进程列表:每行 "pid|name|usedMemory"
|
||||
QStringList m_gpuProcesses;
|
||||
// 温度告警冷却时间戳
|
||||
qint64 m_lastAlertTime;
|
||||
};
|
||||
|
||||
DS_END_NAMESPACE
|
||||
|
||||
Reference in New Issue
Block a user