Servidor CUPS

Nivell: ASIX / SMX

Sistema: Ubuntu Server 24.04 LTS

Introducció

CUPS (Common Unix Printing System) és el sistema d’impressió estàndard en sistemes GNU/Linux i macOS. Permet gestionar impressores locals i en xarxa, actuar com a servidor d’impressió per a altres equips (Windows, Linux, macOS) i administrar cues d’impressió.

CUPS logo

En aquest document aprendrem a:

Prerequisits

1. Instal·lació de CUPS

1.1. Actualitzar el sistema

sudo apt update && sudo apt upgrade -y

1.2. Instal·lar CUPS i utilitats addicionals

sudo apt install -y cups cups-client cups-bsd printer-driver-all

Els paquets principals instal·lats són:

Paquet Descripció
cups Servidor d’impressió CUPS
cups-client Eines de línia d’ordres per gestionar impressió
cups-bsd Compatibilitat amb ordres BSD (lpr, lpq, lprm)
printer-driver-all Col·lecció de controladors d’impressores

1.3. Verificar la instal·lació

cups --version

Sortida esperada:

CUPS v2.4.x

2. Gestió del servei CUPS

2.1. Habilitar i arrancar el servei

sudo systemctl enable cups
sudo systemctl start cups

2.2. Verificar l’estat del servei

sudo systemctl status cups

Sortida esperada (fragment):

● cups.service - CUPS Scheduler
     Loaded: loaded (/usr/lib/systemd/system/cups.service; enabled)
     Active: active (running) since ...

2.3. Ordres de gestió del servei

sudo systemctl start cups      # Engegar
sudo systemctl stop cups       # Aturar
sudo systemctl restart cups    # Reiniciar
sudo systemctl reload cups     # Recarregar configuració sense aturar

3. Configuració de l’accés a la interfície web

3.1. Fitxer de configuració principal

El fitxer de configuració de CUPS és /etc/cups/cupsd.conf. L’editem per permetre l’accés des de la xarxa local:

sudo nano /etc/cups/cupsd.conf

3.2. Canvis necessaris a cupsd.conf

Localitzem i modifiquem les seccions següents:

a) Escoltar a totes les interfícies (no només localhost):

# Línia original:
Listen localhost:631

# Substituir per:
Port 631

b) Permetre accés a la interfície web des de la xarxa:

<Location />
  Order allow,deny
  Allow @LOCAL
</Location>

<Location /admin>
  Order allow,deny
  Allow @LOCAL
</Location>

<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
  Allow @LOCAL
</Location>
💡
Nota

@LOCAL permet l’accés des de qualsevol equip de la xarxa local. Per restringir a una subxarxa específica, substituir per Allow 192.168.1.0/24 (adaptant al rang de la xarxa).

c) Habilitar la interfície web (si cal):

WebInterface Yes

3.3. Reiniciar CUPS per aplicar els canvis

sudo systemctl restart cups

3.4. Obrir el port al tallafoc (UFW)

sudo ufw allow 631/tcp
sudo ufw allow 631/udp
sudo ufw reload

Verificar:

sudo ufw status

3.5. Accedir a la interfície web

Des d’un navegador de la xarxa local, accedir a:

http://IP_DEL_SERVIDOR:631

Per exemple: http://192.168.1.10:631

4. Configuració de l’usuari administrador

Per poder administrar CUPS des de la interfície web, l’usuari ha de pertànyer al grup lpadmin.

sudo usermod -aG lpadmin NOM_USUARI

Verificar que l’usuari pertany al grup:

groups NOM_USUARI
⚠️
Avís

Cal tancar la sessió i tornar a entrar perquè el canvi de grup tingui efecte.

5. Afegir una impressora

5.1. Des de la interfície web

  1. Obrir http://IP_DEL_SERVIDOR:631

  2. Anar a Administration → Add Printer

  3. Introduir credencials d’administrador quan es demani

  4. Seleccionar el tipus de connexió:

    Local Printers: impressores connectades físicament
    Network Printers: impressores en xarxa (LPD, IPP, SMB, etc.)
  5. Configurar el nom, descripció i ubicació

  6. Seleccionar el controlador (driver) adequat

  7. Fer clic a Add Printer

5.2. Des de la línia d’ordres

Llistar impressores disponibles al sistema:

lpstat -p -d

Afegir una impressora en xarxa (protocol IPP):

sudo lpadmin -p nom_impressora \
  -v ipp://192.168.1.50/ipp/print \
  -m everywhere \
  -E
Paràmetre Significat
-p Nom de la impressora a CUPS
-v URI de connexió (protocol + adreça)
-m everywhere Usar el controlador universal IPP Everywhere
-E Habilitar la impressora immediatament

