Imprimir en Linux

Cómo imprimir en Linux

En Linux podemos imprimir de tres maneras:

  1. escribir directamente en la impresora: la forma más sencilla (con mucho) de imprimir un archivo en Linux es enviarlo directamente a la impresora. Por ejemplo, para imprimir tesis.txt haremos:
    $ cat tesis.txt > /dev/lp0

    Puerto paralelo

    En Linux el primer puerto paralelo (LPT1) se denomina /dev/lp0.

  2. el sistema lpr/lpd (paquete lpr): es la versión para Linux del sistema lp (Line Printer) de UNIX (existe una versión mejorada, LPRng). Hasta que apareció CUPS era el sistema estándar de imprimir en Linux. Incluso ahora, es el sistema que se instala por defecto.
  3. el sistema CUPS (Common UNIX Printing System, easysw.com, paquete cupsys): actualmente es el sistema estándar de impresión en Linux.

En el entorno gráfico, las aplicaciones que pueden imprimir son compatibles tanto con lpr/lpd como con CUPS: utilizarán el sistema que esté instalado, trabajarán sobre él y obtendrán automáticamente las propiedades de la impresora. Algunas aplicaciones (GNOME, KDE, Xfce y OpenOffice) traen Administradores de impresión compatibles con los diferentes sistemas de impresión que nos permiten gestionar las impresoras y los trabajos de impresión, como KJobViewer (paquete kdeprint).

KJobViewer

Y muchas aplicaciones (OpenOffice, KDE…) incorporan dispositivos virtuales que permiten imprimir un documento como PDF, generar emails o faxes, etc.

Imprimir con KDE

Recursos

En qué consiste el sistema de impresión CUPS

El sistema de impresión CUPS reemplaza al sistema de impresión lpr/lpd y consiste en lo siguiente:

  1. el demonio de impresión cupsd (print spooler daemon): vigila los directorios spool buscando trabajos a imprimir. Cuando aparece alguno, cupsd lanza una copia de sí mismo que imprimirá el archivo en la impresora apropiada.
  2. la cola de impresión (spool): ubicada en el directorio /var/spool/cups, donde se almacenan los trabajos a imprimir. Los nuevos trabajos a imprimir se colocan en la cola de impresión a la espera: el primero que entra es el primero que sale.
  3. los comandos lpr/lpd para manejar la cola de impresión: el sistema lpr/lpd es uno de los estándares de UNIX, y las aplicaciones asumen que tendrán los comandos de este sistema de impresión disponibles. Por este motivo CUPS proporciona su propia versión de esos comandos, que son:
    • lpr (o lp): enviar trabajos a la cola de impresión. Este comando copia el archivo a imprimir en el directorio de spool, donde permanece hasta que el demonio cupsd lo imprime. Su sintaxis es:
      $ lpr <archivo>
    • lpq: consultar los trabajos pendientes en la cola de impresión.
    • lpc: configurar las impresoras.
    • lprm: eliminar trabajos de la cola de impresión.
  4. los drivers PPD de las impresoras PostScript: en Linux, cuando una aplicación envía un documento a la impresora genera un archivo PostScript.

    Si la impresora entiende el lenguaje PostScript puede imprimir el documento directamente. Sólo tenemos que decirle a CUPS cuáles son las características de la impresora, y eso lo hace el archivo PPD (Postscript Printer Description): contiene todas las características de la impresora, como tamaños de papel, colores, resoluciones disponibles, etc.

    Si la impresora no entiende PostScript debemos traducir los documentos que generan las aplicaciones (PostScript) a un lenguaje que entienda la impresora, por lo que necesitamos un filtro. De esto se encarga Foomatic (paquete foomatic-db-engine): proporciona el archivo PPD y los filtros necesarios para traducir los documentos (trabaja sobre GhostScript).

    En ambos casos, el archivo PPD de la impresora se puede descargar desde LinuxPrinting (linuxprinting.org) o desde la web de CUPS (cups.org) y se debe guardar en el directorio /usr/share/cups/model.

  5. los comandos CUPS para administrar las impresoras: lpinfo, lpadmin, enable, disable, accept, reject, lpoptions y lpstat.
  6. la interfaz web de CUPS: es la mejor opción para administrar CUPS.

CUPS

Instalar una impresora local con CUPS

