Reverse-Engineered Userspace Driver for Asus ZenVision Lid OLED on Linux"
Summary
A reverse-engineered open-source Linux userspace driver for the ASUS ZenVision lid OLED screen, allowing users to display images and animations on the 256Γ64 panel that ASUS only officially supports on Windows. The USB protocol was reverse-engineered from the MyASUS app using Ghidra.
View Cached Full Text
Cached at: 06/05/26, 02:09 AM
tarpediem/zenvision-linux
Source: https://github.com/tarpediem/zenvision-linux
zenvision-linux
π’ The first open-source Linux driver for the ASUS ZenVision lid OLED β the protocol was reverse-engineered from scratch (Ghidra on MyASUS). Want live applets and audio-reactive visualisers on top? See the companion app zenvision-studio.
Userspace Linux driver for the ASUS ZenVision lid OLED β the 3.5β, 256Γ64 monochrome screen embedded in the lid of the ASUS Zenbook 14X OLED Space Edition (UX5401ZAS).
ASUS only ships software for this screen on Windows (inside MyASUS). This project reverse-engineers the USB protocol and lets you drive the panel from Linux: show images, play animations, or display whatever you like.
Status: working on UX5401ZAS. Other ASUS lid-OLED models may use a similar protocol β reports and PRs welcome.

How it works
The lid screen is a Nuvoton M480 USB device (0b05:8835). It is not a DRM
display β you donβt get a /dev/fb; instead you push a 256Γ64, 4-bit-grayscale
framebuffer to a bulk endpoint after a small command handshake. Full details in
PROTOCOL.md.
Requirements
python -m venv .venv && . .venv/bin/activate
pip install pyusb pillow
Arch Linux (AUR)
yay -S zenvision-linux-git # installs the `zenvision` CLI + the udev rule
Usage
# Static image (auto-resized to 256x64, converted to grayscale)
sudo ./zenvision.py image picture.png
# White test pattern / clear
sudo ./zenvision.py image --white
sudo ./zenvision.py off
# Play a folder of frames as a smooth animation
sudo ./zenvision.py anim frames/ --fps 20
Brightness: --bright 0xff (scale is approximate; tune by eye).
Generate the demo animation
examples/spark_demo.py renders a generic rotating-starburst animation into a
frames/ folder you can feed to anim:
pip install pillow
python examples/spark_demo.py --out frames --w 256 --h 64
sudo ./zenvision.py anim frames/ --fps 20
Want a logo? Render any monochrome 256Γ64 frames into a folder and point anim at
it. (Tip: rsvg-convert an SVG, or ffmpeg -i clip.gif frames/%03d.png.)
Running without root (udev)
Copy the rule so your user can access the device:
sudo cp udev/70-zenvision.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules && sudo udevadm trigger
The 70- prefix matters: the rule must sort before 73-seat-late.rules so the
uaccess tag is applied β otherwise the ACL is never granted. uaccess gives the
logged-in user access (the right mechanism on systemd; no plugdev group needed).
Then run without sudo.
Notes & safety
- The panel is firmware-powered and survives a re-plug; experiments are recoverable with a reboot. Sending malformed control reports on the HID interface can soft-reset the MCU (it re-enumerates cleanly) β this driver only uses the vendor interface.
- This is an independent, unofficial project. Not affiliated with or endorsed by ASUS.
- No ASUS firmware, binaries, or decompiled code are included or required.
Contributing
If you have another ASUS model with a lid OLED, please open an issue with:
lsusb, your model number, and whether the framing here works. The protocol doc
is written to make porting straightforward.
License
MIT.
Similar Articles
Asus gives the ROX Xbox Ally the OLED screen it deserves
Asus announced the ROG Xbox Ally X20, featuring an OLED screen and control upgrades, but it will only be sold as a limited-edition 20th anniversary bundle with Xreal AR glasses.
Cracking Windows Open: Porting RADV to Win32
Collabora reports on porting the open-source RADV Vulkan driver for AMD GPUs from Linux to Windows, successfully running Counter-Strike 2 via reverse-engineering of the WDDM2 interface.
Reverse engineering the Creative Katana soundbar to control it from Linux
A developer reverse-engineers the proprietary Creative Sound Blaster Katana V2X soundbar USB protocol to control it from Linux, documenting the process of capturing traffic, deobfuscating firmware, and analyzing commands.
Why open source rocks β a new SM750 (Silicon Motion GPU) HDMI Driver
An open-source Linux DRM driver for the Silicon Motion SM750 GPU, supporting high-resolution HDMI output with optimizations for smoother performance.
I turned a $80 RK3562 Android tablet into a Debian Linux workstation
A build system and pre-release Debian 12 image for the Doogee U10 Android tablet (Rockchip RK3562), enabling full Linux functionality without bootloader unlock, reverse engineered from scratch.