#693

Draft: experimental Bazzite support with locally signed drivers

DraftJalawoudwants to merge intofrom

Runtime regression: do not install app release 4.bazzite yet. On 2026-10-31 the local build and all six selected component tests passed, but the tester reported black video and frozen/very slow input when connecting with Artemis after installation. Rolling back to app release 3.bazzite restored streaming. The retained-inhibitor KDE workaround remains the qualified sleep solution. The saved log shows encoder probes and saved-topology restore failures during startup, but no client connection attempt, so the cause is not yet established. Source/Force Close changes remain unqualified; investigation is in progress. No new build is requested.

This draft adds an opt-in Fedora Atomic/Bazzite RPM profile and consolidates fixes used to get Vibepollo streaming successfully on a Bazzite NVIDIA Open machine. The ordinary native Linux package lifecycle remains the default.

Changes

  • Package the app without mutable-host service/DKMS installer scriptlets; preserve the trusted KWin bridge mode in RPM metadata and require a separate driver package.
  • Build and sign kernel-specific DRM/DS5 modules locally, keep the signing key root-only, verify signed payload hashes after packaging, and regenerate module indexes through RPM scriptlets.
  • Replace the boot-time DRM rebuild/status path with checks of the packaged driver.
  • Preserve identical extended attributes without rewriting a read-only SELinux label; continue to fail on unsuccessful required metadata changes.
  • Recognize Fedora Atomic's root-owned /home -> /var/home alias while retaining private-path checks; accept existing mixed-case desktop account names in setup and the controller.
  • Remove the pinned NVIDIA runtime's unused build-machine RPATH from its installed copy and supply the missing versioned RPM capability for its bundled hashed CUDA runtime.
  • Include local build/sign/package helpers and a qualification/setup document. No hosted Bazzite workflow is added.

Hardware qualification (tester-reported, 2026-10-29)

Bazzite NVIDIA Open 44 / deployment 44.20261026, KDE Wayland, kernel 7.2.11-ogc4.1.fc44.x86_64, NVIDIA 615.78.08, RTX 5080, Secure Boot enabled and SELinux enforcing. Client: Artemis on an M1 MacBook Air.

Passed: pairing; desktop video/audio/keyboard/mouse; disconnect/reconnect; physical monitor restoration after disconnect; streaming after a fresh reboot and desktop login; logout/login; suspend/resume. Both signed modules loaded, and the tray and mixed-case account fixes were exercised on the machine.

These results came from efd8d7341dba879174529f7319a89d8d0332cb74 plus the local fixes consolidated here. This new consolidated checkout has not yet had a clean end-to-end build/install rerun. Startup logs verified H.264 NVENC initialization; HEVC was the requested client setting, but negotiated stream codec was not independently recorded.

Source validation

  • 6 focused runtime/packaging regression tests passed.
  • 3 CMake package-profile tests passed.
  • 27 existing desktop-tray tests passed.
  • Shell syntax and git whitespace checks passed.
  • Broader installer/controller suites were attempted but could not fully pass in the editing environment: Unix sockets/UID transitions are restricted, and bsdtar/libcap development headers are unavailable. No full-suite pass is claimed.
  • Full app compilation and driver compilation/signing/installation were performed on the tester's PC during qualification.

Why this remains a draft

The driver helper intentionally targets the qualified 7.2.11 kernel. Automatic kernel-update rebuild/sign/deployment handling, clean reinstall and uninstall/rollback recovery, other machines/images, HDR/AV1, controller input, performance measurements, remote-network access and pre-login capture still need work. The Linux tray Force Close implementation is now included; installed runtime qualification remains pending.

The code was AI-assisted and tested interactively by the contributor. Maintainer feedback on the packaging approach and whether to split the general Linux fixes into separate PRs would be welcome.

CI intentionally skipped: the tester requested local builds only. The head commit carries [skip ci]; please do not dispatch hosted builds for this draft without coordination. This is not a request to merge without normal review/qualification.

Build steps, exact tested environment and remaining work: Bazzite README.

Kernel-update preparation prototype

The follow-up commit adds --target-image for a digest-pinned Bazzite NVIDIA Open image: inspect its kernel/headers, compile in an offline rootless target container, reuse the enrolled local key via the trusted host signing tool, and generate an RPM with a distinct kernel/source release plus a signed-image rebase command. It does not execute that command, alter boot selection or reboot. Missing headers, compiler, key or a failed build stop preparation. Eight new policy tests pass. No actual future-kernel build/staging/boot has been qualified yet, and this is not automatic updater integration.

Additional tester report: Wake-on-WLAN from Artemis successfully woke the sleeping host after enabling magic-packet wake for the Wi-Fi connection. This is host network configuration, not a driver/package code change.

Same-kernel update rehearsal passed

