Linux · 2 min read

How to reflash the firmware on ZSA keyboards – 2021-03-06



The Moonlander Mark I and other ZSA keyboards can receive a modified version of their firmware through a software called Wally. That software sends a binary file generated by the Oryx configurator to the keyboard. Each reflash requires the following steps:

  1. Compiling the desired layout on the Oryx configurator
  2. Open Wally on the command line or use it with its GUI
  3. Follow the steps on the screen (selecting the binary file, pressing the reset button, waiting for the firmware reflash to finish)

Installing Wally’s dependencies on Linux

Wally needs dependencies related to libusb and, addtionally, to GTK3 if you want to use its GUI. According to ZSA’s documentation, these are the packages needed on the most popular Linux distributions:

  • Arch family: gtk3 webkit2gtk libusb
  • Debian family: libusb-dev
  • RHEL family: gtk3 webkit2gtk3 libusb

Creating a udev rule

Udev rules are created so events related to connected devices can be accessed without conceding unnecessary privileges to certain parts of the system.

To create a udev rule for Wally, create a file called 50-wally.rules on /etc/udev/rules.d/ using sudo.


sudo touch /etc/udev/rules.d/50-wally.rules

In that file, you should add the following lines:

# ErgoDox EZ
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789A]?", ENV{MTP_NO_PROBE}="1"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789ABCD]?", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="04[789B]?", MODE:="0666"

# Moonlander e Planck EZ
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", \
    MODE:="0666", \
    SYMLINK+="stm32_dfu"

Finally, make sure your user is part of the plugdev group:


sudo groupadd plugdev

sudo usermod -aG plugdev $USER

Running and using Wally