Skip to content

Commit adf1bf1

Browse files
committed
fix: simplify shell and improve hardware detection
1 parent 2b4e998 commit adf1bf1

6 files changed

Lines changed: 197 additions & 173 deletions

File tree

src/backend/nvidia/detector.cpp

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ NvidiaDetector::NvidiaDetector(QObject *parent) : QObject(parent) {}
1414
NvidiaDetector::GpuInfo NvidiaDetector::detect() const {
1515
GpuInfo info;
1616

17+
info.displayAdapterName = detectDisplayAdapterName();
1718
info.name = detectGpuName();
1819
info.found = !info.name.isEmpty();
1920
info.driverVersion = detectDriverVersion();
@@ -50,7 +51,11 @@ QString NvidiaDetector::activeDriver() const {
5051
}
5152

5253
QString NvidiaDetector::verificationReport() const {
53-
const QString gpuText = m_info.found ? m_info.name : tr("None");
54+
const QString gpuText = m_info.found
55+
? m_info.name
56+
: (m_info.displayAdapterName.isEmpty()
57+
? tr("None")
58+
: m_info.displayAdapterName);
5459
const QString versionText =
5560
m_info.driverVersion.isEmpty() ? tr("None") : m_info.driverVersion;
5661

@@ -70,6 +75,39 @@ void NvidiaDetector::refresh() {
7075
emit infoChanged();
7176
}
7277

78+
QString NvidiaDetector::detectDisplayAdapterName() const {
79+
if (!CapabilityProbe::isToolAvailable(QStringLiteral("lspci"))) {
80+
return {};
81+
}
82+
83+
CommandRunner runner;
84+
85+
const auto result =
86+
runner.run(QStringLiteral("lspci"), {QStringLiteral("-mm")});
87+
88+
if (!result.success())
89+
return {};
90+
91+
const QStringList lines = result.stdout.split(QLatin1Char('\n'));
92+
for (const QString &line : lines) {
93+
if (line.contains(QStringLiteral("VGA"), Qt::CaseInsensitive) ||
94+
line.contains(QStringLiteral("3D controller"), Qt::CaseInsensitive) ||
95+
line.contains(QStringLiteral("Display controller"),
96+
Qt::CaseInsensitive)) {
97+
static const QRegularExpression re(QStringLiteral("\"([^\"]+)\""));
98+
auto it = re.globalMatch(line);
99+
QStringList parts;
100+
while (it.hasNext())
101+
parts << it.next().captured(1);
102+
103+
if (parts.size() >= 3)
104+
return parts[2];
105+
}
106+
}
107+
108+
return {};
109+
}
110+
73111
QString NvidiaDetector::detectGpuName() const {
74112
if (!CapabilityProbe::isToolAvailable(QStringLiteral("lspci"))) {
75113
return {};

src/backend/nvidia/detector.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ class NvidiaDetector : public QObject {
99

1010
Q_PROPERTY(bool gpuFound READ gpuFound NOTIFY infoChanged)
1111
Q_PROPERTY(QString gpuName READ gpuName NOTIFY infoChanged)
12+
Q_PROPERTY(QString displayAdapterName READ displayAdapterName NOTIFY
13+
infoChanged)
1214
Q_PROPERTY(QString driverVersion READ driverVersion NOTIFY infoChanged)
1315
Q_PROPERTY(bool driverLoaded READ driverLoaded NOTIFY infoChanged)
1416
Q_PROPERTY(bool nouveauActive READ nouveauActive NOTIFY infoChanged)
@@ -24,6 +26,7 @@ class NvidiaDetector : public QObject {
2426
struct GpuInfo {
2527
bool found = false;
2628
QString name;
29+
QString displayAdapterName;
2730
QString driverVersion;
2831
QString vbiosVersion;
2932
bool driverLoaded = false;
@@ -38,6 +41,7 @@ class NvidiaDetector : public QObject {
3841

3942
bool gpuFound() const { return m_info.found; }
4043
QString gpuName() const { return m_info.name; }
44+
QString displayAdapterName() const { return m_info.displayAdapterName; }
4145
QString driverVersion() const { return m_info.driverVersion; }
4246
bool driverLoaded() const { return m_info.driverLoaded; }
4347
bool nouveauActive() const { return m_info.nouveauActive; }
@@ -63,6 +67,7 @@ class NvidiaDetector : public QObject {
6367

6468
private:
6569
QString detectGpuName() const;
70+
QString detectDisplayAdapterName() const;
6671
QString detectDriverVersion() const;
6772
bool isPackageInstalled(const QString &packageName) const;
6873
bool isModuleLoaded(const QString &moduleName) const;

0 commit comments

Comments
 (0)