Title: Haiku IPP Print Bridge - early preview for IPP/JPEG printing

Hi everyone,

I would like to share a small early preview of something I have been working on:

Haiku IPP Print Bridge: “From no print to print.”

The idea came from a simple problem: I wanted to print from Haiku to modern network printers that support IPP, but do not have native Haiku drivers.

This tool uses a small bridge workflow:

PostScript / PDF / JPEG

→ Ghostscript

→ JPEG pages

→ IPP

→ printer

It is not meant to replace Haiku’s printing system. It is currently a practical workaround for IPP-capable printers that accept image/jpeg.

Current features include:

→ native Haiku GUI

→ background Python spooler

→ printer profiles in config.json

→ active printer profile editor

→ German / English GUI and help

→ test page with active printer configuration

→ archive for completed jobs

→ failed-job folder

→ English technical log output

Dependencies:

pkgman install ghostscript_gpl

Installation:

unzip haiku-ipp-print-bridge-v0.5.zip

cd haiku-ipp-print-bridge-v0.5

./install.sh

I have uploaded a new early preview version of Haiku IPP Print Bridge.

This release is still experimental, but it is a cleaner and more polished step forward.

Changes in v0.5:

  • renamed brother_spooler.py to the more neutral spooler.py

  • renamed the log file to spooler.log

  • added a green-on-black “terminal style” log view

  • the log view now updates only when the log file actually changes, so scrolling is no longer interrupted

  • added a startup printer check for the active printer profile

  • configuration changes are detected and written to the log

  • included check_ipp_printer.py to test whether a printer reports image/jpeg support over IPP

  • updated the German and English help files

  • refreshed the ZIP installer

The bridge accepts PDF, PostScript and JPEG files. PDF and PostScript are converted to JPEG pages using Ghostscript, and those pages are sent to the printer via IPP.

The current version requires a printer that supports image/jpeg over IPP.

https://linuxmintusers.de/files/haiku-ipp-print-bridge-v0.5.zip

SHA256:

https://linuxmintusers.de/files/haiku-ipp-print-bridge-v0.5.zip.sha256

I have tested it successfully with Brother IPP printers on Haiku R1/beta5 x86_64 in VirtualBox.

This is still an early preview, so please do not expect a polished final application yet. I would be very happy if others try it with different IPP printers and report whether it works.

Have fun testing - and feedback is very welcome!

EDIT:
I have added a small IPP printer check tool to test whether a printer reports support for image/jpeg over IPP.

https://linuxmintusers.de/files/check_ipp_printer.zip

Greetz

7 Likes

Tested on
Haiku shredder R1~beta5+development hrev59783 Jun 9 2026 06:23:44 x86_64 x86_64 Haiku
:grinning_face:

1 Like

I printed the test page successfully on an HP Envy printer. hrev59048.

This is excellent, first time I’ve been able to operate a printer directly from Haiku. The way the printer labored over this page was kind of unusual, though. Is this because of the JPEG format?

1 Like

I’m unable to download the zip files. I get a 404 error stating I don’t have permission to access the resource.

1 Like

Hi,

thanks for testing.
Memory issues with HP Envy printers usually occur because complex documents (e.g. high-resolution graphics or PDFs) require more RAM than the device has available. This manifests itself in messages such as ‘Low memory’ or Error 20 (Insufficient memory).

At the moment the tool sends the test page as image/jpeg because that is the simplest format we can reliably generate and submit from Haiku right now.

Some printers handle JPEG/raster jobs less efficiently than native PDF, PostScript, PWG Raster or Apple Raster jobs, so they may sound slower or work harder than usual. The main goal for this version was to verify that direct IPP submission from Haiku works at all.

Future versions could query the printer’s supported document formats and choose a better format when available, but JPEG is currently the safe baseline.

What exact model of printer do you have?

Greetz

For various reasons (spam bots and hacking), certain regions are blocked from accessing the domain above.

I’ve uploaded the files again here for all users who are getting a 404 error:

https://haiku.ihlau.net/check_ipp_printer.zip