Veamos cómo instalar una impresora local con CUPS utilizando su interfaz web:

  • conectamos la impresora.
  • conseguimos e instalamos el archivo PPD de nuestra impresora.
  • instalamos Foomatic si la impresora no es PostScript.
  • reiniciamos el demonio de CUPS:
    # /etc/init.d/cupsys restart
  • accedemos al interfaz web de CUPS: http://localhost:631

    Interfaz web de CUPS

  • entramos en Administración.

    Administrar CUPS

  • pulsamos Añadir impresora e introducimos Nombre de la impresora: Samsung, Ubicación: Taller y Descripción: Samsung Laser.

    Datos de la impresora

  • en la siguiente pantalla nos preguntará Tipo de conexión: Samsung ML-2010 USB # 1.

    Tipo de conexion

  • seleccionamos el modelo.

    Modelo impresora

  • nos pedirá Usuario y Contraseña, ya que para administrar impresoras hay que tener permisos de root (la contraseña se envía en texto plano, sin encriptar).

    Usuario

  • y ya tenemos la impresora instalada.

    Impresora instalada

  • pulsando en Impresoras iremos a la página de la nueva impresora. Desde aquí podemos monitorizar los trabajos de impresión, cambiar las opciones de configuración y seleccionarla como impresora predeterminada.

    Impresoras

  • para terminar, comprobamos que realmente funciona lanzando una página de prueba con Imprimir página de prueba.

Compartir nuestra impresora

Tenemos dos posibilidades para compartir nuestra impresora:

  1. que CUPS escuche conexiones de máquinas remotas

    Los equipos que dispongan de un cliente IPP (Linux, Unix, Mac y Windows XP) podrán conectar con el demonio de impresión cupsd de nuestra máquina mediante el protocolo IPP (Internet Printing Protocol, puerto 631 TCP), e imprimir en nuestra impresora, una vez que les permitamos acceder. Para ello, en el archivo de configuración de CUPS, /etc/cups/cupsd.conf especificaremos qué máquinas tienen acceso a CUPS. Buscaremos las líneas:

    <Location />
        Order Deny,Allow
        Deny All
        Allow 127.0.0.1
    </Location>

    Vemos que por defecto sólo puede acceder a CUPS la propia máquina (127.0.0.1). Para que puedan acceder las máquinas de la LAN añadiremos la línea:

    Allow 192.168.0.0/255.255.255.0

    Para terminar reiniciamos el demonio de CUPS:

    # /etc/init.d/cupsys restart

    Una vez compartida la impresora, es muy sencillo imprimir desde Linux:

    • Interfaz web de CUPS http://localhost:631
    • Administración, Añadir impresora
    • Introducimos Nombre de la impresora, Ubicación y Descripción
    • Tipo de conexión, Internet Printing Protocol (IPP).
    • URL de la conexión, ipp://192.168.0.2/printers/Canon.
    • Modelo, Usuario y Contraseña y la impresora ya está instalada.

      IPP

    También es muy sencillo imprimir desde Windows XP:

    • Asistente para agregar impresoras
    • Impresora de red o una impresora conectada a otra computadora
    • Conectarse a una impresora en Internet o en su red doméstica u organización
    • URL de la conexión, http://192.168.0.2:631/printers/Canon.
    • Instalamos los drivers de la impresora desde el CD del fabricante y listo.

    Drivers de la impresora

  2. que el servidor Samba atienda peticiones remotas y las pase a CUPS

    Los equipos que dispongan de un cliente SMB (Windows) podrán conectar con el servidor Samba (paquete samba) de nuestra máquina mediante el protocolo SMB (puerto 139 TCP), y éste se encargará de pasarle la petición a CUPS.

    Servidor Samba

    Vamos a configurar el servidor Samba para compartir nuestra impresora. Primero crearemos en nuestro sistema un usuario específico (smbprint) para que acceda a la impresora mediante Samba. Si queremos permitir acceso anónimo lo podemos crear sin contraseña:

    # /usr/sbin/adduser --system --disabled-password smbprint

    Para compartir nuestra impresora CUPS y que sólo el usuario smbprint tenga acceso a ella, como invitado (por lo que todas las máquinas de la red local y con conexión directa desde Internet podrán imprimir), editaremos el archivo /etc/samba/smb.conf poniendo:

    [printers]
    browseable = yes
    printable = yes
    public = yes
    guest only = yes
    guest account = smbprint
    path = /home/smbprint

    Además tenemos que decirle a Samba que el sistema de impresión es CUPS, no lpr/lpd, por lo que cambiaremos /etc/samba/smb.conf para que quede:

    [global]
    printcap name = cups
    printing = cups

    Grabamos los cambios y reiniciamos Samba:

    # /etc/init.d/samba restart

    Una vez compartida la impresora, es muy sencillo imprimir desde Windows:

    • localizamos nuestra máquina en el Explorador de archivos. Veremos que tiene una impresora compartida.
    • pulsamos Conectar… e instalamos los drivers desde el CD del fabricante.

