##(see the SpecSpec for an explanation) * '''Launchpad Entry''': UbuntuSpec:jockey-printer-driver-support * '''Created''': 2008-06-05 * '''Contributors''': Till Kamppeter, Martin Pitt * '''Packages affected''': jockey == 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 [[http://www.linuxfoundation.org/en/OpenPrinting|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 UbuntuSpec: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 === [[http://www.linuxfoundation.org/en/OpenPrinting|OpenPrinting.org]] already has a [[http://www.linuxfoundation.org/en/OpenPrinting/Database/Query|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