https://haiku.ihlau.net/haiku-ipp-print-bridge-v0.5.zip.sha256

https://haiku.ihlau.net/haiku-ipp-print-bridge-v0.5.zip

1 Like

HP Envy 6030e

Hi Donn,

reply to your “HP Envy 6030e” : yes, that is very likely related to the current JPEG workflow.

At the moment, Haiku IPP Print Bridge sends the final page data as image/jpeg over IPP. For a small inkjet printer like an HP Envy, this means that the printer has to decode the JPEG, scale it, convert the colors and rasterize the page internally before it can actually print.

So the printer may appear to “work hard”, especially with the test page. The generated page image can be fairly large, for example an A4/Letter page at around 300 dpi.

The good news is: if the test page printed successfully, the printer does accept IPP jobs from Haiku.

YEAH! :wink:

The next useful step would be to query the printer’s IPP attributes and check which document formats it reports.

If you have the bridge installed, please try:

cd /boot/home/PrintSpool/tools
python3 check_ipp_printer.py ipp://PRINTER-IP:631/ipp/print

Replace PRINTER-IP with the actual IP address of your HP Envy printer.

If /ipp/print does not respond, these variants are also worth trying:

python3 check_ipp_printer.py ipp://PRINTER-IP:631/ipp
python3 check_ipp_printer.py ipp://PRINTER-IP:631/printers/ipp

The interesting part of the output is:

document-format-supported:

For the current bridge, the most important format is:

image/jpeg

If the printer also reports formats such as:

image/urf
image/pwg-raster
application/pdf
application/postscript

then these may be interesting targets for future versions. Many AirPrint/Mopria-style printers are probably better optimized for URF or PWG Raster than for large JPEG pages.

You can also save the result to a file:

cd /boot/home/PrintSpool/tools
python3 check_ipp_printer.py ipp://PRINTER-IP:631/ipp/print \
  > /boot/home/Desktop/hp-envy-ipp-check.txt

So yes: the slow printing may well be caused by the JPEG path. But the successful print itself is already an important result, because it shows that direct IPP printing from Haiku to this printer is working.

Greetz

1 Like

Great Work! Just installed and tested bridge on a HP PhotoSmart 5520, and it printed a test page right away once I changed the ip address on the example printer and restarted the spool.

2 Likes

Well, no PDF nor PostScript, but we have PWG raster and URF, and a couple PCL variations.

application/vnd.hp-PCL
image/jpeg
image/urf
image/pwg-raster
application/PCLm
application/octet-stream

Thank you very much for testing!

That is great to hear. The HP PhotoSmart 5520 is another useful data point, especially because it printed the test page right away after only changing the IP address and restarting the spooler.

If you have a moment, could you also run the IPP format check for that printer?

cd /boot/home/PrintSpool/tools
python3 check_ipp_printer.py ipp://YOUR-PRINTER-IP:631/ipp/print

If /ipp/print does not respond, these variants are also worth trying:

python3 check_ipp_printer.py ipp://YOUR-PRINTER-IP:631/ipp
python3 check_ipp_printer.py ipp://YOUR-PRINTER-IP:631/printers/ipp

The interesting part is:

document-format-supported:

This helps to find out whether the printer supports only image/jpeg, or also formats like image/pwg-raster, image/urf, or PCL/PCLm.

At the moment the bridge uses JPEG as the practical first target, but these format reports are very useful for future versions.

greetz

1 Like

Hi everyone,

first of all: thank you very much for the feedback and testing so far. That really helped to move this little Haiku IPP printing bridge forward.

I have now released Haiku IPP Print Bridge v0.5.1.

The biggest change is that the bridge is no longer limited to image/jpeg. It now also supports:

  • image/urf

  • application/PCLm

  • image/jpeg as fallback

The GUI now has a document format selector, so the preferred IPP document format can be selected per printer profile.

image/urf has been tested successfully here with a Brother DCP-J1360DW. The printer reports image/urf and image/jpeg, and both formats print correctly.

