In case you're in the field and confronted with the task to update a Zebra Printer's Firmware but don't want (or can't) use Zebra's windows-only ZDownloader or Zebra Setup Utilities (both don't seem to work from within Wine) - don't worry: It's actually way easier than it is on Windows and requires only two tools you should have installed on any GNU/Linux or UNIX system anyways: unzip and netcat.
Just follow the next 3 simple steps which worked perfectly for a ZM400 (ZPL) but will probably work for many other Zebra printers as well:
You can download the firmware from Zebra's official website:
https://www.zebra.com/us/en/support-downloads/industrial/zm400.html#downloadlistitem_cd8
Latest for ZM400 is currently: v53-17-22z.exe
The downloaded .exe is actually a self-extracting zip archive (for windows), we can simply unpack with:
$ unzip v53-17-22z.exe
Archive: v53-17-22z.exe inflating: V53.17.22Z.zpl inflating: 14094L-032_v53_17_22Z.pdf inflating: Firmware Downloader Guide.pdf
The actual firmware is in V53.17.22Z.zpl and when you look into the file, you see that there is actually ZPL code in it. This lead to the conclusion that it might just be possible to send the content of this file via netcat to the built-in printserver RAW port - 10.1.10.240:9100 in this example, change the IP to whatever your printer is configured to - in order to update the firmware:
$ cat V53.17.22Z.zpl | nc 10.1.10.240 9100
Do not power down, reset the printer or cancel your netcat until the printer is idle again and has printed its configuration sheet - otherwise you may risk bricking the controller.
On the display of your printer it should say “Downloading firmware” after about 2-3 minutes the printer will reboot and do some after flash checks, defrag and print its current configuration before returning to idle. Congratulations, your firmware update is complete now.