All notable changes to Strix Halo Linux Setup will be documented in this file.
th3cavalry/GZ302-Linux-Setup → th3cavalry/strix-halo-linux-setup. All in-tree URL references updated.gz302 identifiers have been renamed:
gz302-setup.sh → strix-halo-setup.shgz302-lib/ → strix-halo-lib/modules/gz302-gaming.sh → modules/gaming.shmodules/gz302-hypervisor.sh → modules/hypervisor.shmodules/gz302-llm.sh → modules/llm.shscripts/uninstall/gz302-uninstall.sh → scripts/uninstall/uninstall.sh/etc/gz302/ → /etc/strix-halo/, ~/.config/gz302/ → ~/.config/strix-halo/gz302-tray.desktop → strix-halo-tray.desktopgz302-linux-setup → strix-halo-setupdevice_detect_mt7925() now passes unescaped ERE | alternation to _lspci_has and _lsusb_has (which use grep -E internally); the previous \| was interpreted as a literal pipe character, causing CAP_MT7925 to silently never be set.device_detect_cs35l41() grep pattern from "CS35L41\|cs35l41" to "cs35l41" since -i already handles case-insensitive matching.strix-halo-lib/display-manager.sh now reads tracked config files with direct redirection, and strix-halo-lib/utils.sh now uses explicit backup copy loops instead of && ... || true chains.strix-halo-lib/device-manager.sh no longer treats unsupported hardware probes as fatal during profile detection, and tests/validate-version-sync.sh now records missing version fields as mismatches instead of aborting early.scripts/sync-device-matrix.sh now preserves the original file mode when rewriting marker blocks, so regenerating the installer matrix no longer drops the executable bit from strix-halo-setup.sh in CI.z13ctl applicability. Only explicitly validated ASUS profiles in strix-halo-lib/device-profile-data.sh now expose the z13ctl backend by default.tests/validate-version-sync.sh now verifies the docs/README.md installer version reference plus display_fix_lib_version() and display_fix_lib_help() in strix-halo-lib/display-fix.sh, closing the remaining release-metadata gaps in CI coverage..github/workflows/validate.yml now runs bash syntax checks and ShellCheck recursively across all shell scripts, including nested helper scripts, instead of validating only a subset of paths.strix-halo-lib/device-profile-data.sh and scripts/sync-device-matrix.sh.CONTRIBUTING.md and docs/testing-guide.md now reflect the recursive validation commands used by CI.strix-halo-lib/device-profile-data.sh as the single source of truth for the known Strix Halo device matrix, with shared profile metadata for detection, capabilities, and documentation.scripts/sync-device-matrix.sh to regenerate the README support table, installer supported-device help text, and external integrations catalog from the shared device-profile manifest.tests/validate-version-sync.sh to enforce the full version contract used by this repository.strix-halo-lib/device-manager.sh now applies exact known-device metadata from the shared profile manifest before falling back to vendor-level generic profiles..github/workflows/validate.yml now runs shell syntax checks, shellcheck, device-profile regressions, command-center Python compile checks, version validation, and generated-content drift detection.--status mention has been removed.strix-halo-lib/device-manager.sh now treats DMI-only Strix Halo matches as an exact known-device allowlist instead of matching broad tokens like max, which reduces false positives on unrelated systems.tuf or a14 substring independently, so unknown ASUS Strix Halo devices fall back to the generic ASUS profile instead of being mislabeled.tests/device-manager-detection.sh, a dependency-free regression script that exercises the Strix Halo platform gate, known-device aliases, fallback behavior, and ASUS capability scoping.CONTRIBUTING.md, strix-halo-lib/README.md, and docs/testing-guide.md to include the new device-detection regression workflow.strix-halo-lib/device-manager.sh now explicitly recognizes HP Mini Workstation (Z2 G1a), Sixunited AXP77, GMKtec EVO-X2, Minisforum MS-S1 Max, AYANEO NEXT 2, and GPD Win 5 in addition to the already-supported GZ302, HP ZBook Ultra G1a, Framework Desktop, and ASUS TUF Gaming A14 profiles.board_name along with vendor, product, and family strings so OEM systems that expose the model through board identifiers are classified more reliably.strix-halo-lib/device-manager.sh now requires confirmed Strix Halo CPU/GPU signatures before enabling hardware-fix, AI, and ASUS control paths. Generic AMD graphics detection no longer marks unrelated systems as supported.strix-halo-setup.sh now treats z13ctl as an ASUS-only backend and limits the GZ302 command-center tray app to profiles where it is actually applicable. Non-ASUS Strix Halo devices no longer see a misleading generic tray-app install path.distrobox is resolvable immediately after install during root-run setup flows.command-center/src/command_center.py now reports the same release version as the rest of the tree.strix-halo-lib/device-manager.sh — new library that reads DMI, lspci, and kernel module state to produce a normalized device profile (DEVICE_VENDOR, DEVICE_MODEL, DEVICE_CLASS, DEVICE_SUPPORT_TIER) and capability flags (CAP_ASUS_WMI, CAP_DETACHABLE_KB, CAP_INTERNAL_OLED, CAP_MT7925, CAP_CS35L41, CAP_Z13CTL, CAP_ROCM). Known device profiles: ASUS ROG Flow Z13 (GZ302), HP ZBook Ultra G1a, Framework Desktop, ASUS TUF Gaming A14, and experimental mini-PC / handheld classes.docs/technical/external-integrations-catalog.md — curated catalog of Strix Halo community projects: z13ctl, Strix-Halo-Control, amd-strix-halo-toolboxes (kyuz0), vLLM, ComfyUI, GameMode, and MangoHUD. Includes device compatibility, install method, trust level, and known kernel bug/fix table.CAP_Z13CTL=true (ASUS ROG hardware). Non-ASUS users are directed to the integrations catalog.strix-halo-setup.sh help text: Updated to list new sections and all supported device classes.strix-halo-lib/utils.sh banner: Subtitle now reads “Strix Halo Linux Setup — AMD Ryzen AI MAX Platform” instead of GZ302-specific text.window.output so the dashboard stays on the screen that actually contains the window instead of teleporting to the active screen.0xe12 breaks suspend on kernel 6.x (Issue #168): Changed amdgpu.dcdebugmask to 0x600 (PSR-SU + Panel Replay disable only) for all supported kernels. The broader 0xe12 mask (which additionally disables DRAM stutter, PSR v1, and IPS) was causing s2idle suspend failures on kernel 6.x — the side LED kept cycling on/off and the battery drained during sleep. Existing bootloader configurations with 0xe12 are automatically normalized to 0x600 on the next installer run. Affected files: strix-halo-lib/kernel-compat.sh, strix-halo-lib/display-fix.sh, scripts/fix-suspend.sh.amdgpu.dcdebugmask=0x600 applies to all supported kernels (not a per-version split).z13ctl --device keyboard|lightbar for zone-specific static colors, brightness, and effects so keyboard and backlight changes stop overwriting each other.display_apply_psr_su_fix() now normalizes the toolkit-managed amdgpu.dcdebugmask bits to a kernel-aware target instead of only OR-ing flags forever. Kernel 6.x keeps 0xe12, while kernel 7.0+ now uses 0x600 to avoid KDE/KWin pageflip freezes while preserving the OLED PSR-SU and Panel Replay fix.amd_pstate=guided detection/update gap (Issue #166): Bootloader detection now recognizes /etc/default/limine, the AMD P-State path updates both default Limine configs and direct limine.conf installs, and the installer regenerates Limine entries with limine-update or limine-mkinitcpio when changes were made.0xe12 unconditionally.strix-halo-setup.sh now ensures the active user is in the users group before running z13ctl setup, resolves the installed z13ctl path when writing sudoers and fallback user units, and keeps command-center power and fan actions on the same direct-or-sudo execution path used by RGB controls.detect_distribution() now treats ID=kali as Debian-based so Kali follows the expected Debian package path for the core installer.scripts/fix-suspend.sh now suggests the current amdgpu.dcdebugmask=0xe12 mask and stops recommending amd_pmc.enable_stb=1 as a general Strix Halo tuning parameter.gz302-rgb-install.sh reinstall reference, and corrected the documented sudoers path for command-center troubleshooting.QMenu/QWidgetAction dashboard popup path that could not be created from tray activation and restored the reliable top-level dashboard window flow.QMenu + QWidgetAction popup so the compact G-Helper-style panel can be shown as a real popup surface near the screen edge.QMenu.sizeHint() and opens in the bottom-right corner of the active screen instead of relying on compositor-controlled top-level placement.Qt.Popup dashboard window with a frameless Qt.Tool window after Qt reported Failed to create grabbing popup without a valid transient parent from tray activation.show() using the real window handle so the compositor has a concrete surface to place.ActivationReason.Unknown, which some tray implementations emit for primary activation instead of Trigger.QStackedWidget/QListWidget sidebar layout and all individual tab methods_on_activated() to call popup_near_tray() + update_ui_states() before showing/home/brandon/command-center/src/gz302_tray.py (old pre-v6.2.0 install). Re-running install-tray.sh now correctly sets the autostart to command_center.py.update_icon() never-blank fallback: Added a QPainter-drawn colored circle+letter icon as fallback so the tray is never blank if SVG rendering is unavailable.legacy/ directory: Deleted gz302-kbd-backlight-listener.py and gz302-kbd-backlight-listener.service — fully superseded by z13ctl./home/brandon/command-center/ install: Removed root-owned copy of old gz302_tray.py that caused the autostart regression.tray-icon → command-center migration block in strix-halo-setup.sh: Migration completed in v5.x; code was unreachable.python-pyqt6-svg package from Arch install commands and requirements.txt: Does not exist as a separate package on Arch/CachyOS — SVG support is bundled in python-pyqt6.gz302_tray/strix-halo-tray pgrep targets in install-tray.sh: Only command_center.py is current..github/copilot-instructions.md: Updated tray-icon/ references to command-center/ throughout.display_apply_psr_su_fix() now regenerates boot artifacts when it merges an existing amdgpu.dcdebugmask= value in /etc/kernel/cmdline (systemd-boot path). This ensures updated dcdebugmask bits are not only written but also applied on reboot for UKI/initramfs-based setups (notably Arch/CachyOS).6.2.1 and synchronized version markers across installer, libraries, modules, command-center, package metadata, and README badge.aboutToShow signal for high reliability./etc/modprobe.d/amdgpu.conf, ensuring amdgpu module parameters such as sg_display=0 and cwsr_enable=0 actually take effect on early-loaded drivers used by Arch, CachyOS, and other initramfs-based setups.amdgpu.dcdebugmask=0xe12 injection for systems using the Limine bootloader.install-tray.sh to remove conflicting launchers from both /usr/share/applications and ~/.local/share/applications.DC_DISABLE_REPLAY = 0x400): Panel Replay was explicitly enabled for DCN 3.5 (Strix Halo) by the amdgpu driver and was never disabled by previous releases. This is the primary cause of persistent flickering on the internal OLED panel.DC_DISABLE_STUTTER = 0x002): On APU with unified memory, DRAM self-refresh causes display memory access latency spikes visible as brief flicker.amdgpu.sg_display=0): Kernel explicitly documents this option for APU flickering under memory pressure (Strix Halo is an APU with unified memory).amdgpu.abmlevel=0): ABM now set via modprobe option (persistent across boots) rather than only at runtime.dcdebugmask mask updated from 0xa10 to 0xe12:
0x002 = DC_DISABLE_STUTTER (new)0x010 = DC_DISABLE_PSR (PSR v1 + PSR-SU)0x200 = DC_DISABLE_PSR_SU (belt-and-suspenders)0x400 = DC_DISABLE_REPLAY (Panel Replay — new, critical)0x800 = DC_DISABLE_IPS (all Idle Power States)/etc/modprobe.d/amdgpu.conf now includes abmlevel=0 and sg_display=0 in addition to ppfeaturemask=0xffff7fff# Version: headers bumped to 5.0.2 across all scriptsamdgpu.dcdebugmask=0xa10 targeting PSR, PSR-SU, and IPS; abmlevel=0 for OLED ABM. Panel Replay not yet addressed (see 5.0.2).strix-halo-lib/display-fix.sh updated for all bootloaders (GRUB, systemd-boot, loader entries, Limine, rEFInd)strix-halo-lib/gpu-manager.sh added abmlevel=0 to modprobe configstrix-halo-lib/kernel-compat.sh for kernel version–aware workarounds (6.14–6.17+)strix-halo-lib/state-manager.sh with atomic file writes and checkpoint systemstrix-halo-lib/display-fix.sh for OLED PSR/dcdebugmask fixesmodules/) downloaded on demand: gaming, LLM, hypervisorstrix-halo-setup.sh) replaces previous multi-script approach/etc/strix-halo/, state under /var/lib/gz302/strix-halo-lib/display-fix.sh): Fixes scrolling artifacts (purple/green glitches, QR-code patterns) on the OLED panel by disabling PSR-SU via amdgpu.dcdebugmask=0x200apply_hardware_fixes() as step 7 — automatically detects and applies on first rundcdebugmask values are OR’d (not overwritten) to preserve other debug flags/etc/kernel/cmdline), and loader entriesamdgpu_dm_debug_mask debugfs noderocm6.2 to rocm7.2 (current stable)https://lmstudio.ai/download/linux redirectchgrp users (OWASP compliance)install_sof_firmware() in main script now delegates to audio-manager.sh library (was 60 lines inline)main() now reads from VERSION file instead of hardcoded “v2.3.13”dcdebugmask value corrected from 0x20 (wrong bit) to 0x200 (DC_DISABLE_PSR_SU)provide_distro_optimization_info call removed from setup_debian_based()gz302-minimal.sh self-references corrected from gz302-minimal-v4.sh to gz302-minimal.shenable_*_services() stub functions and their call sitesapply_hardware_fixes()strix-halo-lib/) for all hardware managerskernel-compat.sh)