DebuggingPrintingProblems

Revision 68 as of 2012-07-02 20:20:21

Clear message

Debugging Central

This page is part of the debugging series — pages with debugging details for a variety of Ubuntu packages.

Reporting Bugs

Beginning with 9.04, Jaunty Jackalope, to report printing bugs use 'ubuntu-bug cups' which will gather useful information about your system related to printing like the version of Ubuntu you use, configured printers and the versions of important printing packages installed and automatically attach them to your bug report. You can also add the information after the bug is reported by executing 'apport-collect -p cups BUGNUMBER' where BUGNUMBER is the bug report you want to add information to.

In releases 8.10, Intrepid Ibex, and older, attach to your bug report the output of the printingbuginfo script located at: https://wiki.ubuntu.com/PrintingBugInfoScript. It manually collects the same information that is collected in the cups apport hook, used by ubuntu-bug and apport-collect above.

Starting with Intrepid the cupsys package has been renamed to cups. Subsequently, bugs about Intrepid (8.10) and newer releases should be assigned to the cups package and bug reports about previous releases should be assigned to cupsys.

Printer detection

NOTE: If you have a USB -> Parallel adapter, proceed as for a USB printer.

USB printer

  1. Make sure that the printer is connected to your system and powered on.
  2. Open a terminal/console and check if the usb kernel modules are loaded:
    $ lsmod | grep usb

  3. Unplug the USB printer cable from your computer and enter this command:
    $ tail -f /var/log/syslog 

  4. Reconnect the USB printer cable, you should see some messages appearing.
  5. Press Ctrl-C to stop the logging.
  6. Check whether the printer gets correctly detected by the USB subsystem and determine its USB vendor/product IDs and the USB bus and device addresses:
    $ lsusb
    Note: The USB bus and device addresses change if you turn off or unplug the printer. Please re-run this command if needed.

  7. Check whether the device files for the printer get created and the ownerships ("root lp") and permissions (non-HP: "crw-rw-r--", HP: "crw-rw-r--+") correctly set:
    $ ls -l /dev/usb/lp* /dev/bus/usb/*/*

  8. Determine the printer's device ID strings:
    $ sudo usb_printerid /dev/usb/lp0
    $ sudo usb_printerid /dev/usb/lp1
    ...
    For HP printers also use
    $ hp-info -i
    and choose the printer with the problem from the text menu, then copy the "deviceid" entry from the output (can be several lines).

  9. For HP printers: Check whether HPLIP connects to them:
    $ hp-makeuri <Bus>:<Device>
    Replace "<Bus>" and "<Device>" by the bus and device numbers from the "lsusb" output (not vendor and product ID). The numbers must be supplied with three digits, zero-padded from the left, like "008:015".

  10. Find out if your printer gets detected by CUPS:
    $ lpinfo -v

  11. Attach the output of the above commands to the bug report.

Note that problems cannot only caused by CUPS but also by the kernel (package "linux"), libusb, HPLIP (package "hplip"), and several third-party printer drivers.

Parallel port printer

  1. Make sure that the printer is connected to your system and powered on.
  2. Open a terminal/console and check if the lp, ppdev, and parport_pc kernel modules are loaded:
    $ lsmod | grep lp
    $ lsmod | grep ppdev
    $ lsmod | grep parport_pc

  3. Check if the kernel detected the parallel port during bootup:
    $ dmesg | grep par 

  4. Check if the device files of the parallel port(s) are created and have the correct permissions and ownerships:
    $ ls -l /dev/lp* /dev/parport* 

  5. Check if the printer auto-detection result appears in the kernel's virtual file system:
    $ ls -l /proc/sys/dev/parport/parport*/autoprobe* 
    $ sudo cat /proc/sys/dev/parport/parport*/autoprobe* 

  6. Find out if your printer gets detected by CUPS:
    $ lpinfo -v

  7. Run the parallel port CUPS backend separately, once with standard user privileges and once as root:
    $ /usr/lib/cups/backend/parallel 
    $ sudo /usr/lib/cups/backend/parallel 

  8. Attach the output of the above commands to the bug report.

Note that problems cannot only caused by CUPS but also by the kernel (package "linux"), HPLIP (package "hplip"), and several third-party printer drivers.

