303.4 Compartición de Impresoras

Introducción

La compartición de impresoras es una funcionalidad clave en entornos mixtos. Samba permite que clientes Windows impriman a través de impresoras gestionadas por CUPS (Common Unix Printing System) en Linux. Esta integración incluye soporte para point-and-print (instalación automática de drivers) y gestión remota de colas de impresión.

Integración Samba-CUPS

Arquitectura

Cliente Windows → Samba (SMB/CIFS) → CUPS → Impresora física

Samba actúa como intermediario entre los clientes Windows y el sistema de impresión CUPS de Linux. Los trabajos de impresión se envían vía protocolo SMB y Samba los reenvía a CUPS.

Configuración básica

[global]
   printing = cups
   printcap name = cups
   load printers = yes
   cups options = raw
ParámetroDescripción
printingSistema de impresión a usar (cups, bsd, lprng)
printcap nameFuente de la lista de impresoras (cups para autodescubrir)
load printersCargar automáticamente todas las impresoras de CUPS
cups optionsOpciones adicionales para CUPS (raw = sin filtro)

Para el examen: printing = cups y printcap name = cups son los parámetros esenciales para la integración Samba-CUPS. load printers = yes carga automáticamente todas las impresoras definidas en CUPS.

Sección [printers]

La sección especial [printers] define la configuración por defecto para todas las impresoras compartidas:

[printers]
   comment = Todas las impresoras
   path = /var/spool/samba
   browseable = no
   printable = yes
   guest ok = no
   writable = no
   create mask = 0700
ParámetroDescripción
pathDirectorio de spool para trabajos de impresión
printablePermite enviar trabajos de impresión (necesario: yes)
browseableno evita que cada impresora aparezca como share aparte
writableno para shares de impresora (se usa printable)

Para el examen: printable = yes es lo que distingue un share de impresora de un share de archivos. Es obligatorio para que los clientes puedan enviar trabajos de impresión.

Directorio de spool

El directorio de spool debe existir y tener los permisos correctos:

mkdir -p /var/spool/samba
chmod 1777 /var/spool/samba

Impresión raw (sin procesamiento)

Con cups options = raw, Samba envía los datos de impresión directamente a CUPS sin procesamiento adicional:

[global]
   cups options = raw

Esto es útil cuando los clientes Windows ya envían los datos en el formato correcto para la impresora (porque tienen el driver instalado localmente).

Para el examen: cups options = raw hace que CUPS no aplique filtros adicionales al trabajo de impresión. Los datos se envían tal cual los genera el driver del cliente.

Point-and-Print (Drivers)

Concepto

Point-and-Print permite que los clientes Windows descarguen e instalen automáticamente los drivers de impresora desde el servidor Samba, eliminando la necesidad de instalación manual.

Share print$

El share especial [print$] almacena los drivers de impresora:

[print$]
   comment = Drivers de impresoras
   path = /var/lib/samba/drivers
   browseable = yes
   read only = yes
   write list = @printadmin root

Estructura de directorios de drivers

/var/lib/samba/drivers/
├── W32X86/          # Drivers Windows 32-bit (Windows XP/Vista)
│   └── 3/           # Versión 3 de driver
├── x64/             # Drivers Windows 64-bit
│   └── 3/           # Versión 3 de driver
└── WIN40/           # Drivers Windows 95/98
    └── 0/           # Versión 0 de driver
# Crear la estructura de directorios
mkdir -p /var/lib/samba/drivers/{W32X86,x64,WIN40}/{0,2,3}
chown -R root:printadmin /var/lib/samba/drivers
chmod -R 2775 /var/lib/samba/drivers

Para el examen: El share [print$] es donde Samba almacena los drivers de impresora para distribución automática a clientes Windows. La estructura de subdirectorios corresponde a las diferentes arquitecturas de Windows.

Gestión de drivers con rpcclient

Subir drivers

# Conectar con rpcclient
rpcclient //localhost -U administrador
 
# Subir un driver (dentro de rpcclient)
rpcclient $> adddriver "Windows x64" \
  "NombreDriver:driver.dll:datafile.ppd:configfile.dll:helpfile.hlp"

Asociar driver a impresora

rpcclient $> setdriver "NombreImpresora" "NombreDriver"

Listar drivers e impresoras

# Listar drivers instalados
rpcclient $> enumdrivers 3
 
# Listar impresoras
rpcclient $> enumprinters
 
# Ver información de una impresora
rpcclient $> getprinter "NombreImpresora" 2