Tester report on 2026-10-30: prepared modules in the digest-pinned Bazzite image fecc39b4b278dabd27092d0b0cad01a6ab4ce7eb07b669561150fa77dea684c7, reused the original enrolled certificate (SHA-256 8e6958635553132de3238e36492359bdd643381da7ef9508088c295a0d19ee08), pinned the working deployment, and successfully staged the signed image plus local driver replacement in one rpm-ostree rebase transaction. After reboot, vibepollo-kmod-2.0.2-3.bazzite.k7.2.11_ogc4.1.fc44.x86_64.g32bcc958f899 was installed, both DRM/DS5 modules were loaded, and Artemis streaming/video/audio/input worked without manual startup.

This validates the preparation/package-replacement/reboot path on the same 7.2.11 kernel, not compatibility with a new kernel. Different-kernel qualification and automatic updater integration remain pending. The rehearsal rebased to an immutable image digest; it does not retain a moving stable origin, so subsequent updates require an explicit prepared target until channel/update integration is implemented.

Automatic suspend and Linux tray Force Close

Tester report on 2026-10-31: automatic suspend failed with only Vibepollo / Retained remote display left in PowerDevil. Debug logging showed that it also added InterruptSession; KDE's addInhibitionTypeHelper explicitly implies that policy for ChangeScreenSettings. Rejecting only this retained-display inhibitor through KDE restored automatic sleep, Artemis Wake PC and reconnect. Active-stream inhibition was kept enabled.

Commit f5a0e05dfb5f2d5a847b93cec4091f2cea3d86b2 removes the retained power hold, makes legacy retain-helper modes non-inhibiting, and keeps capture-owned inhibition and reconnect wake. It also adds Force close client to the Linux companion, using the existing pinned/token-scoped apps-close endpoint with an explicit force flag to drain RTSP/WebRTC sessions before native application cleanup. The host remains running and clients stay paired. Existing graceful API requests remain graceful.

Validation for this follow-up: 29 tray tests, 3 package-profile tests, 6 existing runtime-fix tests, machine-service source contracts, shell/Python syntax and whitespace checks passed. A compiled harness executed the actual close handler and checked authorization/content-type denial, malformed and mistyped request rejection, legacy graceful bodies, and force transport-drain ordering. The full app and modified GIO power-helper tests still require the local Fedora build; update-runtime.sh reuses the original qualification checkout/cache, runs those focused checks and packages app release 4.bazzite without installing it. No driver rebuild or key enrollment is needed.

Pending hardware qualification: install this source revision, remove the diagnostic KDE exception, retest automatic sleep/wake/reconnect and the tray action, then test idle display-off/reconnect. The former retained hold was intended to avoid an NVIDIA GSP hang with a virtual-only idle topology; that longer DPMS regression is not established by the two-minute sleep workaround test. This remains a draft.

Activity

5
Jalawoud8d ago

Local hardware test report — 2026-10-30

The experimental Bazzite port is now working for daily desktop streaming on one tested machine. All compilation and hardware validation took place on the contributor's PC; no hosted build is requested.

Setup: Bazzite NVIDIA Open 44 / 44.20261026, KDE Wayland, kernel 7.2.11-ogc4.1.fc44.x86_64, RTX 5080 with NVIDIA 615.78.08, Secure Boot enabled, SELinux enforcing. Client: Artemis on an M1 MacBook Air.

Tester-confirmed passes:

  • Pairing; video, audio, keyboard and mouse.
  • Disconnect/reconnect and physical-monitor restoration.
  • Automatic host startup after reboot and desktop login.
  • Logout/login and suspend/resume recovery.
  • Artemis Wake PC over Wi-Fi after enabling the adapter's supported magic-packet wake setting.
  • Locally signed DRM and DS5 modules load with the enrolled key.

Update-path rehearsal also passed: commit 32bcc958f899ce7d296a4a6e12ea0744a0559123 built drivers inside the exact digest-pinned Bazzite image, reused the original enrolled signing key, and produced the replacement RPM. The tester pinned the working deployment, staged the signed image and replacement driver package in one rpm-ostree transaction, rebooted, and confirmed both modules loaded and Artemis streaming still worked without manual startup.

This was a same-kernel (7.2.11) rehearsal, not a newer-kernel compatibility test. A different-kernel update and automatic updater/channel integration remain unqualified. The test currently uses a digest-pinned origin rather than following the moving stable tag. Clean-install/uninstall recovery, broader hardware, HDR/AV1, controller input, and the Linux tray Force Quit action also remain open. The full consolidated application checkout has not yet had a clean end-to-end installation rerun.

The draft contains reproducible local build/setup notes and is ready for feedback on the packaging/update approach. Happy to split the general Linux fixes into separate PRs if that would make review easier. Please keep hosted CI builds disabled for this draft; testing remains local.

Jalawoud7d ago

need more testers om bazzite please

This pull request is a draft

Merging is unavailable until it is marked ready for review.