OptimusUI
Optimus UI ist eine Wrapper-Anwendung, geschrieben in Python, libadwaita und GTK4, für prime-select. Ihr Hauptzweck ist es, eine einheitliche Benutzeroberfläche über verschiedene Linux-Distributionen hinweg bereitzustellen. Außerdem soll sie einfach zu installieren sein, weshalb sie als Flatpak ausgeliefert wird. Auf diese Weise müssen Nutzer nicht darauf angewiesen sein, dass die Maintainer ihrer Distribution eine Benutzeroberfläche für prime-select mitliefern.

In der Vergangenheit haben wir auch eine GNOME-Erweiterung gepflegt, diese sind oft aber nicht ohne weiteres mit neuen Versionen von GNOME kompatibel. Um den Wartungsaufwand zu verringern, haben wir uns daher dafür entschieden, eine eigenständige Anwendung zu entwickeln. Zudem bieten wir diese Anwendung als Flatpak an, damit wir uns nicht mit distributionsspezifischen Abhängigkeiten auseinandersetzen müssen oder OptimusUi in die offiziellen Paketquellen zu bekommen.
Beliebige Berechtigungen
Auf Flathub ist OptimusUI als potenziell unsicher gekennzeichnet, was bis zu einem gewissen Grad zu treffend is. OptimusUI muss auf das prime-select-Binary des Hosts zugreifen, um den Wechsel des GPU-Modus auszulösen. Dafür verwendet es flatpak-spawn --host
gefolgt von entweder pkexec
oder kdesu
, um prime-select
mit Root-Rechten auszuführen. Derzeit gibt es keinen besseren Weg, da Flatpak es nicht ermöglicht, eine Liste von Host-Binaries anzugeben, die dem Sandbox-Prozess zugänglich sind.
Obwohl OptimusUI die "Macht" hat, auf beliebige Bereiche des Host-Systems zuzugreifen, nutzen wir diese Macht nicht außerhalb des Zwecks dieser Anwendung. Den Quellcode der Anwendung können Sie jederzeit hier einsehen.
Zusätzlich greift OptimusUI auf /etc/os-release
des Hosts zu, da innerhalb der Flatpak-Sandbox diese Datei nur Informationen zur verwendeten Flatpak-Runtime angibt. Da jedoch je nach Host-Distribution das von der Distribution bereitgestellte prime-select unterschiedliche Fähigkeiten besitzt, müssen wir die tatsächliche Distribution ermitteln, um zu bestimmen, welches prime-select vorhanden ist und welche Funktionen in der Benutzeroberfläche angeboten werden können.
Einschränkungen
Da OptimusUI als Flatpak-Anwendung ausgeliefert wird, gibt es einige Einschränkungen. Damit OptimusUI funktioniert, benötigt das Host-System prime-select, bbswitch und das NVIDIA-Kernelmodul, welche nicht über Flatpak bereitgestellt werden können. Diese Abhängigkeiten müssen von der jeweiligen Ziel-Distribution selbst zur Verfügung gestellt werden.
Unterstützte Prime-Tools
Je nach verwendeter Linux-Distribution kann das Paket, das das prime-select
-Binary enthält einen anderen Namen tragen. Derzeit unterstützt OptimusUI die folgenden Tools:
- SUSEPrime
- nvidia-prime
- fedora-prime-select
- nvidia-prime-select
Prime-Funktionen
Wenn man sich den Quellcode der Anwendung anschaut, validiert OptimusUI intern die laufende Distribution und das verwendete Prime-Tool, um zu bestimmen, welche Betriebsmodi verfügbar sind, und blendet entsprechend Elemente der Benutzeroberfläche ein oder aus.
SET_BOOT: Das Prime-Tool kann den Betriebsmodus festlegen, der beim Start des Systems angewendet werden soll. Bei jedem Neustart des Systems wird dieser Modus wiederhergestellt.
- Nur unterstützt auf SUSE- und Debian-basierten Distributionen
SET_OFFLOAD: Ein dedizierter Betriebsmodus, bei dem beide GPUs (iGPU und dGPU) aktiv sind und gleichzeitig genutzt werden können. NVIDIA nennt das "PRIME Offloading".
- Nur unterstützt auf SUSE- und Debian-basierten Distributionen
- Funktioniert unter Wayland und X11
SET_NVIDIA: Macht die NVIDIA (dGPU) zur primären GPU die integrierte GPU wird nicht verwendet.
- Unterstützt auf allen Distributionen mit einem unterstützten Prime-Tool
- Funktioniert nur unter X11
SET_INTEGRATED: Macht die iGPU zur einzigen aktiven GPU. Die NVIDIA-GPU wird abgeschaltet, wenn bbswitch installiert ist.
- Funktioniert auf allen Distributionen mit einem unterstützten Prime-Tool
- Die NVIDIA-GPU wird auf SUSE-basierten Distributionen abgeschaltet. Ob das auf anderen Distributionen ebenfalls geschieht, ist unbekannt.
- Funktioniert unter Wayland und X11
GET_CURRENT: Ermöglicht OptimusUI, den aktuell aktiven Betriebsmodus zu ermitteln, z. B. nvidia, integrated oder offload.
- Nur funktional auf SUSE- und Debian-basierten Distributionen
SERVICE: Dieses Prime-Feature ist noch nicht implementiert, da nur SUSE-basierte Distributionen diese Operation derzeit unterstützen.
PRIME Offloading
Wenn das System im Modus Offload
läuft, kann eine Anwendung auf der NVIDIA-GPU ausgeführt werden, indem man folgende Umgebungsvariablen setzt: __GLX_VENDOR_LIBRARY_NAME=nvidia __NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only
gefolgt vom auszuführenden Programm.
Hinweis: Einige Distributionen liefern switcherooctl
aus, das zumindest in GNOME-basierten Desktop-Umgebungen erlaubt, eine Anwendung mit der dedizierten GPU auszuführen, indem man im Anwendungsstarter rechtsklickt und „Mit dedizierter / integrierter GPU ausführen“ wählt.
Um in .desktop-Dateien die bevorzugte GPU anzugeben, kann man in der Sektion [Desktop Entry]
PrefersNonDefaultGPU=true
hinzufügen. Dadurch veranlasst GNOME (und andere switcheroo-aware Desktops), das eine Anwendung auf der GPU auszuführen, die nicht die aktuell aktive ist. Üblicherweise ist die "NonDefaultGPU" die dedizierte GPU. Wenn das System jedoch im Modus Offload läuft und die Anzeige bereits von der dGPU betrieben wird, ist die "NonDefaultGPU" die iGPU.
Das kann auf Desktops mit integrierter GPU im CPU-Chip problematisch sein, wenn der Benutzer diese nicht im BIOS deaktiviert hat und die iGPU somit weiterhin verfügbar ist.
Ohne Flatpak
Obwohl OptimusUI einige Prüfungen durchführt, um zu erkennen, ob es innerhalb oder außerhalb einer Flatpaksandbox läuft, wurde das jedoch nicht umfassend getestet. Theoretisch sollte das aber funktionieren. Der Grund ist, dass Distributionen die Anwendung ggf. ohne Flatpak neu paketieren möchten. Distributionspakete werden von uns jedoch nicht unterstützt. Wenn Sie OptimusUI also nicht von Flathub installiert haben und auf Fehler stoßen, prüfen Sie bitte zunächst, ob diese Probleme auch bei der Flatpak-Version auftreten. Wenn nicht, öffnen Sie bitte ein Fehlerbericht bei Ihrer Distribution.
Testumgebungen
OptimusUI wurde auf den folgenden Systemkonfigurationen getestet:
MSI CX61 0OD
- OS: Aeon, Kalpa
- Desktops: Gnome, KDE Plasma
- dGPU: nVidia GT 730M
- iGPU: Intel HD 4000
- nVidia Treiber: 470.256.02, 470.239.06
- Prime-Tool:
- SUSEPrime: 0.8.17, 0.8.18
- Linux Kernel: 6.xx
- Paketformat: Flatpak
Wann ist OptimusUI / prime-select nützlich?
- GPU auf Turing-Basis (GTX-16 / RTX-20-Serie) oder neuer
- NVIDIA-Treiber 435 oder neuer: NEIN
- NVIDIA-Treiber älter als 435: JA
- Die GPU funktioniert möglicherweise mit älteren Treiber version eh nicht
- GPU auf Pascal-Basis (GTX-10-Serie) oder älter: JA
- Erfordert NVIDIA-Treiber 390 oder neuer
- bbswitch wird empfohlen, um die GPU tatsächlich auszuschalten, da diese und ältere GPUs sich nicht selbstständig abschalten
- Open-Source-NVIDIA-Treiber: NEIN
OptimusUI prüft die meisten dieser Anforderungen automatisch und informiert den Nutzer. Die NVIDIA-Treiberversion wird derzeit jedoch noch nicht validiert.
HINWEIS: Je nach Distribution kann das Paket für prime-select weitere, hier nicht aufgeführte Abhängigkeiten benötigen.
Wie funktioniert OptimusUI?
OptimusUI führt eine kurze Systemprüfung durch. Dabei wird Folgendes überprüft:
- Ob sich prime-select in einem der folgenden Pfade befindet (unter Umgehung der Sandbox mittels flatpak-spawn --host):
/usr/bin/prime-select
/usr/sbin/prime-select
/bin/prime-select
/sbin/prime-select
Sobald ein unterstütztes Prime-Tool identifiziert wurde, durchsucht OptimusUI die Hardware nach Geräten mit dem PCI-Vendor-ID 0x10DE
und der Geräteklasse 0x30000
(Desktop-GPU) oder 0x30200
(Mobile-GPU).
Anschließend wird der Gerätenamen via: lspci -d 10DE:DEVICE_ID
ermittelt.
Zusätzlich sucht OptimusUI nach einem der folgenden Sudo-Tools pkexec
oder kdesu
, um bei Bedarf einen grafischen Authentifizierungsdialog auf dem Host anzuzeigen, falls prime-select
Superuser-Rechte benötigt.
Weiterhin prüft es die Host-Distribution des Nutzers durch: flatpak-spawn --host cat /etc/os-release
und wertet den Inhalt aus.
Schließlich, um eine prime-select-Funktion auszuführen, verlässt OptimusUI die Sandbox und führt je nach Benutzeraktion einen der folgenden Befehle auf dem Host aus:
flatpak-spawn --host [pkexec/kdesu] (-c) prime-select (boot) [nvidia/intel/offload]
flatpak-spawn --host prime-select get-current
Sources
- Flathub: https://flathub.org/apps/de.z_ray.OptimusUI
- Quelltext: https://codeberg.org/ZRayEntertainment/optimus-ui