From 17e1027ea2184c6ea6961144b064f2779793311d Mon Sep 17 00:00:00 2001 From: Hector Martin Date: Fri, 18 Mar 2022 08:51:42 +0900 Subject: [PATCH] [users] Read product from the device tree on DT platforms Non-DMI platforms may have a device tree instead (e.g. many embedded devices, Apple Silicon Macs). If we find a model string in the DT, use that as a fallback when DMI is not available. Signed-off-by: Hector Martin --- src/modules/users/Config.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 20c9dea6f..72d765f4b 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -339,15 +339,30 @@ guessProductName() if ( !tried ) { QFile dmiFile( QStringLiteral( "/sys/devices/virtual/dmi/id/product_name" ) ); + QFile modelFile( QStringLiteral( "/proc/device-tree/model" ) ); if ( dmiFile.exists() && dmiFile.open( QIODevice::ReadOnly ) ) { dmiProduct = cleanupForHostname( QString::fromLocal8Bit( dmiFile.readAll().simplified().data() ) ); + if ( !dmiProduct.isEmpty() ) + { + tried = true; + return dmiProduct; + } } - if ( dmiProduct.isEmpty() ) + + if ( modelFile.exists() && modelFile.open( QIODevice::ReadOnly ) ) { - dmiProduct = QStringLiteral( "pc" ); + dmiProduct + = cleanupForHostname( QString::fromLocal8Bit( modelFile.readAll().chopped( 1 ).simplified().data() ) ); + if ( !dmiProduct.isEmpty() ) + { + tried = true; + return dmiProduct; + } } + + dmiProduct = QStringLiteral( "pc" ); tried = true; } return dmiProduct;