Network printer

  1. Make sure the printer is turned on and connected to your network. In the case of a WLAN (wireless) printer the printer needs to be configured to use your wireless network.
  2. Check the printer's configuration by printing a configuration page via the printer's front panel menus. This gives information about the IP address of the printer and about the protocols it supports (JetDirect/AppSocket, LPD, IPP, SMB/Windows, ...).

  3. You can also find the printer's IP address via the configuration web interface of your router. Many routers you can configure that the printer always gets the same IP and you can also assign a host name.
  4. To change the printer's configuration either use the printer's front panel menus or the printer's web configuration interface. To access this web interface, enter the IP address of the printer into the address or URL line of a web browser.
  5. If your printer is supposed to connect via WLAN and it does not get an IP address, make sure that your WLAN is turned on and that the correct network name (SSID) and password are set by the front panel menus of the printer. If the printer has no front panel menus, you have to connct it with an ethernet cable first and configure the WLAN access through the web interface. On some HP printers there is WLAN connection but no ethernet connection. These you have to connect via USB and then use the hp-wificonfig tool from the hplip-gui package to configure them.
  6. Set up the printer via system-config-printer ("Add" button). Wait around 15 seconds for the network scan (spinning icon must disappear). Usually you should select the default connection type as system-config-printer tries to find the best possibility. Generally use HP printers through the HPLIP connection, other printers preferably with DNS-SD connections (will continue to work whn the router changes the IP of the printer) and from the protocols use preferably AppSocket/jetDirect. The implementation of IPP in the printer's firmware has often bugs. Make sure the desired protocols and DNS-SD/mDNS/BonJour support are active in the printer's hardware configuration.
  7. Open a terminal/console and run the commands:
    $ ping <IP of the printer>
    $ nmap <IP of the printer>
    Replace "<IP of the printer>" by the printer's IP address. The first command checks whether you can access the printer through the network, the second shows which port numbers are used by the printer and through this which protocols are active (80: Has web interface, 139: SMB, 443: encrypted IPP or encrypted web interface, 515: LPD, 631: IPP, 9100: JetDirect/AppSocket). Install the "nmap" package if needed.

  8. Run the commands:
    $ /usr/lib/cups/backend/snmp
    $ sudo /usr/lib/cups/backend/dnssd
    The output shows whether the printers get found by CUPS or system-config-printer and with which device URIs and protocols.

  9. Run the command
    $ /usr/lib/cups/backend/snmp <IP of the printer>
    if a printer does not get found by the simple "/usr/lib/cups/backend/snmp" call.

  10. Find out if your printer gets detected by CUPS:
    $ lpinfo -v

  11. Run the commands:
    $ avahi-browse -a -v -t -r
    $ avahi-browse -a -v -c -r
    These commands show whether your printer is visible via DNS-SD/mDNS/BonJour.

  12. Run
    $ ifconfig
    $ route
    to check general network health.

  13. Attach the output of the above commands to the bug report.

Note that problems cannot only caused by CUPS but also by the kernel (package "linux"), HPLIP (package "hplip"), and several third-party printer drivers.

CUPS web interface

The CUPS web interface at http://127.0.0.1:631/ provides some useful messages and diagnostic capabilities.

CUPS error_log

This is a file where CUPS writes information about what it is doing. Almost all printing problems can be diagnosed from the error log, so it is the first place to look to start solving problems. To be useful, you must change the logging level:

  1. In Ubuntu Gutsy or newer, select "System" -> "Administration" -> "Printing" in the main menu of your desktop and in Oneiric or newer with Unity desktop click the gear icon at the upper right (the one also used to log out) and in the menu showing up then, click "Printer". The printer setup tool system-config-printer will open. Select "Server Settings" in the list on the left or in newer versions with the printers showing as icons choose erver" in the main menu and then "Settings". Note that the main menu will be in the bar at the top of the screen if Oneiric (or newer) with Unity is used. There it only appears if you move the mouse into the top bar. Then check the checkbox "Save debugging information for troubleshooting" and click "Apply".

  2. In all Ubuntu flavors (also Kubuntu and server editions) you can run
    $ cupsctl LogLevel=debug
    to activate debug logging.

  3. In Karmic and later (CUPS 1.4.x) there is an automatic debug logging only for failed print jobs. So if you problem was a failed print job, the error_log can already contain the desired information. Unfortunately, only 200 debug message lines get logged per failed job. Run the command
    $ cupsctl LogDebugHistory=999999
    for practically unlimited logging of failed jobs.

  4. In older versions of all flavors, where there is not yet a "cupsctl" command, edit the file /etc/cups/cupsd.conf, find the line LogLevel ... and change it to LogLevel debug, save the file. Then restart CUPS:
    $ sudo /etc/init.d/cupsys restart

  5. Clear the queue from any stuck jobs by deleting the jobs in the job viewer or running the "cancel -a" command.

  6. Try to print something. Wait until the job disappears from the queue or turns into "Stopped" state, independent whether something gets out of the printer. If the job never reaches "Stopped" state after the printer not showing any reaction for a longer time you also can go on to the next step.
  7. Scan or photograph the printout if it is not correct and attach the images to the bug report.
  8. Add /var/log/cups/error_log as an attachment to the bug report. Note that the file is not accessible for normal users. From Jaunty on you can access it from the account of the first user set up (in general users in the "adm" group). Otherwise you need to access it as root. To view the file run
    $ sudo less /var/log/cups/error_log
    and to copy it for attaching to a bug report run
    $ sudo cp /var/log/cups/error_log ~
    $ sudo chmod 777 ~/error_log

