Printing Design

Jump to: navigation, search


This document is design for the configuration and use of printers by an XO.

  • XO will have CUPS (currently installable by yum) and send print jobs to the school server or another linux desktop.
  • New GUI on the XO will be added to configure and use printers.
  • Modifications and or additions to CUPS client might be needed to improve performance, reduce footprint, and or achieve desired functionality.
  • New GUI for security and other configuration options (queueing, authorization, etc) for CUPS.

Use cases

  1. Teacher printing tests, notes to send home, etc. Does the teacher use an XO?
  2. Student printing documents (text, pictures, etc) from an XO

Configuration - XO

The number of printers, the models, and their locations will be unknown. Adding or selecting a printer needs to allow for these unknowns but still be simple enough that a 1st grader can easily configure a printer.

Manual Configuration

Printers can be manually added to /etc/cups/printers.conf.

Even better, it is not necessary to install cups on the XO at all. Create the directory and file /etc/cups/client.conf and add a single line:


where is the ip or hostname a cups server on a bigger computer (school server or home desktop). The printers are configured on the cups server, and available to all. Most printing applications use libcups, and Just Work. Caveat, the UI in most printing applications do not support the full capability of libcups, especially authentication. See Authentication below.

Automatic Configuration

The presence service may be a way to discover printers and configuration information. A printer would be configured, once, at the server. The server would advertise its printer through the presence system. This advertisement will include the information (driver, printer model, ports) required to configure the printer.

Proposed Workflow - XO


  1. User sees printer in neighborhood view
  2. User right clicks and selects "add printer"
  3. Printer configuration and driver is automatically retrieved and placed into printers.conf using python module for CUPS
  4. CUPS restarts (if unable to accept a new printer without restart)
  5. Printer is ready to use!

Unanswered questions

  • where are the printers listed?
  1. friends view?
  2. configuration activity?
  • How is the default printer selected?
  1. when its added
  2. from the friends view (if printers shown there) or from the config activity
  • How is a secondary printer selected when the default is not available?
  1. arbitrarily picked?
  • Are there any other options given when adding a printer?
  1. open to set it as the default, if there are no printers first printer is always default

Configuration/Moderation - Server


Desktop should have some built in GUI for printer configuration. If auto configuration through presence is used this may require additional configuration?


Authorization will be needed to make sure kids only print to their own school, class, etc. CUPS already allows for access per user and XOs can be identified by their ssh keys. The printer configuration tool in the current version of Ubuntu has this feature already.

Authorization goes both ways, and may in fact be more important in the other direction. Consider a fake printer on the network which steals things that are printed to it.


Printing supplies are not cheap and may be the biggest obstacle. There is concern that kids will print large jobs and use supplies up quickly. There should be some form of moderation to prevent waste and misuse. Authorization queues and or quotas were suggested. Some of these features exist in CUPS but there is no GUI to expose them.

Some possible features for moderation:

  • configurable quotas. IE. 2 pages per day. 20 pages per month. etc.
  • override for quota
  • Authorization queues. Rulesets to determine which jobs requires teacher authorization before printing
  • previewing jobs in queue
  • identification of duplicate jobs

Supporting Printing in Activities

Files sent to CUPS must be a file format it supports such as postscript, PDF or txt. What is shown on the screen must be translated to one of these formats if this is not the native format for the activity. Some Activities (Write, Browse, etc) have engines that already implement printing in some form. Cairo has an API for creating PDFs for any activity that needs to translate their files. Adding libpaper to the build may be justified; Tux Paint requires this for printing support.

Activity Priorities

Printing can be added in parallel but these our the priorities. These activities are some with the most compelling need for printing or they already have some printing capabilities in the underlying software.

  1. Write
  2. Browse

Using a printer

Through the Command line

   lpr -P fooprinter

(In the above example, the printer name is "fooprinter" and the document being printed is "".)

Through an Activity

There should be a standard icon with a standard location for printing (activity toolbar?)

Through the Journal

It would be great to have a printing icon in the journal. The entry detail screen would be a great place for this. CUPS does not know how to print all file formats. Printing should be passed off to the activity that created it to handle printing.

GUI Unknowns

  • What happens when a printing button is clicked in terms of options? Choice of printer? paper size? copies?
  • Can a job be canceled? if so where does this GUI appear?

Performance and Space Issues

CUPS includes drivers and or other information for a lot of printers. This creates a large footprint on disk and or in memory. If this is the case then cups should be modified to allow better control of resources that cups uses. CUPS uses 3MB (need confirmation) of space on disk.

Formats could be limited to postscript 2, postscript 3, pdf (versions?), png, jpeg, and UTF-8 text.


A low cost, rugged, printer that can use cheap ink would be a great thing.