Template Version: @(#)onepager.txt 1.35 07/11/07 SMI Copyright 2007 Sun Microsystems 1. Introduction 1.1. Project/Component Working Name: Presto Phase II: OpenSolaris Print Manager 1.2. Name of Document Author/Supplier: Ghee Teo Halton Huo Evan Yan Norm Jacobs 1.3. Date of This Document: 06/12/08 1.3.1. Date this project was conceived: Phase 1 of this project (LSARC/2007/287) was integrated into Nevada build 69 in June 2007. Phase 2 started then in July 2007. 1.4. Name of Major Document Customer(s)/Consumer(s): 1.4.1. The PAC or CPT you expect to review your project: Solaris PAC 1.4.2. The ARC(s) you expect to review your project: LSARC 1.4.3. The Director/VP who is "Sponsoring" this project: Robert.Odea@Sun.Com 1.4.4. The name of your business unit: Software - New Solaris - Open Source 1.5. Email Aliases: 1.5.1. Responsible Manager: leo.binchy@sun.com 1.5.2. Responsible Engineer: ghee.teo@sun.com 1.5.3. Marketing Manager: Jeff.McMeekin@sun.com 1.5.4. Interest List: presto-discuss@opensolaris.org printing-discuss@opensolaris,org 2. Project Summary 2.1. Project Description: This project is the desktop side of phase 2 of the OpenSolaris Project, Presto: Automatic Printing Configuration. The overall goal of Presto is to automatically discover and configure access to directly attached, network attached, and remotely served printers [2]. Phase 1 of desktop side of Presto (LSARC/2007/287) covered the the work required to automatically detect and configure access for locally attached USB printers. Print queues are be detected or created by user when plugged in. A notification dialog is popped up when a printer is unplugged or when error is encountered. This project is to support the auto-discovery of network attached printers from the desktop end. The OS level to auto-discover network printers was implemented by PSARC/2007/499 which has been integrated into Nevada build 77. The interface between the discovery services, be it for USB or network device through SNMP, remains the same. Hence the same desktop daemon, ospm-applet, can be notified of printer events be it from USB port or on the network. Once a network printer is discovered, the ospm-applet noted that and proceeds to create the print queue automatically. The print queue created can then be modified using the OpenSolaris Print Manager. This is necessary as the automated fuzzy lookup of the printer driver's name is not always accurate. The Print Manager not only allows the user to modify the print queue's settings, it also allow the user to manage his print queues, jobs and organizing print queues into logical groups. The reasons for such an elaboration of functionalities is to allow us to partially or completely replace a couple of printing tools which are currently made available on the JDS Desktop menu. The two tools are: (1) gnome-printinfo(1), a queue and job monitoring tool which wrapped around lpstat(1). Highly inefficient and unmaintained. (2) printmgr(1M), a JAVA based GUI for creating print queues. The recommended tool to create print queues for network printer, attached printer and also creating access to remote print server. It even supports NIS/LDAP database of printer setup. The Print Manager provides a complete replacement for gnome-printinfo(1) and supports only file level printer database, printers.conf(4). Hence, it only provides partial functionalities of printmgr(1M). The primary lack in support in between that of printmgr(1M) and OpenSolaris Print Manager is that the former does not support printer management under NIS/LDAP. However, the project team perceive that printers.conf(4) level of support is sufficient in an unmanaged network environment. So the plan of record is to remove the above two tools from the desktop menu and replace them with the OpenSolaris Print Manager. printmgr(1M) will continue to be available through command line. gnome-printinfo(1) will be obsoleted and removed in a future ARC case. 2.2. Risks and Assumptions: No risk is perceived. 4. Technical Description: 4.1. Details: The work done in this project can be divided into: - Extending the ospm-applet from phase 1 to handle network printers - Extending the ospm-preferences to allow new preferences introduced in phase 2 to be configured, notably that for network printers. - Print Manager which is integrated with the auto-detected and auto- discovered printers. Extensions to ospm-applet Ospm-applet is the daemon that is launched when user logs into the GNOME desktop. It sits and waits for HAL printer events. It responds accordingly when either a local USB or network printer is added or removed through the DBUS message sent from hald. hald is the privileged process that handles detection/discovery of printers, it stores the printer's data in the HAL device tree from which ospm-applet read from regardless of local USB and network printer. However, ospm-applet does handle creation of local printer and network printer queues slightly differently. For network printer, queues will be added automatically. Whereas for local printer, the user can configure whether to be prompted or not. In both cases, ospm-applet will send a DBUS message when a printer is added, "PrinterAdded", this is handled by the Print Manager. Extensions to ospm-preferences The capplet or preferences dialog is now extended into 3 tabs. Tab 1: Print Manager It allows the configuration of 3 things. Notification: It handles how the printer icon is managed in the notification area. Unavailable Printers: how the print manager should depict off line printers. Refresh rate for Queue View and Job View: it allows users to specify how frequently the queue view and job view are to be refreshed. Tab 2: Local Printers contains the options which were in Phase 1. Tab 3: Network Printers It allows configuration of how network printers be being handled in the print manager. Print Manager The Print Manager integrates with the rest of Presto and its role within the Presto Architecture can be seen in section 3 of [1]. The relationship of the Print Manager and the user Add Queue daemon (ospm-applet) can be described as such: Local USB Printer: - the OpenSolaris kernel notices the Device HotPlug event - the kernel sends out a sysevent that devfsadmd(1M) is listening for - devfsadmd(1M) notices the Printer Add or Remove sysevent, it notifies hald (HAL daemon) - hald uses an external probe program to interrogate the printer and populate the HAL device tree with all the relevant data it can get hald sends out a Device Added or Removed DBUS signal - ospm-applet, which is a user's session daemon, is waiting and responding to these signals. Based on the unique udi (Unique Device Identifier) it received from hald, it looks up the rest of the data from the Hal device tree. - Ospm-applet then displays fully populated Add Queue Dialog for the user to add the queue, the displaying of this dialog is configurable. If it is turned off, the queue will be automatically added. - Once the queue is added, a notification bubble is shown on the notification area of the panel Once the above steps are completed, the printer is ready to be used. Network Printer (via SNMP): - Enable network printer discovery service, svc:/network/device-discovery/printers:snmp - The hald network printer add-on broadcast a SNMP GET - Network printer which is SNMP capable would then respond to it - The SNMP agent then populates the HAL Device Tree with the network printer data. - hald detected changes in the HAL device tree and deduces that these are printers, it sends out the "DeviceAdded" DBUS signal. - ospm-applet, which is a user's session daemon, is waiting and responding to these signals. Based on the unique udi (Unique Device Identifier) it received from hald, it looks up the rest of the data from the Hal device tree. Then it adds print queues for these printers in the background until these are all done. - ospm-applet pop-ups a generic message as a notification bubble notifying the user that network print queues have been added. - ospm-applet also sends out a DBUS message, "PrinterAdded". - If the Print Manager is running at the time, it will be notified by the message "PrinterAdded", and will refresh its view immediately and hence shows the newly added queues. Otherwise, these messages are ignored. 4.4. Out of Scope: Obsoletion and removal of gnome-printinfo(1) which should be handled by a separate ARC case. While phase 2 of the project has pretty much implemented the key elements of Presto for both local and network printers and integrated with the OpenSolaris Print Manager. The limitation is that this only for OpenSolairs LP Print System, it doesn't handle CUPS. Since CUPS queues and LP queues are not compatible to be used by the Print Manager. There is no sharing of these queues data. While it is quite feasible to create a CUPS implementation of for the Print Manager, this may not be the route that the project team sees the road map.There are much work and momentum on CUPS in the Open Source communities, it would be more effective if we can make use and contribute to that for OpenSolairs CUPS print system. Other important aspect such as handling of Windows printers, integration of printer groups into the GTK+ print dialog are all feasible and important to improve the user's experience on OpenSolaris. 4.5. Interfaces: Interfaces inherited from phase 1 of the project (LSARC/2007/287) ___________________________________________________________________________ | Interfaces Exported | ___________________________________________________________________________ | Interface Name | Classification | Comment | ___________________________________________________________________________ | /usr/lib/ospm | Project Private | Project private directory | --------------------------------------------------------------------------- | /usr/lib/ospm\ | Volatile | applet handling HAL events | | /ospm-applet | | through DBUS | --------------------------------------------------------------------------- | /usr/lib/ospm\ | Project Private | RBAC program to create, | | /lp-queue-helper | | enable, disable print queue. | | | | Invokes a subset of lpadmin | --------------------------------------------------------------------------- | /usr/lib/ospm\ | Project Private | script to extract serial | | lp-queue-exists-by-serial.sh | number associated with the | | | | plugged in printer. | --------------------------------------------------------------------------- | /usr/bin\ | Volatile | GUI dialog to change | | /ospm-preferences | | preferences, internally | | | | represented by a number of | | | | gconf keys. | --------------------------------------------------------------------------- | /usr/lib/ospm\ | Project Private | Shared library used by applet | | /libospm-prefs.so.0.0.0 | and capplet | --------------------------------------------------------------------------- | /usr/lib/ospm\ | Project Private | Shared library used by applet | | /libospm-utils.so.0.0.0 | and capplet | --------------------------------------------------------------------------- | SUNWprint-monitor | Uncommitted | Package name containing the | | | | project binaries. | --------------------------------------------------------------------------- | SUNWprint-monitor-root| Uncommitted | Package that contains project | | | | configuration data. | --------------------------------------------------------------------------- This project (Phase 2) exports the following new interfaces: ___________________________________________________________________________ | Interfaces Exported | |-------------------------------------------------------------------------| | Interface Name | Classification | Comment | |-----------------------|-----------------|-------------------------------| | /usr/bin/ospm-pm | Volatile | Print Manager GUI | |-----------------------|-----------------|-------------------------------| |org.opensolaris.ospm.\ | | | | applet | | | | PrinterAdded | Project Private | DBUS signal between | | | | ospm-applet and ospm-pm | |-----------------------|-----------------|-------------------------------| | /etc/gconf/schemas/ | Volatile | GCONF keys schemas that define| | ospm.schema | | the preferences for the tools | |-----------------------|-----------------|-------------------------------| | $HOME/ | | XML file that stores the data | |.ospm-printer-groups.xml | Volatile | for printer groups. Stability | | | | is Volatile as the the format | | | | may change in future | | | | development. | |-----------------------|-----------------|-------------------------------| Interfaces imported (inherited) from phase 1 of the project (LSARC/2007/287) ___________________________________________________________________________ | Interfaces Imported | ___________________________________________________________________________ | Interface Name | Classification | Comment | ___________________________________________________________________________ | lpadmin(1M) | Obsolete | Obsoleted by PSARC/1993/348, | | | | lpadmin(1M) was changed to | | | | obsolete because it was | | | | planned to be replaced. | | | | However, thing has changed | | | | since, it remains the single | | | | command to create print queues| | | | on Solaris. It is likely to | | | | stay around for a long time to| | | | come. | --------------------------------------------------------------------------- | Printers(4) | Committed | PSARC/1994/162, This file | | | | needs to be updated for the | | | | user to reflect default | | | | printer and printers of | | | | interest. | --------------------------------------------------------------------------- | pfexec(1) | Committed | PSARC/2002/188, used to invoke| | | | lp-queue-helper with RBAC. | --------------------------------------------------------------------------- | libpapi | Contracted | LSARC/2001/259, Already has a | | | Project Private | contract with Printing group | | | | as part of LSARC/2006/462 [2] | --------------------------------------------------------------------------- | /usr/lib/libdbus-1.so | Volatile | LSARC 2006/368 | --------------------------------------------------------------------------- | /usr/lib\ | Volatile | LSARC/2006/368 | | /libdbus-glib-1.so | | | --------------------------------------------------------------------------- | libnotify.so | Volatile | LSARC 2007/137 | ___________________________________________________________________________ New interfaces imported in this project. ___________________________________________________________________________ | Interfaces Imported | ___________________________________________________________________________ | Interface Name | Classification | Comment | ___________________________________________________________________________ | libxml.so | Standard | PSARC 2008/032 | ___________________________________________________________________________ 4.6. Doc Impact: One new man page ospm-pm(1) will be provided for this project. ospm-preferences(1) will be updated to reflect the updated features. 4.7. Admin/Config Impact: None. 4.8. HA Impact: N/A 4.9. I18N/L10N Impact: Yes. G11N has been contacted for evaluation for this project. Most of the L10N from phase 1 of this project can be re-used, though there are new G10N and L10N required for ospm-preferences(1) and ospm-pm(1). 4.10. Packaging & Delivery: No new package is delivered. The two existing packages: - SUNWprint-monitor - SUNWprint-monitor-root will be used to package the new feature. 4.11. Security Impact: No new security related issue is raised in this phase. All security related issues were discussed and included in phase 1 of the project as in LSARC/2007/287. 4.12. Dependencies: No known pending dependency. 5. Reference Documents: [1] "Presto - Printing Made easy", Ghee Teo, OpenSolaris Developer Conference, Prague, June 24-27, 2008. http://www.opensolaris.org/os/project/presto/Documents/osdevpaper [2] Presto OpenSolaris poject, http://www.opensolaris.org/os/project/presto/ 6. Resources and Schedule: 6.1. Projected Availability: Planned integration data: August 2008, Nevada build 97, 6.5. ARC review type: FastTrack 6.6. ARC Exposure: Open. This project is one of the OpenSolaris project, Presto [2].