Первый открытый Linux-драйвер для OLED-экрана на крышке ASUS Zenbook — ZenVision. ASUS поставляет софт для этого дисплея только под Windows (внутри MyASUS). Энтузиаст полностью разобрал протокол через Ghidra, и теперь можно управлять экраном из Linux.
Сам экран — это 3,5-дюймовая монохромная панель 256×64 пикселя, спрятанная в крышке ASUS Zenbook 14X OLED Space Edition (UX5401ZAS). Внутри — микроконтроллер Nuvoton M480 с USB ID 0b05:8835. Важный нюанс: это не DRM-дисплей, ты не получишь /dev/fb. Вместо этого нужно через небольшую команду-рукопожатие отправить кадровый буфер (4-битная градация серого, 256×64) на bulk endpoint. Все детали в PROTOCOL.md.
Для работы нужны Python 3.9+, библиотеки pyusb, Pillow и системный libusb-1.0. Без root не обойтись, но можно скопировать udev-правило — обязательно с префиксом 70-, чтобы оно сработало до 73-seat-late.rules. Тогда uaccess даст доступ вошедшему пользователю, и sudo не понадобится.
Статичную картинку покажешь командой sudo ./zenvision.py image picture.png, очистку — --white, выключение — off. Для анимации нужна папка с кадрами: sudo ./zenvision.py anim frames/ --fps 20. Яркость регулируется ключом --bright 0xff, но шкала примерная — настраивай на глаз. В комплекте идёт демо-скрипт examples/spark_demo.py, который генерирует вращающуюся звёздочку в папку frames/.
Драйвер работает только с vendor-интерфейсом, HID не трогает — неудачные команды на HID могут мягко перезагрузить MCU (он переподключится). Панель питается от прошивки, переживает переподключение, а в случае проблем всё лечится перезагрузкой.
Проект независимый, под лицензией MIT, к ASUS не имеет отношения — никаких бинарников или декомпилированного кода от вендора не прилагается. Если у вас другой ASUS с OLED на крышке — автор просит завести issue с lsusb, моделью и результатами тестов.