Keep the ASUS ScreenPad (the secondary screen on ZenBook Duo / Pro Duo and other ScreenPad Plus laptops) at the same brightness as your main display on Linux.
On Linux, your desktop's brightness slider and brightness keys only control the
primary backlight. The ScreenPad is exposed as a separate backlight device
(asus_screenpad) that nothing keeps in sync, so it stays at a fixed level —
usually much dimmer than the main panel. This is a tiny systemd service that
watches the primary backlight and mirrors its brightness percentage onto the
ScreenPad, so one control drives both screens.
Discovered while fixing this on a Fedora 43 / GNOME 49 ASUS ZenBook Duo (UX482EA), but it should work on any distro and any ASUS laptop that exposes an
asus_screenpadbacklight.
- Blocks on
poll(POLLPRI)of the primary backlight'sactual_brightness. The kernel backlight core callssysfs_notifyon every change, so the daemon reacts instantly with near-zero CPU (no busy polling). - A 2-second timeout fallback re-syncs even if some path changes brightness without notifying.
- Mirrors percentage, mapping the main range (e.g.
0–19200) proportionally onto the ScreenPad range (e.g.0–255). - Primary and ScreenPad backlights are auto-detected (
intel_backlight,amdgpu_bl0, etc.), with environment overrides if needed.
- Linux with the
asus_screenpadbacklight under/sys/class/backlight/(provided by the in-kernelasus-wmi/asus-nb-wmidriver on recent kernels). python3(standard library only).systemd.- Optional:
termcolorfor colored logs.
Check your device exists:
ls /sys/class/backlight/
# you should see asus_screenpad alongside e.g. intel_backlightgit clone https://github.com/Ryxwaer/asus-screenpad-brightness-sync.git
cd asus-screenpad-brightness-sync
sudo ./install.shThen move your brightness slider / press the brightness keys — the ScreenPad follows the main screen. Watch it live:
journalctl -u screenpad-sync.service -f
# e.g. [screenpad-sync] main 60% -> screenpad 153/255sudo ./uninstall.shEdit the top of screenpad-sync.py (then re-run sudo ./install.sh and
sudo systemctl restart screenpad-sync.service):
MIN_SCREENPAD_LEVEL— set>0to never let the ScreenPad go fully dark when you dim all the way down.POLL_TIMEOUT_MS— fallback resync interval.
If auto-detection picks the wrong devices, set environment variables in the unit
(sudo systemctl edit screenpad-sync.service):
[Service]
Environment=MAIN_BACKLIGHT=amdgpu_bl1
Environment=SCREENPAD_BACKLIGHT=asus_screenpadno ScreenPad backlight found— your kernel/driver doesn't exposeasus_screenpad. Make sure you're on a recent kernel withasus-wmi. List what you have withls /sys/class/backlight/and override withSCREENPAD_BACKLIGHTif it's named differently.- ScreenPad doesn't react — confirm the service is running
(
systemctl status screenpad-sync.service) and check the journal. - Permission denied in logs — the service must run as root (the installer sets this up); the sysfs brightness files are root-owned.
Different ASUS models name things differently. If your laptop needs a tweak to auto-detection (a different ScreenPad or panel device name), please open an issue or PR with the output of:
for b in /sys/class/backlight/*; do
echo "$(basename "$b"): type=$(cat "$b/type") max=$(cat "$b/max_brightness")"
doneand your laptop model. Contributions to widen hardware support are very welcome.
MIT — see LICENSE.
