fix: 修复驱动检测与版本号显示
- 修复 driver 名称获取:使用 QFileInfo::symLinkTarget() 替代 QDir::dirName(), 解决驱动名恒为 'driver' 的问题 - 添加开源内核驱动版本号支持:amdgpu/radeon/nouveau/i915 等显示内核版本 - 添加卡片 tooltip 三行信息(显卡/驱动/版本号)的翻译条目
This commit is contained in:
@@ -83,11 +83,13 @@ void GraphicsDriverApplet::detectGpus()
|
|||||||
|
|
||||||
gpu.name = parseGpuName(line);
|
gpu.name = parseGpuName(line);
|
||||||
|
|
||||||
// 检测驱动
|
// 检测驱动:通过 symlink 目标获取真实驱动名
|
||||||
QString sysPath = "/sys/bus/pci/devices/0000:" + gpu.pciId + "/driver";
|
QString sysPath = "/sys/bus/pci/devices/0000:" + gpu.pciId + "/driver";
|
||||||
QDir driverDir(sysPath);
|
QFileInfo driverLink(sysPath);
|
||||||
if (driverDir.exists()) {
|
if (driverLink.exists() && driverLink.isSymLink()) {
|
||||||
gpu.driver = driverDir.dirName();
|
QString target = driverLink.symLinkTarget();
|
||||||
|
// symLinkTarget 返回如 ".../drivers/nvidia",提取最后一段
|
||||||
|
gpu.driver = target.section('/', -1);
|
||||||
|
|
||||||
// 读取驱动版本
|
// 读取驱动版本
|
||||||
gpu.driverVersion = readDriverVersion(gpu.driver);
|
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();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -186,6 +186,7 @@ AppletItem {
|
|||||||
model: root.ready ? root.deviceInfo.split("\n").filter(function(line) { return line.trim().length > 0 }) : []
|
model: root.ready ? root.deviceInfo.split("\n").filter(function(line) { return line.trim().length > 0 }) : []
|
||||||
|
|
||||||
delegate: Rectangle {
|
delegate: Rectangle {
|
||||||
|
id: gpuCard
|
||||||
width: gpuColumn.width
|
width: gpuColumn.width
|
||||||
height: 72
|
height: 72
|
||||||
color: root.cardBackground
|
color: root.cardBackground
|
||||||
@@ -193,6 +194,16 @@ AppletItem {
|
|||||||
border.width: 1
|
border.width: 1
|
||||||
border.color: root.cardBorder
|
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 {
|
RowLayout {
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.margins: 12
|
anchors.margins: 12
|
||||||
@@ -327,6 +338,23 @@ AppletItem {
|
|||||||
return info
|
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 厂商简称
|
// 识别 GPU 厂商简称
|
||||||
function parseGpuVendorShort(info) {
|
function parseGpuVendorShort(info) {
|
||||||
var name = info.toLowerCase()
|
var name = info.toLowerCase()
|
||||||
|
|||||||
@@ -28,5 +28,20 @@
|
|||||||
<source>Refresh</source>
|
<source>Refresh</source>
|
||||||
<translation>刷新</translation>
|
<translation>刷新</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>GPU: </source>
|
||||||
|
<translation>显卡名称:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>Driver: </source>
|
||||||
|
<translation>驱动:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>Version: </source>
|
||||||
|
<translation>版本号:</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|||||||
@@ -28,5 +28,20 @@
|
|||||||
<source>Refresh</source>
|
<source>Refresh</source>
|
||||||
<translation>重新整理</translation>
|
<translation>重新整理</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>GPU: </source>
|
||||||
|
<translation>顯示卡名稱:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>Driver: </source>
|
||||||
|
<translation>驅動:</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../package/driverview.qml"/>
|
||||||
|
<source>Version: </source>
|
||||||
|
<translation>版本號:</translation>
|
||||||
|
</message>
|
||||||
</context>
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
|||||||
Reference in New Issue
Block a user