Back to blog
October 2, 2026—IT—1 min read

The hidden cost of EU RED compliance: a label printer case study

By Miro Kodet

Let's start with a story. We have a customer for whom we develop software for their production facility. And since we love to go as deep as possible in our commitment, we often overlap the world of development and pure hardware/software integration. As part of that, we delivered a solution to automate label printing. We leveraged the stability and developer friendliness of Zebra printers — the customer runs a handful of them to cover various label types and print automation. We run an API, generate ZPL code and send it to the printer directly. It runs reliably, smoothly and pretty fast — orders with dozens of EANs are printed within a few seconds. Time savings are enormous, and the efficiency boost is visible every day.

Recently we had to add a new printer to automate a new label type. Since we'd done that many times before, it sounded like a simple job: order the printer, attach it, configure our production application. Well, not this time. The newest device from the Zebra family arrived with their newest LinkOS — and it was EU RED compliant out of the box.

What's EU RED?

I won't bore you with the directive's details (feel free to read it here). Shortly explained: starting on 1.8.2025, radio-related devices have to protect the security of users and cannot have open web interfaces, among other requirements. Zebra has fulfilled this directive thoroughly.

So what's the problem?

Users can no longer configure the printer right after first startup. The previous model we received was purchased just a couple of weeks ago, with old firmware — plug and play. Now the printer refuses to print over the network. The protection has to be unlocked first. To do so, you have to use a dedicated application Zebra provides on their website — as soon as you realize something is wrong. It's called Nucleus.

Nucleus means control point, right?

Not quite. After installing the app, you have to connect to the new printer — we gave up on Wi-Fi quite early and plugged in a plain old USB cable instead. Then you can start configuring. The app itself isn't bad, and unlocking the protected mode is fairly straightforward. But if you try to open the printer's web interface via its IP address, nothing appears. It looks like that's still protected too, even though the protection should already be unlocked.

Setup Utilities to the rescue

According to official support articles from September 2026, enabling the web interface requires Zebra Setup Utilities (an older application Zebra already provided before) and a ZPL sequence sent to the printer. For the sake of completeness, here it is:

! U1 setvar "ip.https.enable" "on" <CR>
! U1 setvar "ip.http.enable" "on" <CR>
^XA^JUS^XZ
! U1 do "device.reset" "" <CR>

In Zebra Setup Utilities, you click "Open Communication With Printer", paste the snippet above and hit "Send To Printer". We tried hard, but no luck — the web interface stayed stubbornly unavailable. We didn't need it that badly, though, so we moved on to finalize the setup.

It prints

After playing around with Nucleus and setting the printer to an "unprotected" state (you have to create a profile, set a password and store it), we were able to send our ZPL labels to the printer. The pleasant noise of a label feeding through — it prints. Until you look at the label. The EAN itself was perfectly fine, but the rest wasn't even readable. Our first idea was to adjust the DPI. We couldn't, since the old WebUI wasn't available and neither Nucleus nor Setup Utilities offered that setting. Not a real problem though — we know ZPL, so we set the DPI properly ourselves.

What's missing then?

Maybe the font size had changed in the new LinkOS version. A quick update in ZPL seemed to help, but that raised a bigger question: should we really change every ZPL template we use? There had to be something else going on. The correctly rendered EAN was a clear clue — the font itself was missing from the printer, and a fallback one was being used instead.

Previous versions of Zebra's firmware shipped with fonts preinstalled — we had been relying on Helvetica. So if it was missing, how do we upload new fonts? Again, via Setup Utilities (you need to install a dedicated fonts and packs downloader alongside it, otherwise it won't work). Click "Download Fonts and Graphics" and the process begins. You have to create a new partition (sort of) on the printer's flash drive — not on DRAM — and store it on your local drive as an MMF file. It already sounds too complex for the average user, but we're used to this kind of thing by now. From there you can select a font from the given dialog, store it to the MMF and upload it to the printer.

In our case, Helvetica was missing. There are dozens of fonts available in the dialog, but the one the customer's labels were built on wasn't among them. This is likely for licensing reasons, since Helvetica is a licensed font — so the resolution was to pick an alternative, as close to the original as possible.

Font found

Good, we had it. The process should have been simple from here. It wasn't. The partition we created was too small to fit the font file. Back to the start. We tried the upload again, and this time it went through. What's next — try to print? We did, and it still didn't work. Our ZPL explicitly referenced the font as S_HELVETICA_A.TTF, while we should have been referencing LiberationSans. We tried a few likely logical names for how the font might be stored in the printer's flash memory. No luck.

We couldn't find a quick way to list all fonts or files on the flash, so we fell back to a more roundabout method: sending a ZPL request directly (remember, the WebUI isn't available, so there's no "Directory Listing" to jump to).

^XA^HWE:*.*^XZ

sent through the same communications window in Setup Utilities. A couple of seconds later, we found LIB000.TTF.

The customer confirms it looks even better

The Liberation font was well accepted — we'll likely update all our printers and ZPL templates to use it going forward — so we polished the ZPL to adjust a few remaining details, and the job was done.

What started as a simple "extend the existing printing setup with a new printer" turned into a bit of a scavenger hunt. But after a couple of hours, some grey hair and a few new lessons learned, it worked out well.