# 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](https://proferamon.com/tic/imatges/cups/cups01.png)

En aquest document aprendrem a:

- Instal·lar i arrancar el servei CUPS
- Configurar l'accés a la interfície web d'administració
- Afegir impressores locals i en xarxa
- Compartir impressores a la xarxa local
- Gestionar cues i treballs d'impressió


# Prerequisits

- Ubuntu Server 24.04 LTS instal·lat i actualitzat
- Accés amb privilegis `sudo`
- Connexió a la xarxa local
- (Opcional) Una impressora física o virtual per fer proves


# 1. Instal·lació de CUPS

## 1.1. Actualitzar el sistema

```bash
sudo apt update && sudo apt upgrade -y
```

## 1.2. Instal·lar CUPS i utilitats addicionals

```bash
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ó

```bash
cups --version
```

Sortida esperada:

```ini
CUPS v2.4.x
```


# 2. Gestió del servei CUPS

## 2.1. Habilitar i arrancar el servei

```bash
sudo systemctl enable cups
sudo systemctl start cups
```

## 2.2. Verificar l'estat del servei

```bash
sudo systemctl status cups
```

Sortida esperada (fragment):

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

## 2.3. Ordres de gestió del servei

```bash
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:

```bash
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):**

```apache
# Línia original:
Listen localhost:631

# Substituir per:
Port 631
```

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

```apache
<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>
```

> [!NOTE]
> `@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):**

```apache
WebInterface Yes
```

## 3.3. Reiniciar CUPS per aplicar els canvis

```bash
sudo systemctl restart cups
```

## 3.4. Obrir el port al tallafoc (UFW)

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

Verificar:

```bash
sudo ufw status
```

## 3.5. Accedir a la interfície web

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

```ini
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`.

```bash
sudo usermod -aG lpadmin NOM_USUARI
```

Verificar que l'usuari pertany al grup:

```bash
groups NOM_USUARI
```

> [!WARNING]
> 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ó:
   ```bash
   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:**

```bash
lpstat -p -d
```

**Afegir una impressora en xarxa (protocol IPP):**

```bash
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:**

```bash
sudo lpadmin -d nom_impressora
```

**Afegir una impressora USB local:**

```bash
# 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:

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

I afegir al final:

```apache
<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:**

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

## 6.3. Habilitar la compartició global via ordre

```bash
sudo cupsctl --share-printers
```


# 7. Gestió de treballs d'impressió

## 7.1. Enviar un fitxer a imprimir

```bash
lpr -P nom_impressora fitxer.pdf
```

Opcions útils:

```bash
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ó

```bash
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

```bash
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

```bash
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

```bash
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

```bash
lpstat -p PDF
```

## 8.3. Prova d'impressió a PDF

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

> [!NOTE]
> 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

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

## 9.3. Augmentar el nivell de detall dels registres

Editar `/etc/cups/cupsd.conf`:

```apache
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:**

- Verificar que `Port 631` substitueix `Listen localhost:631`
- Comprovar que el tallafoc permet el port 631
- Revisar les directives `<Location>` al fitxer de configuració

**L'usuari no pot administrar CUPS:**

- Verificar que l'usuari pertany al grup `lpadmin`
- Tancar sessió i tornar a entrar

**La impressora no apareix a la xarxa:**

- Verificar que `Browsing On` està activat a `cupsd.conf`
- Comprovar que la impressora té activada l'opció de compartir

**Treballs a la cua que no s'imprimeixen:**

```bash
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

- Documentació oficial CUPS: <https://www.cups.org/documentation.html>
- Manual de `cupsd.conf`: `man cupsd.conf`
- Manual de `lpadmin`: `man lpadmin`
- Interfície web d'administració: `http://localhost:631`

#### Versions d'aquest document

+ HTML - [cups.html](https://proferamon.com/tic/cups.html)
+ PDF - [cups.pdf](https://proferamon.com/tic/docs/cups.pdf)
+ ODT - [cups.odt](https://proferamon.com/tic/odt/cups.odt)
+ MD - [cups.md](https://proferamon.com/tic/md/cups.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)
