• v0.1.0 7b6bc0f7b5

    fedora-zenbook-duo-ctl v0.1.0
    All checks were successful
    build / verify (push) Successful in 46s
    release / rpm (push) Successful in 44s
    Stable

    Ghost released this 2026-06-20 14:51:23 +00:00 | 72 commits to master since this release

    Initial release — a user-session daemon that controls the ASUS Zenbook Duo
    (UX8406) keyboard backlight on Fedora/GNOME, with a fully automated,
    self-contained RPM build.

    Keyboard backlight

    • Sets the keyboard backlight level (0–3) over the vendor HID feature report,
      working in both docked (USB, PID 1bf2) and detached (Bluetooth, PID 1bf3)
      modes — the correct hidraw node is found dynamically by its 0x5A report
      descriptor, so the same path works on both transports.
    • Configurable via the org.zenbookduo GSettings schema
      (keyboard-backlight-level); the daemon applies changes live.
    • Idempotent reconciler: re-applies the desired level on startup, keyboard
      dock/undock, and config change, and writes only on an actual change.

    Daemon & system integration

    • Event-driven zenbook-duod daemon on the GLib main loop, with USB hotplug
      observed via a NETLINK_KOBJECT_UEVENT socket and dock state read from sysfs.
    • Runs as a user systemd service, enabled on install via a systemd user
      preset (auto-starts at the next graphical login). Hardware access is granted
      to the active session through a logind uaccess udev ACL — no root, no
      sudo, no group membership, no /etc/sudoers edits.
    • Zero third-party Python dependencies (standard library + PyGObject only).

    Packaging & CI

    • Self-contained, noarch RPM with a fully offline build; Requires only
      python3 and python3-gobject.
    • Two Forgejo Actions workflows (build verification, release) that use no
      external/marketplace actions
      — plain git checkout and a stdlib-only
      release helper authenticated by the built-in Actions token.
    • The RPM is attached to the Forgejo Release for each vX.Y.Z tag; release
      notes are generated from this CHANGELOG.md (with a commit-log fallback).
    Downloads