Establir la impressora per defecte:

sudo lpadmin -d nom_impressora

Afegir una impressora USB local:

# Detectar el dispositiu
lpinfo -v | grep usb

# Afegir la impressora
sudo lpadmin -p ImpresoraUSB \
  -v usb://fabricant/model \
  -m drv:///sample.drv/generic.ppd \
  -E

6. Compartir impressores a la xarxa

6.1. Habilitar la compartició global

Editar /etc/cups/cupsd.conf i afegir o modificar:

# Habilitar la compartició de impressores
ServerName IP_DEL_SERVIDOR
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic

I afegir al final:

<Policy default>
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs ...>
    Order deny,allow
  </Limit>
</Policy>

6.2. Marcar una impressora com a compartida

Via interfície web:

  1. Anar a Printers → nom de la impressora
  2. Clicar Modify Printer
  3. Activar l’opció Share This Printer

Via línia d’ordres:

sudo lpadmin -p nom_impressora -o printer-is-shared=true

6.3. Habilitar la compartició global via ordre

sudo cupsctl --share-printers

7. Gestió de treballs d’impressió

7.1. Enviar un fitxer a imprimir

lpr -P nom_impressora fitxer.pdf

Opcions útils:

lpr -P nom_impressora -# 3 fitxer.pdf    # 3 còpies
lpr -P nom_impressora -o landscape fitxer.pdf  # Orientació horitzontal

7.2. Consultar la cua d’impressió

lpq                          # Cua de la impressora per defecte
lpq -P nom_impressora        # Cua d'una impressora específica
lpstat -p                    # Estat de totes les impressores
lpstat -o                    # Treballs actius de totes les cues

7.3. Cancel·lar treballs

lprm ID_TREBALL              # Cancel·lar un treball concret
lprm -P nom_impressora -     # Cancel·lar tots els treballs d'una impressora
cancel -a nom_impressora     # Alternativa amb l'ordre cancel

7.4. Habilitar/deshabilitar una impressora

sudo cupsenable nom_impressora    # Habilitar
sudo cupsdisable nom_impressora   # Deshabilitar

sudo cupsaccept nom_impressora    # Acceptar treballs a la cua
sudo cupsreject nom_impressora    # Rebutjar nous treballs

8. Impressora virtual PDF

CUPS permet crear una impressora virtual que genera fitxers PDF. Resulta molt útil per a proves i entorns de desenvolupament.

8.1. Instal·lar el paquet necessari

sudo apt install -y cups-pdf

Això crea automàticament una impressora anomenada PDF a CUPS. Els documents impresos es desen a /var/spool/cups-pdf/USUARI/.

8.2. Verificar la impressora PDF

lpstat -p PDF

8.3. Prova d’impressió a PDF

echo "Prova d'impressió CUPS" | lpr -P PDF
ls ~/PDF/    # El fitxer generat es desa aquí per defecte
💡
Nota

La carpeta de destinació per a l’usuari root és /var/spool/cups-pdf/root/ i per a altres usuaris és ~/PDF/ (es crea automàticament).

9. Registres i resolució de problemes

9.1. Fitxers de registre

Fitxer Contingut
/var/log/cups/access_log Accessos HTTP a la interfície web
/var/log/cups/error_log Errors i avisos del servidor
/var/log/cups/page_log Registre de pàgines impreses

9.2. Consultar els registres en temps real

sudo tail -f /var/log/cups/error_log

9.3. Augmentar el nivell de detall dels registres

Editar /etc/cups/cupsd.conf:

LogLevel debug2

Reiniciar el servei i consultar el registre per obtenir informació detallada.

9.4. Problemes habituals i solucions

La interfície web no és accessible des de la xarxa:

L’usuari no pot administrar CUPS:

La impressora no apareix a la xarxa:

Treballs a la cua que no s’imprimeixen:

lpstat -p nom_impressora    # Verificar estat
sudo cupsenable nom_impressora
sudo cupsaccept nom_impressora

10. Resum d’ordres essencials

Acció Ordre
Instal·lar CUPS sudo apt install cups
Estat del servei sudo systemctl status cups
Llistar impressores lpstat -p
Afegir impressora sudo lpadmin -p nom -v uri -m model -E
Imprimir fitxer lpr -P nom_impressora fitxer
Veure cua lpq -P nom_impressora
Cancel·lar treball lprm ID
Habilitar impressora sudo cupsenable nom_impressora
Compartir impressora sudo lpadmin -p nom -o printer-is-shared=true
Veure errors sudo tail -f /var/log/cups/error_log

Recursos addicionals

Versions d’aquest document

Domini Públic (CC0)