Troubleshooting Wizard

There is a troubleshooting wizard in system-config-printer (System -> Administration -> Printing in GNOME classic, Gear icon at the upper right of the screen -> Printers in Unity). You find it by in the "Help" menu of system-config-printer. It produces a text file with a lot of useful information to attach to bug reports. Follow the instructions of the wizard. If you reach the test page step, you can either click the button to print the test page or you can print a job to the selected printer from any application or from the command line. The job will be shown in the integrated job viewer. Wait until it completes or goes into "Stopped" state. ONLY THEN AND NOT BEFORE mark the checkbox at the job, answer whether the job got printed correctly, and click "Forward". After that the file will get generated. Save it and attach it to your bug report.

Print Error pop-up window

If a print job fails, a job viewer with the failed job ("Stopped" state) and pop-up window telling that the job has problems will appear. If you click the "Diagnose" button, the troubleshooting wizard will open. Do not delete the job before having completed the wizard. Take care to choose the printer with which the problem occured. In the "Test Page" step you do not need to print anything, nor to wait. Mark the stopped job in the integrated job viewer, click "No" at the question and then "Forward". After that save the file and attach it to the bug report.

AppArmor Protection of the printing system

From Gutsy on the security of the CUPS printing system is improved by using AppArmor. Unfortunately, the configuration is not perfect yet, especially if third-party printer drivers are used. If you have any problems with printing, try deactivating the AppArmor protection with sudo aa-complain cupsd. If this helps, look for messages containing audit in the /var/log/messages file. These show which components are accessed by the printing system for which there is no explicit permission given in /etc/apparmor.d/usr.sbin.cupsd. You can re-activate AppArmor via sudo aa-enforce cupsd. Report a bug, about the package cups (cupsys on 8.04 and older), so that we can correct the default configuration of AppArmor.

Capturing print job data

Often it is needed to find out what actually got sent to the printer in order to determine whether the problem is caused by the application or by the printing subsystem. For that it is the easiest way to capture the job data from the application so that it can analyzed whether it is already broken or not. To do so, follow these steps:

  1. Clear the print queues from old jobs. Either use the job viewer or run the command
    $ cancel -a
    in a terminal window.

  2. Disable the print queue with which you have the problem. Use system-config-printer (System -> Administration -> Printing in GNOME classic, Gear icon at the upper right of the screen -> Printers in Unity), right-click the appropriate printer icon, and click "Enabled" in the pop-up menu, so that the check mark disappears or run the command
    $ cupsdisable <PRINTER>
    in a terminal window (Replace "<PRINTER>" by the name of the print queue). This makes jobs staying in the queue so that you can capture them.

  3. Now print the job from your application. When the application has finished sending the job, check via the job viewer or the command
    $ lpstat -o
    whether it is in the queue.

  4. Display the content of CUPS' spool directory using the command
    $ sudo ls -1 /var/spool/cups
    (Enter your password when getting asked).

  5. There should be exactly one file beginning with a "d". Copy this file to your home directory:
    $ sudo cp /var/spool/cups/d... ~/printout
    $ sudo chmod 777 ~/printout

  6. Re-enable the print queue:
    $ cupsenable <PRINTER>

  7. If the file gets correctly printed now, try the above procedure with another file, we need a file where the problem occurs.
  8. Check via the command
    $ file ~/printout
    what format the file is. It is usually PDF or PostScript. Display the file on the screen to see whether the problem already occurs (error message, missing characters, wrong colors, ...). If you see the problem already, the application is the culprit, assign your bug report to the application's package, otherwise assign it to the "cups" package.

  9. Attach the original file of your application and the ~/printout file to your bug report.

Problems installing the CUPS package

Most problems of installing the CUPS package are due to the CUPS daemon not starting after the installation or update of the package and this often happens when something is not OK with the configuration settings in /etc/cups/cupsd.conf.

To find out what is happening during startup of CUPS run the following commands
$ wget http://people.canonical.com/~pitti/tmp/cups.upstart.debug
$ sudo cp /etc/init/cups.conf{,.orig} 
$ sudo cp cups.upstart.debug /etc/init/cups.conf
$ sudo stop cups
$ sudo start cups
This should fail. Please attach /tmp/log to your bug report. After that, please restore the original script again with
$ sudo mv /etc/init/cups.conf{.orig,} 

if the CUPS daemon did not start ("lpstat -r" says "scheduler is not running") follow the instructions under "CUPS error_log" on this page and instead of sending a job try to start CUPS:
$ sudo /usr/sbin/cupsd
If it fails, attach your error_log to your bug report.

If you look into your /tmp/log and error_log, you can probably also already find by yourself what went wrong, for example a broken entry in /etc/cups/cupsd.conf.

Known bugs

Description of known issues, how to recognise them and stock responses/actions.


CategoryBugSquad CategoryDebugging