Reverse-Engineered Userspace Driver for Asus ZenVision Lid OLED on Linux"

berlianta1 pts0 comments

GitHub - tarpediem/zenvision-linux: Linux userspace driver for the ASUS ZenVision lid OLED (Zenbook 14X OLED Space Edition, UX5401ZAS) — 256x64 monochrome panel over USB · GitHub

/" data-turbo-transient="true" />

Skip to content

Search or jump to...

Search code, repositories, users, issues, pull requests...

-->

Search

Clear

Search syntax tips

Provide feedback

--><br>We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Cancel

Submit feedback

Saved searches

Use saved searches to filter your results more quickly

-->

Name

Query

To see all available qualifiers, see our documentation.

Cancel

Create saved search

Sign in

/;ref_cta:Sign up;ref_loc:header logged out"}"<br>Sign up

Appearance settings

Resetting focus

You signed in with another tab or window. Reload to refresh your session.<br>You signed out in another tab or window. Reload to refresh your session.<br>You switched accounts on another tab or window. Reload to refresh your session.

Dismiss alert

{{ message }}

tarpediem

zenvision-linux

Public

Notifications<br>You must be signed in to change notification settings

Fork

Star

main

BranchesTags

Go to file

CodeOpen more actions menu

Folders and files<br>NameNameLast commit message<br>Last commit date<br>Latest commit

History<br>6 Commits<br>6 Commits

docs

docs

examples

examples

packaging/aur/zenvision-linux-git

packaging/aur/zenvision-linux-git

udev

udev

.gitignore

.gitignore

CLAUDE.md

CLAUDE.md

LICENSE

LICENSE

PROTOCOL.md

PROTOCOL.md

README.md

README.md

requirements.txt

requirements.txt

zenvision.py

zenvision.py

View all files

Repository files navigation

zenvision-linux

🟢 The first open-source Linux driver for the ASUS ZenVision lid OLED — the<br>protocol was reverse-engineered from scratch (Ghidra on MyASUS). Want live<br>applets and audio-reactive visualisers on top? See the companion app<br>zenvision-studio .

Userspace Linux driver for the ASUS ZenVision lid OLED — the 3.5", 256×64<br>monochrome screen embedded in the lid of the ASUS Zenbook 14X OLED Space<br>Edition (UX5401ZAS) .

ASUS only ships software for this screen on Windows (inside MyASUS). This project<br>reverse-engineers the USB protocol and lets you drive the panel from Linux:<br>show images, play animations, or display whatever you like.

Status: working on UX5401ZAS. Other ASUS lid-OLED models may use a similar<br>protocol — reports and PRs welcome.

How it works

The lid screen is a Nuvoton M480 USB device (0b05:8835). It is not a DRM<br>display — you don't get a /dev/fb; instead you push a 256×64, 4-bit-grayscale<br>framebuffer to a bulk endpoint after a small command handshake. Full details in<br>PROTOCOL.md.

Requirements

Python 3.9+

pyusb and Pillow

libusb-1.0

Raw USB access (root, or the provided udev rule)

python -m venv .venv && . .venv/bin/activate<br>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)<br>sudo ./zenvision.py image picture.png

# White test pattern / clear<br>sudo ./zenvision.py image --white<br>sudo ./zenvision.py off

# Play a folder of frames as a smooth animation<br>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<br>frames/ folder you can feed to anim:

pip install pillow<br>python examples/spark_demo.py --out frames --w 256 --h 64<br>sudo ./zenvision.py anim frames/ --fps 20

Want a logo? Render any monochrome 256×64 frames into a folder and point anim at<br>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/<br>sudo udevadm control --reload-rules && sudo udevadm trigger

The 70- prefix matters: the rule must sort before 73-seat-late.rules so the<br>uaccess tag is applied — otherwise the ACL is never granted. uaccess gives the<br>logged-in user access (the right mechanism on systemd; no plugdev group needed).<br>Then run without sudo.

Notes & safety

The panel is firmware-powered and survives a re-plug; experiments are recoverable<br>with a reboot. Sending malformed control reports on the HID interface can soft-reset<br>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:<br>lsusb, your model number, and whether the framing here works. The protocol doc<br>is written to make porting straightforward.

License

MIT.

About

Linux userspace driver for the ASUS ZenVision lid OLED (Zenbook 14X OLED Space Edition, UX5401ZAS) — 256x64 monochrome panel over...

zenvision linux asus oled sudo udev

Related Articles