- Python 91.1%
- JavaScript 5.6%
- Makefile 3.2%
- CSS 0.1%
Dock D-Bus + live keyboard-docked indicator, keyboard-backlight slider, and stylus libwacom tablet files. |
||
|---|---|---|
| .forgejo/workflows | ||
| data | ||
| gnome-extension | ||
| packaging | ||
| scripts | ||
| tests | ||
| zenbook_duo_control | ||
| zenbook_duod | ||
| .gitignore | ||
| CHANGELOG.md | ||
| LICENSE | ||
| Makefile | ||
| PACKAGING.md | ||
| pyproject.toml | ||
| README.md | ||
| RELEASE.md | ||
fedora-zenbook-duo-ctl
A control utility that makes the ASUS Zenbook Duo (UX8406) behave under Fedora the way it does under Windows with the proprietary driver suite — keyboard backlight in both docked and Bluetooth modes, automatic bottom-screen and brightness handling, dual-screen rotation, per-display touch, and battery/power control — all toggleable from a native GNOME GUI.
Status: in development. The keyboard-backlight daemon (USB + Bluetooth) is implemented and verified on hardware; display, rotation, touch mapping, power control, and the GNOME GUI are in progress.
Target hardware
- Model: 2025 Zenbook Duo (UX8406CA) — should apply to other UX8406 variants
- Distro: Fedora 42, GNOME 48.8 (Wayland), kernel 6.19+
Features
- Keyboard backlight in both docked (USB) and detached (Bluetooth) modes
- Automatic bottom screen on/off when the keyboard is removed/placed
- Display brightness sync between the two panels (with
max_brightnessscaling) - Automatic dual-screen rotation from the accelerometer
- Per-display touchscreen / stylus mapping — touch on a panel controls that panel
- Battery charge limit (
charge_control_end_threshold) - Platform profile (quiet / balanced / performance)
- Native GNOME GUI: Quick Settings extension + a libadwaita settings app
- Runs in the user session (not gdm); privilege via udev rules, no
sudo - Optional, off-by-default Wi-Fi/Bluetooth toggle on dock change
Architecture
One control point, three faces:
zenbook-duod— a Python session daemon that is the sole owner of hardware and policy. Event-driven (keyboard dock/undock, accelerometer, brightness, power events) with an idempotent state reconciler.- GNOME Shell extension — Quick Settings toggles and a live keyboard-docked indicator.
zenbook-duo-control— a GTK4/libadwaita settings app for full configuration.
Configuration lives in a GSettings schema (org.zenbookduo) shared by all
three; live state is exposed over a small session D-Bus interface. Privileged
hardware nodes are made group-writable by udev rules, so nothing runs as root.
Install
Packaging is in progress. The target distribution is an RPM built by Forgejo CI and served from a Forgejo RPM registry, installable with
dnf:# one-time: add the repo (URL provided once the registry is published) sudo dnf config-manager addrepo --from-repofile=<forgejo-rpm-repo-url> sudo dnf install fedora-zenbook-duo-ctlFor development, a
Makefileprovidesmake install/make uninstall.
The package enables the zenbook-duod user service on install. Because a
user service can't be started from a package scriptlet, log out and back in
(or reboot) to start it — or start it now without re-login:
systemctl --user --now enable zenbook-duod.service
Device access is granted automatically to your active session (a logind
uaccess udev rule), so no group changes or sudo are needed.
GNOME Shell extension
A Quick Settings extension ships with the package (Fedora 42/43/44 → Shell 48/49/50). Enable it once per user:
gnome-extensions enable zenbook-duo-ctl@jd.jdneer.com
(Log out and back in first if it was just installed, so the Shell picks it up.) It adds panel toggles for auto-rotate, brightness sync, the bottom screen, and touch mapping, a keyboard-backlight slider, and a "keyboard docked" status icon (shown only while the keyboard is attached, driven by the daemon over D-Bus).
A full settings window is also available — launch Zenbook Duo Control from
your apps, or run zenbook-duo-control — with sliders for the backlight level,
charge limit, and scale, plus the platform-profile selector.
Uninstalling
systemctl --user --now disable zenbook-duod.service # stop it in your session
sudo dnf remove fedora-zenbook-duo-ctl
Removal disables the unit and deletes every installed file. The dnf remove step
cannot stop the daemon in your live session (a package scriptlet runs as root,
outside your session) — hence the explicit --user disable above; logging out
also stops it. Your personal settings remain in dconf; wipe them with
dconf reset -f /org/zenbookduo/ if desired.
License
MIT — see LICENSE.