Opened 4 years ago

Last modified 3 years ago

#16318 new enhancement

IPP-Everywhere and AirPrint - Print support the XXIst century way — at Version 2

Reported by: pulkomandy Owned by: phoudoin
Priority: normal Milestone: Unscheduled
Component: Printing Version: R1/beta2
Keywords: Cc:
Blocked By: #1042, #6795 Blocking:
Platform: All

Description (last modified by pulkomandy)

The printing user experience in Haiku is bad. Let's fix that! This ticket is a starting point for better printing support. There are many things to fix, but I wanted to gather the info in a single place at first.

Printer discovery (#6795)

Everything in Haiku is hot-plug. Connect anything to an USB port and it will start working immediately. But printers must be added manually through the printer preferences. This should not be the case.

There are 4 things to take care of:

  • Network printers: should use mdns and dns-sd (aka Bonjour/Zeroconf) to discover the printer automatically (#1042)
  • USB: already enumerated in the "transports" when adding a printer, but should use the vendor/device ID to automatically configure the printer with the correct driver
  • Virtual printers: I think they should be added automatically. When the PDF printer add-on is installed, make it available as a printer by default.
  • Legacy parallel and serial port printers: the only case where specific configuration should be needed. And we may consider ignoring it because no one has these ports on their computers anymore anyway. I think it's ok if the UI is a bit less friendly for these.

Driver selection

Until now Haiku has relied mainly on Gutenprint for printer-specific drivers, and provided some generic drivers as well (PCL5, PCL6). However, and mainly due to efforts from Apple to allow printing from an iPad, there has since been a lot of work on driverless printing. The idea is that printers now use a common language and need no specific driver: all configuration can be discovered from the printer itself. This led to the AirPrint standard and later IPP-Everywhere. A lot of modern printers can be used in this way.

There are 3 steps to this:

  • Discovery of a printer: see above, using USB enumeration or Zeroconf.
  • Transport: IPP is used as a transport (and there is an IPP over USB but I'm not exactly sure how that works). We already have an IPP transport so we should be good to go
  • Data format: these printers expect a raster image (no ps interpreter in the printer). The standard formats are JPEG (but it's lossy) and pwg-raster which is based on Cups raster format but simplified a bit (specification: pwg-5102.4). We don't implement this yet. Printers may aditionally implement AppleRaster / image/urf format but this one is not documented. Mine also supports PCL3GUI which is a bitmap only variant of PCL, apparently, but that's not part of the standard.

Printer management and job control

Our current printer preferences provides some very minimal job control and no printer management. Things like checking ink cartridge presence and ink levels, printer status, error messages from the printer, etc, should be added.

The IPP transport allows for this, including getting an icon for the printer, localized error and status messages, and a lot more information. It also provides the list of available paper formats and other things like that.

Change History (2)

comment:1 by CodeforEvolution, 4 years ago

I completely agree! I don’t think I have been able to print from Haiku before, and I consider myself a Haiku veteran! :) While these files won’t help much with actual print driver handling, I hope this might inspire some new print panel interfaces: https://github.com/CodeforEvolution/BeOSDanoHeaders/tree/master/headers/be/print

In addition, I have a fresh BeOS Dan0 VM that I can use to experiment with their new print kit interface to maybe find some inspiration. :D

comment:2 by pulkomandy, 4 years ago

Blocked By: 1042, 6795 added
Description: modified (diff)
Note: See TracTickets for help on using tickets.