application/PCLm is included as an additional output path, mainly for printers which report PCLm support over IPP, for example some HP printers. I could not test PCLm locally because my Brother printer does not report support for it.

So I would be very happy about feedback from users with printers that support image/urf or application/PCLm, especially HP Envy or similar IPP/AirPrint-capable printers.

The included checker tool now reports all supported bridge formats it finds, for example:

RESULT: OK - this printer reports image/urf and image/jpeg support over IPP.
        Recommended first test: image/urf

If you test it, please let me know:

  • printer model

  • formats reported by the checker

  • selected document format

  • whether printing worked

  • if possible, the relevant log output

Thanks again to everyone who tested and reported back. This started as a workaround for my own printer, but it is slowly becoming something that may be useful for more Haiku users.

Greetz
Juergen

https://haiku.ihlau.net/haiku-ipp-print-bridge-v0.5.1.zip.sha256

https://haiku.ihlau.net/haiku-ipp-print-bridge-v0.5.1.zip

1 Like

Sorry I didn’t reply sooner, but I was at work.

I ran the check tool with your new 5.1 version of bridge. Here’s a screenshot of results:

2 Likes

I’ve done some testing by saving files directly to pdf and printing them. Have had no issues printing any file that I saved as a pdf.

1 Like

KYOCERA FS-1060DN

Hi Kim,

thanks for the screenshot and for testing.

I think we found the important point for this Kyocera printer.

According to the Kyocera ports list, IPP on TCP port 631 is configurable, but closed by default. That matches your test result:

ERROR: Cannot connect to printer: Connection refused

So the bridge is not failing because of the wrong document format yet. The printer is simply not accepting IPP connections at the moment.

Please try the following steps:

  1. Open the printer web interface in a browser:
http://192.168.1.236/

  1. Look for the network or protocol settings.

  2. Enable IPP / Internet Printing Protocol.

  3. Make sure TCP port 631 is open/enabled.

  4. Save the settings and reboot the printer if the web interface asks for it.

After that, please run the checker again:

/boot/home/PrintSpool/tools/check_ipp_printer.py ipp://192.168.1.236:631/ipp/

For the Haiku IPP Print Bridge printer profile dialog, please use:

Name:                KYOCERA FS-1060DN
Protocol:            ipp
IP address / Host:   192.168.1.236
Port:                631
IPP path:            /ipp/
IPP document format: image/jpeg

So the full IPP URI is:

ipp://192.168.1.236:631/ipp/

Please do not use port 9100 for this bridge. Port 9100 is normally RAW/JetDirect printing, not IPP. The checker and this bridge need a working IPP endpoint.

If IPP is enabled correctly, the checker should no longer show “Connection refused”. It should then list the document formats reported by the printer.

The interesting part is whether the printer reports one of these formats:

image/jpeg
image/urf
application/PCLm

If it reports one of them, the bridge may be able to print to it. If it does not report any of them, this printer may not be compatible with the current bridge.

So the next step is:

  • enable IPP in the Kyocera web interface

  • open TCP port 631

  • run the checker again

  • post the new checker output

Thanks again for testing. This kind of feedback is very useful, because different printer manufacturers use very different defaults.

Greetz
Juergen

1 Like

Howdy,

Tested with my Epson EW-M630T Series, I get the following output:

/boot/home/PrintSpool/tools/check_ipp_printer.py http://192.168.3.12:631/ipp/print
Testing: ipp://192.168.3.12:631/ipp/print
Host: 192.168.3.12
Port: 631
Path: /ipp/print

HTTP: 426 Upgrade Required
ERROR: Printer did not return HTTP 200.

I confirmed that the printer has the latest firmware, so not sure what the “426 Upgrade Required” points to.

The printer seems to have AirPrint support, and in the protocol setting, it is configured for IPP.

Would love to be able to print to this printer from Haiku. Is there anything else I can try?

Hi @ilfelice ,

thanks for testing.

HTTP: 426 Upgrade Required usually means that the printer answered, but does not want to continue with plain, non-secure IPP.

