HP OfficeJet Linux driver (hpoj) documentation index

Please click on the links below for more information on each section. Use the "Back" button on your browser to return to this page.


This software provides Linux and partial FreeBSD support for most "multi-function" (also known as "all-in-one") peripherals from Hewlett-Packard, including OfficeJet, LaserJet, Printer/Scanner/Copier ("PSC"), and PhotoSmart printer products. It consists of:
  • Low-level drivers and libraries to communicate with the device. Depending on your hardware and operating system, you may connect devices directly to your computer with a parallel port or USB (Universal Serial Bus), or to a LAN (Local Area Network) using certain models of HP JetDirect print servers.
  • An application programming interface (API) known as "PTAL" (Peripheral Transport Abstraction Libary) that hides the differences in accessing devices connected via parallel, USB, or JetDirect.
  • Printing support, largely powered by ghostscript, the hpijs driver (for most models), and one of various print spoolers (lpd, CUPS, PDQ, etc.) that may already be installed on your computer.
  • Scanning support, in conjunction with SANE (Scanner Access Now Easy).
  • Access to photo-card readers, possibly in conjunction with mtools.
  • Graphical and command-line applications to access various features of the device, such as displaying status of the device and setting the clock.
The hpoj Supported Devices page has the most up-to-date list of models and functionality that are supported by the hpoj software.

Installation and setup

Follow these steps to install the hpoj software initially, or to set up new devices later:
  1. Compiling and installing the software
  2. Setting up basic device connectivity
  3. Setting up printing
  4. Setting up scanning
  5. Setting up photo-card access
Please also register your HP product(s) if you haven't already done so.

Additional support resources

In addition to this documentation provided with the hpoj software, the following support resources are provided for your convenience:

World-wide web

  • The hpoj web site is at
  • Information on known bugs and possible solutions or workarounds is available on the Bugs and TODO page. If you run into trouble with the software, be sure to check this page before reporting a bug.
  • This documentation provided with the software is also mirrored on the Documentation page.

Mailing lists

Visit the Mailing lists page to subscribe/unsubscribe and/or to browse the message archives.
  • -- New software release announcements (read-only).
  • -- Feedback, problem reports, and technical discussions. Your comments about the software, documentation, and/or website are greatly appreciated, because we want to make them useful to as many people on as many systems as possible. Currently it's not necessary to subscribe before posting to the mailing list, although non-subscriber postings may be delayed for moderator approval.

Direct e-mail

For hpoj support and feedback, please write and reply to the hpoj-devel mailing list described above, not to individual developers.

High-level command reference

These commands access specific high-level functions of the device and are probably of interest to most users:
  • ptal-hp -- Device configuration and status
  • xojpanel -- QT-based application that displays the contents of the device's LCD panel (not supported on certain models)

Low-level command reference

These commands exercise basic low-level connectivity to the device. They are useful for testing the communications path when first setting up a device and for debugging problems, but otherwise, they are probably of interest mainly to advanced users and developers.
  • ptal-devid -- Displays the device ID string or certain fields
  • ptal-connect -- Connects to various stream services on the device
  • ptal-print -- Alias for ptal-connect that defaults to connecting to the print service
  • ptal-pml -- Gets/sets PML objects
  • ptal-device -- Lists device names which have been registered with "ptal-init setup"
  • hpojip-test -- Test application for image-processing library (see hpojip-test.c and hpojip.h for more information)

Library reference

  • libptal -- Abstracts differences in low-level I/O over parallel, USB, and JetDirect connections (the programming API is documented here)
  • libhpojip -- Image-processing library (see hpojip.h for more information)
  • libsane-hpoj -- SANE backend for scanning on all hpoj-supported models

Administration and daemon command reference

  • ptal-init -- Starts/stops the daemons and probes your system for new devices
  • ptal-mlcd -- Low-level I/O (MLC/1284.4) driver daemon for parallel-port and USB connections
  • ptal-printd -- Daemon that simulates a printer character device in /var/run/ptal-printd and routes the data through the PTAL I/O path
  • ptal-photod -- Daemon that provides access via mtools to the photo-card readers on certain models
  • ptal-cups -- CUPS backend for printing to PTAL devices

Technical information

The following information is intended for developers of applications using the hpoj software's services, and for those desiring a deeper understanding of the hpoj software and/or of the underlying device protocols.


  • David Paschal developed low-level I/O, scanning, and photo-card access code and documentation, and maintained hpoj starting with the 0.5 release and ending with the 0.91 release. He is no longer associated with the hpoj project, due to HP organizational changes and management decisions beyond his control. (The people who bring you the hpijs print driver are officially responsible for future development and support of hpoj-related functionality.)
  • Mark Horn contributed the ptal-cups backend.
  • Joe Piolunek enhanced the xojpanel application and QT detection.
  • Roger Schreiter, Gerhard Fürnkranz, and Andreas Fester originally started the hpoj project, and developed parallel-port, MLC, and application-level code, respectively, which were part of the codebase up through version 0.7.