diff --git a/graphicsdriverapplet.cpp b/graphicsdriverapplet.cpp index 90ce758..42d55ea 100644 --- a/graphicsdriverapplet.cpp +++ b/graphicsdriverapplet.cpp @@ -83,11 +83,13 @@ void GraphicsDriverApplet::detectGpus() gpu.name = parseGpuName(line); - // 检测驱动 + // 检测驱动:通过 symlink 目标获取真实驱动名 QString sysPath = "/sys/bus/pci/devices/0000:" + gpu.pciId + "/driver"; - QDir driverDir(sysPath); - if (driverDir.exists()) { - gpu.driver = driverDir.dirName(); + QFileInfo driverLink(sysPath); + if (driverLink.exists() && driverLink.isSymLink()) { + QString target = driverLink.symLinkTarget(); + // symLinkTarget 返回如 ".../drivers/nvidia",提取最后一段 + gpu.driver = target.section('/', -1); // 读取驱动版本 gpu.driverVersion = readDriverVersion(gpu.driver); @@ -197,6 +199,17 @@ QString GraphicsDriverApplet::readDriverVersion(const QString &driverName) } } + // 开源内核驱动(如 amdgpu, radeon, nouveau, i915)无独立版本号,版本跟随内核 + static const QStringList kernelDrivers = { + "amdgpu", "radeon", "nouveau", "i915", "i965", "mgag200", "ast", "vmwgfx" + }; + if (kernelDrivers.contains(driverName)) { + QFile osrelease("/proc/sys/kernel/osrelease"); + if (osrelease.open(QIODevice::ReadOnly | QIODevice::Text)) { + return "Linux " + QTextStream(&osrelease).readAll().trimmed(); + } + } + return QString(); } diff --git a/package/driverview.qml b/package/driverview.qml index 798df83..a1e1363 100644 --- a/package/driverview.qml +++ b/package/driverview.qml @@ -186,6 +186,7 @@ AppletItem { model: root.ready ? root.deviceInfo.split("\n").filter(function(line) { return line.trim().length > 0 }) : [] delegate: Rectangle { + id: gpuCard width: gpuColumn.width height: 72 color: root.cardBackground @@ -193,6 +194,16 @@ AppletItem { border.width: 1 border.color: root.cardBorder + ToolTip.text: qsTr("GPU: ") + parseGpuName(modelData) + "\n" + + qsTr("Driver: ") + parseDriverName(modelData) + "\n" + + qsTr("Version: ") + (parseDriverVersion(modelData) || qsTr("Unknown")) + ToolTip.visible: cardHover.hovered + ToolTip.delay: 300 + + HoverHandler { + id: cardHover + } + RowLayout { anchors.fill: parent anchors.margins: 12 @@ -327,6 +338,23 @@ AppletItem { return info } + // 解析驱动名称 + function parseDriverName(info) { + var driver = parseDriverInfo(info) + var parts = driver.split(" ") + return parts[0] || qsTr("Unknown") + } + + // 解析驱动版本号 + function parseDriverVersion(info) { + var driver = parseDriverInfo(info) + var parts = driver.split(" ") + if (parts.length > 1) { + return parts[1] + } + return "" + } + // 识别 GPU 厂商简称 function parseGpuVendorShort(info) { var name = info.toLowerCase() diff --git a/translations/org.deepin.ds.graphics-driver_zh_CN.ts b/translations/org.deepin.ds.graphics-driver_zh_CN.ts index a50e618..c9d185e 100644 --- a/translations/org.deepin.ds.graphics-driver_zh_CN.ts +++ b/translations/org.deepin.ds.graphics-driver_zh_CN.ts @@ -28,5 +28,20 @@ Refresh 刷新 + + + GPU: + 显卡名称: + + + + Driver: + 驱动: + + + + Version: + 版本号: + diff --git a/translations/org.deepin.ds.graphics-driver_zh_TW.ts b/translations/org.deepin.ds.graphics-driver_zh_TW.ts index 4f48244..4020ff1 100644 --- a/translations/org.deepin.ds.graphics-driver_zh_TW.ts +++ b/translations/org.deepin.ds.graphics-driver_zh_TW.ts @@ -28,5 +28,20 @@ Refresh 重新整理 + + + GPU: + 顯示卡名稱: + + + + Driver: + 驅動: + + + + Version: + 版本號: +