Imprimir desde Linux en una impresora Windows

Para conectar desde Linux con un equipo remoto Windows que tiene una impresora compartida usaremos el cliente Samba (paquete smbclient), mediante el protocolo SMB, puerto 139 TCP. CUPS utiliza como back-end el programa smbspool de Samba.

Cliente Samba

Primero nos aseguraremos de que podemos acceder a la máquina Windows:

# smbclient -L 192.168.0.2 -U usuario

Una vez comprobado que la impresora remota es accesible, es muy sencillo imprimir:

  • Interfaz web de CUPS http://localhost:631
  • Administración, Añadir impresora
  • Introducimos Nombre de la impresora, Ubicación y Descripción
  • Tipo de conexión, Windows Printer via Samba.
  • URL de la conexión, smb://usuario:password@192.168.0.2/Canon (si el usuario con permiso para imprimir en el servidor Samba se llama igual que el usuario que lanza la impresión, no es necesario especificarlo).
  • Modelo, Usuario y Contraseña y ya está.

    Samba

9 Comments:

  1. Hola amigos, desde Colombia les agradezco la pagina, esta muy bien explicado, me han llevado de la mano jajaja, gracias.

  2. Hola, gracias por la excelente explicación, existe la posibilidad de dar de alta las impresoras vía línea de comando?

  3. Enrique, la interfaz web es la mejor opción para administrar CUPS, pero, como es habitual en Linux, todo puede hacerse vía comandos, tanto administrar las impresoras (lpinfo, lpadmin, enable, disable, accept, reject, lpoptions, lpstat…) como manejar la cola de impresión (lpr, lp, lpq, lpc, lprm…)
    Ya sabes, ‘man’ es tu amigo…

  4. Amigos, instale la impresora hp que esta en una maquina Win Xp, tengo ubuntu, sin problema conecta, envia la impresion pero la impresora se prepara para imprimir y queda en espera la cola, espero algun comentario por favor.
    Magno

  5. hola amigo, no he tenido problema alguno al imprimir de window server 2003 a linux, pero ahora he migrado a window server 2008 y no pueod imprimir a linux… haber is ya alguien encontor el problema.. gracias

  6. saludos desde Costa Rica, me ha sido imposible ahora que me pasé a Jaunty 9.04 imprimir en la PIXMA, Canon, IP 1200, según manualillo que circula en la red, se pueden hacer unos pasos y simular que es la IP 2200, pero amí me salió la opción al principio, decia imprimiendo pero no sucedía nada, ahora borré todo, empecé de nuevo y ahora ni siquiera aparece la 2200, mucho menos la 1200, em dicen que dicha PRT es basura y que no hay forma de hacerla trabajar, pero con la crisis no puedo comprar otra! Por favor suplico ayuda!

  7. Yo peleando con una canon ip 2200 si comentan alguna guia o solucion que tengan les agradeceria mucho

    Ubuntu 8.10
    portatil acer amd 64 athlon

    problemas tambien para reconocer el dvd-rt

    saludos

  8. Humberto Riveros

    El problema que tengo es : tengo un servidor linux con cups instalado, los clientes windows se conectaban por url:
    http : //servidor:631/printers/impresora
    todo funciono durante 8 meses y un dia no imprimio mas, lo curioso es que localmente si imprimia, luego puse samba para imprimir y ok siguio imprimiendo hasta el dia siguiente. Que puede estar pasando ?

  9. Hola el problema que tengo es que para imprimir una impresora linux mediante windows por samba se comparte mediante una direccion ip estatica, mi proveedor de internet me da una direccion ip dinamica la cual no puedo cambiar, por este motivo no puedo imprimir
    desde linux a windows.

    Espero su colaboracion.

    Gracias