JockeyPrinterDriverSupport

Summary

Instead of reimplementing a lot of Jockey's purpose/already existing features in system-config-printer, we will make Jockey more generic to also work for printer drivers.

Jockey will be able to look for available LSB-package drivers on OpenPrinting.org, and expose its services through a generic D-BUS API for requesting and querying device drivers. This API can then be used by system-config-printer and possibly other components of the desktop.

Release Note

TODO when spec is nearing beta.

Rationale

We can only ship a limited number of printer drivers by default, for CD size reasons, and also because new printer models are constantly appearing on the market which need drivers which were not yet available at the time of the Ubuntu release.

From the UI and workflow perspective, a printer driver is not much different from a kernel driver. Jockey and its planned online driver DB support is an ideal place to integrate support for printer drivers.

Use Cases

  • Jane has a home computer, at which she enabled the checkbox for "check for unsupported community drivers". The other day she returns home with a shiny new $99 printer and plugs it in.

    system-config-printer picks it up, but does not find an available driver. In 8.04 nothing happens now. In Intrepid she gets the offer to install a driver from openprinting.org, and a note that it is free (thus unproblematic to try out). She clicks on "Enable", from then on she can use her printer without further fuss.

Assumptions

This specification relies on the implementation of printerdriverautodownload, in particular that openprinting.org will provide Debian-style package repositories.

Design

Printer detection

A printer is identified by stating its "IEEE-1284 device ID" (which, despite the name, is also available for USB and network printers). Printers generally return it as identification.

openprinting.org query

OpenPrinting.org already has a web query protocol. A new subclass of Jockey's DriverDB interface will be written which talks to that printer database to find out about available drivers for a given printer device ID.

D-BUS interface

Add a session D-BUS function for requesting a driver, identified by driver type (printer-id, or the already supported modalias for kernel modules) and the printer device ID. Jockey will check all available DriverDBs as usual and offer to install it if one is found.

It needs to be on the session bus, because Jockey needs to interactively present some driver details (license, description, confirmation). Jockey already has a built-in gksu support (this will eventually be fixed with a system D-BUS interface, but this is outside the range of this spec).

While being at it, the D-BUS interface will also get methods for getting a list of locally installed hardware, all available drivers, and for enabling/disabling a particular driver.

Implementation

Printer detection

lpinfo -l -v returns a list of locally connected printers and their device IDs, for example:

  •  Device: uri = usb://Samsung/ML-1610
         class = direct
         info = Samsung ML-1610 USB #1
         make-and-model = Samsung ML-1610
         device-id = MFG:Samsung;CMD:GDI;MDL:ML-1610;CLS:PRINTER;MODE:GDI;STATUS:IDLE;@

D-BUS interface

UI Changes

  • Display freeness of a driver in the UI, and provide a button to read the entire license if it is not free.

Test/Demo Plan

TODO when spec is nearing beta.


CategorySpec

DesktopTeam/Specs/JockeyPrinterDriverSupport (last edited 2008-08-06 16:59:38 by localhost)