---
title: CUPS en FreeBSD
authors:
  - author: Chess Griffin
    email: chess@chessgriffin.com
releaseinfo: "$FreeBSD$" 
trademarks: ["freebsd", "general"]
---

= CUPS en FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
:lang: es
:toc-title: Tabla de contenidos
:part-signifier: Parte
:chapter-signifier: Capítulo
:appendix-caption: Apéndice
:table-caption: Tabla
:figure-caption: Figura
:example-caption: Ejemplo

[.abstract-title]
Resumen

Un artículo sobre la configuración de CUPS en FreeBSD.

'''

toc::[]

[[printing-cups]]
== Una introducción al sistema de impresión común de Unix (CUPS)

CUPS, el sistema de impresión común de UNIX, proporciona una capa portable de impresión para sistemas operativos tipo UNIX(R). Ha sido desarrollado por Easy Software Products para promover una solución de impresión estándar para todos los proveedores y usuarios de UNIX(R).

CUPS usa el Protocolo de Impresión de Internet (IPP) como base para administrar los trabajos de impresión y las colas. Los protocolos Line Printer Daemon (LPD), Server Message Block (SMB) y AppSocket (aka JetDirect) también son compatibles pero con funcionalidad reducida. CUPS añade la búsqueda de impresoras en red y PostScript Printer Description (PPD) como opciones de impresión para dar un soporte de impresión real bajo UNIX(R). Como resultado, CUPS es ideal para compartir y acceder a impresoras en entornos mixtos con FreeBSD, Linux(R), Mac OS(R) X, o Windows(R).

El sitio principal de CUPS es http://www.cups.org/[http://www.cups.org/].

[[printing-cups-install]]
== Instalación del servidor de impresión CUPS

Para instalar CUPS utilizando un binario precompilado, utilice el siguiente comando desde un terminal con el usuario root:

[source,bash]
....
# pkg install cups
....

Otros paquetes opcionales, pero recomendados, son package:print/gutenprint-cups[] y package:print/hplip[], que agregan controladores y utilidades para varias impresoras. Una vez instalados, los archivos de configuración de CUPS se pueden encontrar en el directorio [.filename]#/usr/local/etc/cups#.

[[printing-cups-configuring-server]]
== Configurando el servidor de impresión CUPS

Después de la instalación, se deben editar algunos archivos para configurar el servidor de CUPS. Primero, cree o modifique, según sea el caso, el archivo [.filename]#/etc/devfs.rules# y agregue la siguiente información para establecer los permisos adecuados en todas las impresoras y para asociar las impresoras con el grupo de usuarios `cups`:

[.programlisting]
....
[system=10]
add path 'unlpt*' mode 0660 group cups
add path 'ulpt*' mode 0660 group cups
add path 'lpt*' mode 0660 group cups
add path 'usb/X.Y.Z' mode 0660 group cups
....

[NOTE]
====
Tenga en cuenta que _X_, _Y_ y _Z_ deben reemplazarse con el dispositivo USB de destino listado en el directorio [.filename]#/dev/usb# que corresponda a la impresora. Para encontrar el dispositivo correcto, examine la salida de man:dmesg[8], donde [.filename]#ugenX. Y# muestra el dispositivo de la impresora, que es un enlace simbólico a un dispositivo USB en [.filename]#/dev/usb#.
====

A continuación, agregue las siguientes dos líneas a [.filename]#/etc/rc.conf#:

[.programlisting]
....
cupsd_enable="YES"
devfs_system_ruleset="system"
....

Estas dos líneas iniciarán el servidor de impresión CUPS al inicio e invocarán la regla local devfs, respectivamente.

Para habilitar la impresión de CUPS en ciertos clientes de Microsoft(R) Windows(R), la siguiente línea debe descomentarse en [.filename]#/usr/local/etc/cups/mime.types# y [.filename]#/usr/local/etc/cups/mime.convs#:

[.programlisting]
....
application/octet-stream
....

Una vez que se han realizado estos cambios, los sistemas man:devfs[8] y CUPS deben reiniciarse, ya sea reiniciando el ordenador o ejecutando los siguientes dos comandos en un terminal con el usuario root:

[source,bash]
....
# /etc/rc.d/devfs restart
# /usr/local/etc/rc.d/cupsd restart
....

[[printing-cups-configuring-printers]]
== Configuración de impresoras en el servidor de impresión CUPS

Una vez CUPS haya sido instalado y configurado, el administrador puede empezar a configurar las impresoras locales conectadas al servidor de impresión CUPS. Esta parte del proceso es muy similar, si no idéntica, a la configuración de impresoras CUPS en otros sistemas operativos basados en UNIX(R), como una distribución de Linux(R).

El medio principal para gestionar y administrar el servidor CUPS es a través de la interfaz web, se puede acceder introduciendo en la URL de un navegador web http://localhost:631[http://localhost:631]. Si el servidor CUPS está en otra máquina en la red, sustituya la dirección IP local del servidor por `localhost`. La interfaz web de CUPS se explica por sí misma, ya que hay secciones para administrar impresoras y trabajos de impresión, autorizar usuarios y más. Además, en el lado derecho de la pantalla de Administración hay varias casillas que permiten un acceso fácil a las configuraciones más comunes, por ejemplo, compartir impresoras conectadas al sistema, permitir la administración remota del servidor CUPS y dar permisos adicionales a los usuarios sobre las impresoras y los trabajos de impresión.

Por lo general, añadir una impresora es tan fácil como hacer clic en "Add Printer" en la pantalla de Administración de la interfaz web de CUPS, o haciendo clic en uno de los botones "New Printers Found" también en la pantalla de Administración. Cuando se muestre el cuadro desplegable "Device", simplemente seleccione la impresora local deseada y continúe con el proceso. Si usted ha agregado los ports o paquetes mencionados anteriormente package:print/gutenprint-cups[] o package:print/hplip[], entonces, los controladores de impresión adicionales estarán disponibles en las siguientes pantallas pudiendo proporcionar más estabilidad o características.

[[printing-cups-clients]]
== Configurando clientes de CUPS

Una vez haya sido configurado el servidor CUPS y se hayan agregado y publicado impresoras en la red, el siguiente paso es configurar los clientes o las máquinas que van a acceder al servidor CUPS. Si uno tiene una sola máquina de escritorio que actúa como servidor y como cliente, es posible que gran parte de esta información no sea necesaria.

[[printing-cups-clients-unix]]
=== Clientes UNIX(R)

CUPS también tendrá que estar instalado en sus clientes UNIX(R). Una vez que CUPS ha sido instalado en los clientes, las impresoras CUPS que se encuentren compartidas en la red, a menudo son descubiertas de forma automática por los administradores de impresión de algunos escritorios como GNOME o KDE. Como alternativa, puede acceder a la interfaz local de CUPS en la máquina cliente en http://localhost:631[http://localhost:631] y hacer clic en "Add Printer" en la sección de Administración. Cuando se muestre el cuadro desplegable "Device", simplemente seleccione la impresora CUPS en red si esta fue descubierta automáticamente, o seleccione `ipp` o `http` e introduzca el IPP o HTTP URI de la impresora CUPS en red, generalmente con la siguiente sintaxis:

[.programlisting]
....
ipp://server-name-or-ip/printers/printername
....

[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....

Si los clientes de CUPS tienen dificultades para encontrar otras impresoras de CUPS compartidas en la red, a veces es útil agregar o crear un archivo [.filename]#/usr/local/etc/cups/client.conf# con una sola línea como la que se muestra a continuación:

[.programlisting]
....
ServerName server-ip
....

En este caso, _server-ip_ sería reemplazado por la dirección IP local del servidor CUPS.

[[printing-cups-clients-windows]]
=== Clientes Windows(R)

Las versiones de Windows(R) anteriores a XP no tienen la capacidad de conectarse por red de forma nativa con impresoras IPP. Sin embargo, Windows(R) XP y posteriores si tienen esa capacidad. Por lo tanto, añadir impresoras CUPS en esas versiones de Windows(R) es bastante fácil. Generalmente, el administrador de Windows(R) ejecutará el Asistente para `Agregar Impresoras` de Windows(R), seleccione `Impresora de Red` y luego inserte la URI siguiendo la siguiente sintaxis:

[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....

Si dispone de una versión antigua de Windows(R) sin soporte nativo de impresión IPP, entonces la forma habitual de conectar una impresora a CUPS es usar package:net/samba3[] y CUPS juntos, pero eso es un tema fuera del alcance de este capítulo.

[[printing-cups-troubleshooting]]
== Solución de problemas en CUPS

A menudo, las dificultades con CUPS radican en los permisos. Primero, verifique dos veces los permisos de man:devfs[8] como se ha descrito anteriormente. A continuación, verifique los permisos actuales de los dispositivos creados en el sistema de archivos. También es útil asegurarse de que su usuario sea miembro del grupo `cups`. Si las casillas de verificación de los permisos en la sección de Administración de la interfaz web de CUPS parecen no funcionar, otra solución sería realizar una backup manual del archivo de configuración principal de CUPS ubicado en [.filename]#/usr/local/etc/cups/cupsd.conf#, editar las opciones y probar diferentes combinaciones de configuración. Un ejemplo de [.filename]#/usr/local/etc/cups/cupsd.conf# para probar se muestra a continuación. Tenga en cuenta que el archivo de ejemplo [.filename]#cupsd.conf# sacrifica la seguridad para facilitar la configuración; una vez que el administrador se conecte con éxito al servidor de CUPS y configure los clientes, es recomendable volver a editar este archivo de configuración y empezar a bloquear el acceso.

[.programlisting]
....
# Registrar la información general en error_log - cambie "info" a "debug" para
#la resolución de problemas...
LogLevel info

# Administrador del grupo de usuarios...
SystemGroup wheel

# Escuchar las conexiones en el puerto 631.
Port 631
#Escuchar localhost:631
Listen /var/run/cups.sock

# Mostrar impresoras compartidas en la red local.
Browsing On
BrowseOrder allow,deny
#BrowseAllow @LOCAL
BrowseAllow 192.168.1.* # change to local LAN settings
BrowseAddress 192.168.1.* # change to local LAN settings

# Tipo de autenticación predeterminado, cuando se requiere autenticación...
DefaultAuthType Basic
DefaultEncryption Never # comenta esta línea para permitir el cifrado

# Permitir el acceso al servidor desde cualquier máquina en la LAN
<Location />
  Order allow,deny
  #Permitir localhost
  Allow 192.168.1.* # cambiar a la configuración de LAN local
</Location>

# Permitir el acceso a las páginas de administración desde cualquier máquina en la LAN
<Location /admin>
  #Cifrado requerido
  Order allow,deny
  #Permitir localhost
  Allow 192.168.1.* # cambiar a la configuración de LAN local
</Location>

# Permitir el acceso a los archivos de configuración desde cualquier máquina en la LAN
<Location /admin/conf>
  AuthType Basic
  Require user @SYSTEM
  Order allow,deny
  #Permitir localhost
  Allow 192.168.1.* # cambiar a la configuración de LAN local
</Location>

# Establece las políticas predeterminadas de impresora/trabajo...
<Policy default>
  # Las operaciones relacionadas con un job deben ser realizadas por el propietario o un administrador...
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \
Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \
Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \
CUPS-Move-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  # Todas las operaciones de administración requieren de un administrador para autenticarse...
  <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \
Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \
Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \
Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \
CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>
    AuthType Basic
    Require user @SYSTEM
    Order deny,allow
  </Limit>

  # Solo el propietario o un administrador puede cancelar o autenticar un job...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>

  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
....