I attached a screenshot as an example. The screenshot is from another Epson printer model, not from your exact EW-M630T Series, so your Web Config page may look different. But Epson often uses similar wording for these protocol settings across different printer series.

In the example screenshot, IPP is enabled, but the option:

Allow Non-secure Communication

is set to:

Not Allowed

If your printer has a similar setting and it is disabled, that would explain the HTTP 426 Upgrade Required response.

The current Haiku IPP Print Bridge v0.5.1 uses plain IPP over HTTP. It does not support IPPS/HTTPS yet. So if the printer only allows secure IPP communication, the checker cannot continue.

Please open your printer’s Web Config page in a browser:

http://192.168.3.12/

If the browser redirects to HTTPS and shows a certificate warning, that may simply be because the printer uses a self-signed certificate.

The Epson Web Config page may ask for an administrator password. On some Epson printers, the default administrator password is the product serial number printed on the label of the device.

Then look for something like:

Network Security
Protocol
IPP Settings
IPP
Allow Non-secure Communication
Non-secure IPP
IPP without SSL/TLS

The names may be slightly different on your model, but the important point is to allow normal, non-secure IPP communication.

If you find such an option, please try enabling it, save the settings, and reboot the printer if required.

Then run the checker again:

/boot/home/PrintSpool/tools/check_ipp_printer.py ipp://192.168.3.12:631/ipp/print

For the bridge printer profile, please use:

Name:                Epson EW-M630T Series
Protocol:            ipp
IP address / Host:   192.168.3.12
Port:                631
IPP path:            /ipp/print
IPP document format: image/urf

If image/urf does not print, please try image/jpeg as fallback.

If your Web Config page looks different, please post a screenshot of the IPP/protocol settings. Then we can compare the options.

Greetz
Juergen

Tip:

1 Like

Hi @anon81946179

That did the trick!

/boot/home/PrintSpool/tools/check_ipp_printer.py ipp://192.168.3.12:631/ipp/print
Testing: ipp://192.168.3.12:631/ipp/print
Host:    192.168.3.12
Port:    631
Path:    /ipp/print

HTTP:    200 OK
IPP:     2.0, status 0x0000, request 1

printer-name:
ipp/print

printer-make-and-model:
EPSON EW-M630T Series

printer-uri-supported:
ipps://192.168.3.12:631/ipp/print
ipp://192.168.3.12:631/ipp/print

ipp-versions-supported:
1.0
1.1
2.0

document-format-supported:
application/octet-stream
image/pwg-raster
image/urf
image/jpeg

RESULT: OK - this printer reports image/jpeg support over IPP.

Off to see if I can print now! :smiling_face_with_sunglasses:

1 Like

Might aswell add my output, haven’t checked actual printing:

~> /boot/home/PrintSpool/tools/check_ipp_printer.py ipp://192.168.0.141:631/ipp/print
Testing: ipp://192.168.0.141:631/ipp/print
Checker: Haiku IPP Print Bridge checker v0.5.1
Host:    192.168.0.141
Port:    631
Path:    /ipp/print

HTTP:    200 OK
IPP:     2.0, status 0x0000, request 1

printer-name:
  HPD015B4

printer-make-and-model:
  HP ENVY Inspire 7200 series

printer-uri-supported:
  ipp://192.168.0.141/ipp/print
  ipps://192.168.0.141:631/ipp/print

ipp-versions-supported:
  1.0
  1.1
  2.0

document-format-supported:
  application/vnd.hp-PCL
  image/jpeg
  image/urf
  image/pwg-raster
  application/PCLm
  application/octet-stream

Bridge format check:
  OK: image/urf - URF / AirPrint raster path, Ghostscript device: urfrgb
  OK: image/jpeg - JPEG fallback path, Ghostscript device: jpeg
  OK: application/PCLm - HP PCLm path, Ghostscript device: pclm
  NOTE: image/pwg-raster is reported by the printer, but this bridge build
        cannot generate PWG Raster unless Ghostscript provides a pwgraster device.

RESULT: OK - this printer reports image/urf, image/jpeg and application/PCLm support over IPP.
        Recommended first test: image/urf

1 Like