Para el examen: rpcclient con los comandos adddriver y setdriver se usa para gestionar drivers de impresora desde la línea de comandos Linux. enumdrivers y enumprinters listan los recursos disponibles.

Pipes SPOOLSS

El protocolo SPOOLSS (Spooler Subsystem) es el mecanismo RPC que Windows usa para comunicarse con el servicio de impresión. Samba implementa las pipes SPOOLSS para:

  • Enumerar impresoras y drivers
  • Enviar y gestionar trabajos de impresión
  • Subir y descargar drivers
  • Gestionar configuración de impresoras

Las operaciones SPOOLSS se pueden realizar con:

  • rpcclient desde Linux
  • Herramientas de administración de impresoras desde Windows (RSAT)
  • PowerShell o printmanagement.msc

Configuración avanzada de impresoras individuales

Se pueden definir impresoras individuales con configuración específica:

[LaserColor]
   comment = Impresora láser a color del segundo piso
   path = /var/spool/samba
   printable = yes
   printer name = HP_Color_LaserJet
   valid users = @empleados
   hosts allow = 192.168.1.0/24
ParámetroDescripción
printer nameNombre de la impresora en CUPS
printablePermite impresión en este share
valid usersUsuarios con acceso a esta impresora

Ejemplo completo de configuración

[global]
   workgroup = EMPRESA
   printing = cups
   printcap name = cups
   load printers = yes
   cups options = raw
 
[printers]
   comment = Todas las impresoras
   path = /var/spool/samba
   browseable = no
   printable = yes
   guest ok = no
   writable = no
   create mask = 0700
 
[print$]
   comment = Drivers de impresoras
   path = /var/lib/samba/drivers
   browseable = yes
   read only = yes
   write list = @printadmin root
   create mask = 0664
   directory mask = 0775

Diagnóstico de problemas

# Verificar que CUPS está funcionando
systemctl status cups
lpstat -p -d
 
# Verificar impresoras visibles desde Samba
smbclient -L //localhost -U admin -c "ls"
 
# Verificar configuración de impresión
testparm -s | grep -i print
 
# Enviar trabajo de prueba desde Linux
lp -d NombreImpresora /etc/hostname
 
# Ver cola de impresión
lpq -P NombreImpresora
 
# Ver logs de CUPS
tail -f /var/log/cups/error_log

Para el examen: lpstat -p muestra las impresoras disponibles en CUPS. Si Samba no muestra impresoras, verificar primero que CUPS las tiene configuradas y que load printers = yes está activo.


Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • printable = yes distingue share de impresora de share de archivos — Sin printable = yes, un share no acepta trabajos de impresion. Es el parametro obligatorio para impresoras. writable = no es correcto para shares de impresora (se usa printable, no writable).
  • printing = cups y printcap name = cups son esenciales — Estos dos parametros en [global] configuran la integracion Samba-CUPS. Sin ellos, Samba no descubre las impresoras de CUPS. Las preguntas presentan escenarios donde las impresoras no aparecen y la causa es la ausencia de estos parametros.
  • cups options = raw vs procesamiento CUPS — Con raw, CUPS envia los datos sin filtrar (el driver del cliente hace el trabajo). Sin raw, CUPS aplica sus propios filtros que pueden causar problemas con drivers Windows. Las preguntas piden saber cuando usar cada opcion.
  • [print$] es para drivers, [printers] es para impresoras[print$] almacena los drivers de impresora para Point-and-Print (distribucion automatica). [printers] define la configuracion por defecto de las impresoras compartidas. Confundir ambos shares especiales es error comun.
  • Estructura de drivers: W32X86 vs x64W32X86/3/ es para drivers Windows 32-bit, x64/3/ para 64-bit. La estructura de subdirectorios debe existir con permisos correctos. Las preguntas piden identificar el directorio correcto segun la arquitectura del cliente.
  • rpcclient adddriver y setdriveradddriver sube un driver al servidor. setdriver asocia un driver a una impresora. Son dos pasos separados. enumdrivers 3 lista los drivers version 3 instalados. Las preguntas piden la secuencia correcta.
  • SPOOLSS pipes para comunicacion de impresion — El protocolo SPOOLSS gestiona la comunicacion de impresion entre Windows y Samba via RPC. Las operaciones se pueden hacer con rpcclient (Linux) o herramientas RSAT (Windows). Las preguntas suelen pedir identificar la herramienta correcta.
  • Directorio spool con permisos 1777/var/spool/samba necesita permisos 1777 (sticky bit) para que todos los usuarios puedan crear trabajos de impresion pero no puedan eliminar los de otros. Permisos incorrectos causan errores de impresion.