# RA5. Administració de servidors d'impressió

**Cicle:** Administració de sistemes informàtics en xarxa (ASIX)

**Mòdul:** 0374. Administració de sistemes operatius

# 1. Introducció

Un **servidor d'impressió** és l'element que centralitza la gestió de les impressores d'una organització: rep els treballs des dels clients, els posa en cua, els envia als dispositius físics i informa de l'estat de cada treball. En un entorn corporatiu heterogeni —com el que trobareu en qualsevol empresa real— és habitual conviure amb clients Windows, Linux i macOS que han de compartir el mateix parc d'impressores, sovint gestionat des d'un servidor Linux (CUPS) o des d'un servidor Windows (rol *Print and Document Services*).

En aquest document farem servir el domini `THOS.LOCAL` com a referència d'entorn: un controlador de domini (`SRV-DC01`), un servidor de fitxers/impressió Windows (`SRV-FS01`) i un servidor CUPS sobre Linux integrat al mateix domini. L'objectiu és que pugueu reproduir tot el procés al vostre laboratori, sigui quina sigui la combinació de sistemes operatius que feu servir.

# 2. Funcionalitat dels sistemes i servidors d'impressió

Un sistema d'impressió local (el que trobem a qualsevol PC d'usuari) s'encarrega de:

- Rebre el treball d'impressió generat per una aplicació.
- Convertir-lo a un format que la impressora entengui (PostScript, PCL, ràster...) mitjançant un **controlador (driver)**.
- Posar-lo en una **cua** i enviar-lo al dispositiu.

Un **servidor d'impressió** afegeix una capa addicional: centralitza aquesta funció perquè múltiples clients no hagin d'instal·lar el driver físic ni conèixer la impressora directament. Els avantatges principals són:

| Avantatge | Descripció |
|---|--------|
| Centralització | Un únic punt de gestió, monitoratge i manteniment de cues |
| Compatibilitat | El servidor pot oferir el driver adequat a cada client (Windows, Linux, Mac) |
| Control d'accés | Es poden restringir usuaris o grups que poden imprimir a cada dispositiu |
| Compartició | Impressores físiques connectades per USB es fan accessibles per xarxa |
| Auditoria | Registre de qui imprimeix, quant i quan (útil per a comptabilitat de costos) |

En Linux, aquesta funció la fa **CUPS** (*Common Unix Printing System*); en Windows, el **Servidor d'impressió** (rol *Print Server*, amb l'*Spooler* com a servei principal).

# 3. Ports i protocols d'impressió

Per integrar impressores en una xarxa cal conèixer quins protocols intervenen i quins ports cal obrir als tallafocs.

| Protocol | Port | Transport | Ús |
|----|---|---|-------|
| **IPP** (Internet Printing Protocol) | 631 | TCP | Protocol estàndard actual, usat per CUPS (també com a interfície web) i per Windows des de la versió 7 |
| **IPPS** (IPP sobre TLS) | 631 | TCP | Igual que IPP però xifrat |
| **LPD/LPR** (Line Printer Daemon) | 515 | TCP | Protocol clàssic Unix, encara suportat per compatibilitat |
| **SMB/CIFS** | 445 (i 139 amb NetBIOS) | TCP | Compartició d'impressores Windows i Samba |
| **RAW / JetDirect (AppSocket)** | 9100 | TCP | Enviament directe de dades a la impressora sense cap protocol d'impressió (típic en impressores de xarxa HP/JetDirect) |
| **mDNS/DNS-SD (Bonjour)** | 5353 | UDP | Descobriment automàtic d'impressores IPP a la xarxa local (AirPrint) |
| **SNMP** | 161/162 | UDP | Consulta de l'estat de la impressora (nivell de tòner, papers encallats, etc.) |

> [!NOTE]
> **A la pràctica:** avui dia la majoria d'impressores de xarxa i servidors moderns fan servir **IPP (631)** com a protocol principal. LPD i RAW es mantenen per compatibilitat amb maquinari antic.

Per comprovar quins ports escolta un servidor CUPS:

```bash
sudo ss -tulnp | grep -E '631|515|9100'
```

# 4. Sistemes d'impressió

## 4.1. [CUPS](https://proferamon.com/tic/cups.html) (Linux/Unix/macOS)

**CUPS** és el sistema d'impressió estàndard a totes les distribucions Linux modernes i a macOS. Funciona com un dimoni (`cupsd`) que:

- Gestiona les cues d'impressió (una cua per impressora o classe).
- Ofereix una **interfície web d'administració** al port 631.
- Suporta drivers propis, PPD (*PostScript Printer Description*) i el model modern **driverless printing** (IPP Everywhere), on la impressora s'autodescriu i no cal instal·lar cap driver.
- S'integra amb Samba per compartir impressores amb clients Windows.

Paquets principals a Debian/Ubuntu:

```bash
sudo apt update
sudo apt install cups cups-client cups-bsd printer-driver-all
```

## 4.2. Print Spooler / Print and Document Services (Windows)

A Windows, el servei **Print Spooler** (`spoolsv.exe`) gestiona les cues locals. Quan un servidor Windows ha de fer de servidor d'impressió centralitzat, cal afegir-hi el **rol de servidor** *Print and Document Services*:

```powershell
Install-WindowsFeature -Name Print-Server -IncludeManagementTools
```

Aquest rol inclou:

- **Print Management console** (`printmanagement.msc`): consola gràfica centralitzada.
- Suport per a **desplegament de drivers via GPO** als clients del domini.
- Compartició nativa via SMB i, opcionalment, via IPP (rol *Internet Printing*).

# 5. Eines de gestió integrades al sistema operatiu

| Tasca | Linux (CUPS) | Windows |
|---|---|---|
| Interfície gràfica local | `system-config-printer` / GNOME Settings → Impressores | *Configuració → Dispositius → Impressores i escàners* |
| Consola d'administració | Interfície web CUPS (`https://servidor:631`) | *Print Management* (`printmanagement.msc`) |
| Gestió per línia d'ordres | `lpadmin`, `lpoptions`, `lpstat` | `Add-Printer`, `Get-Printer` (PowerShell) |
| Gestió de cues | `lpq`, `lprm`, `cancel` | `Get-PrintJob`, `Remove-PrintJob` |

La consola **Print Management** de Windows permet, a més, filtrar impressores per criteris (drivers instal·lats, estat, ubicació) i desplegar-les automàticament als usuaris o equips mitjançant **directives de grup (GPO)**, molt útil en un domini com `THOS.LOCAL` amb diversos edificis o aules.

# 6. Instal·lació i configuració d'un servidor d'impressió en entorn web ([CUPS](https://proferamon.com/tic/cups.html))

## 6.1. Instal·lació

```bash
sudo apt install cups
sudo systemctl enable --now cups
```

## 6.2. Habilitar l'accés remot a la interfície web

Per defecte, CUPS només escolta a `localhost`. Cal editar `/etc/cups/cupsd.conf`:

```apache
# Escoltar a totes les interfícies, no només localhost
Port 631
Listen /run/cups/cups.sock

# Permetre l'accés des de la xarxa local
<Location />
  Order allow,deny
  Allow from 192.168.1.0/24
</Location>

<Location /admin>
  Order allow,deny
  Allow from 192.168.1.0/24
</Location>

# Permetre compartir impressores
Browsing On
BrowseLocalProtocols dnssd
```

Activeu l'administració remota amb l'eina inclosa (equivalent a marcar la casella des de la interfície web):

```bash
sudo cupsctl --remote-admin --remote-any --share-printers
sudo systemctl restart cups
```

## 6.3. Accedir a la interfície web

Obriu `https://IP-DEL-SERVIDOR:631` des d'un navegador. Des d'aquí podreu:

- Afegir impressores noves (*Administració → Afegir impressora*).
- Gestionar cues i treballs (*Impressores* / *Treballs*).
- Consultar registres (*Administració → Veure el registre d'errors*).

> [!NOTE]
> Per fer canvis d'administració (afegir/eliminar impressores) us demanarà l'usuari i contrasenya d'un compte del grup `lpadmin`:
> ```bash
> sudo usermod -aG lpadmin ramon
> ```

# 7. Impressores lògiques: creació i classificació

Una **impressora lògica** és l'objecte que el sistema d'impressió gestiona; no cal que es correspongui 1:1 amb un dispositiu físic. Es poden classificar segons:

| Tipus | Descripció | Exemple |
|---|----|---|
| **Local** | Connectada directament al servidor (USB, paral·lel) | `HP-LaserJet-USB` |
| **Remota IPP/LPD** | Impressora de xarxa accessible per IP | `hp-planta1` a `ipp://192.168.1.50/ipp/print` |
| **Compartida SMB** | Cua que apunta a una impressora compartida per un altre servidor (Windows o Samba) | `//SRV-FS01/HP-Direccio` |
| **Raw** | No aplica cap filtre; envia les dades tal qual (útil amb PostScript natiu) | Cua `raw` cap a JetDirect port 9100 |
| **Amb driver (PPD)** | Aplica un filtre/driver específic per convertir el treball al llenguatge de la impressora | PPD de Gutenprint o del fabricant |

## 7.1. Crear una impressora local o de xarxa amb `lpadmin`

```bash
# Impressora de xarxa via IPP amb driver
sudo lpadmin -p HP-Planta1 \
  -E \
  -v ipp://192.168.1.50/ipp/print \
  -m everywhere

# Impressora remota via JetDirect (raw, port 9100)
sudo lpadmin -p Epson-Raw \
  -E \
  -v socket://192.168.1.60:9100 \
  -m raw
```

Paràmetres clau:

- `-p NOM` — nom de la cua.
- `-E` — habilita la cua i accepta treballs.
- `-v URI` — adreça del dispositiu (`ipp://`, `socket://`, `lpd://`, `usb://`, `smb://`).
- `-m` — model/driver (`everywhere` per a driverless IPP, o el nom d'un PPD).

## 7.2. Classificar-la com a impressora per defecte

```bash
sudo lpadmin -d HP-Planta1
```

A Windows, l'equivalent és:

```powershell
Add-Printer -Name "HP-Planta1" -DriverName "HP Universal Printing PCL 6" -PortName "IP_192.168.1.50"
Set-Printer -Name "HP-Planta1" -Comment "Impressora planta 1"
```

# 8. Grups d'impressió (classes)

Un **grup d'impressió** (a CUPS s'anomena **classe**) agrupa diverses impressores físiques sota una única cua lògica: el primer treball va a la primera impressora lliure, la qual cosa proporciona **balanceig de càrrega i tolerància a fallades**.

## 8.1. Crear una classe amb CUPS

```bash
sudo lpadmin -p HP-Planta1 -c Aules
sudo lpadmin -p HP-Planta2 -c Aules
```

Això crea (o amplia) la classe `Aules`, formada per les impressores `HP-Planta1` i `HP-Planta2`. Els usuaris només han de conèixer el nom `Aules`; CUPS distribueix els treballs entre les impressores membres.

Consultar les classes existents:

```bash
lpstat -c
```

Eliminar una impressora d'una classe:

```bash
sudo lpadmin -p HP-Planta2 -r Aules
```

## 8.2. Equivalent a Windows: agrupació de ports (printer pooling)

Windows no té "classes" com a tal, però ofereix **Printer Pooling**: una única impressora lògica que envia els treballs a diversos ports (diverses impressores físiques idèntiques).

```powershell
Add-PrinterPort -Name "Port1" -PrinterHostAddress 192.168.1.50
Add-PrinterPort -Name "Port2" -PrinterHostAddress 192.168.1.51
Set-Printer -Name "HP-Pool" -PortName "Port1,Port2"
```

> [!NOTE]
> **Diferència important:** el *printer pooling* de Windows exigeix que totes les impressores del grup siguin del mateix model (mateix driver), mentre que una classe CUPS pot combinar models diferents.

# 9. Gestió d'impressores i cues mitjançant ordres

## 9.1. Ordres CUPS (línia d'ordres)

| Ordre | Funció |
|---|---|
| `lpstat -p` | Estat de totes les impressores |
| `lpstat -o` | Treballs pendents a totes les cues |
| `lpq -P NOM` | Consultar la cua d'una impressora concreta |
| `lp -d NOM fitxer.pdf` | Enviar un treball a una cua |
| `lprm -P NOM ID` | Eliminar un treball de la cua |
| `cancel NOM-ID` | Cancel·lar un treball (alternativa a `lprm`) |
| `cupsenable NOM` / `cupsdisable NOM` | Habilitar/deshabilitar una cua |
| `cupsaccept NOM` / `cupsreject NOM` | Permetre/rebutjar que la cua accepti nous treballs |
| `lpoptions -p NOM -l` | Llistar les opcions disponibles d'una impressora (mida de paper, duplex...) |
| `lpadmin -x NOM` | Eliminar una cua |

Exemple de flux complet:

```bash
# Enviar un treball
lp -d HP-Planta1 informe.pdf

# Veure l'estat de la cua
lpstat -o HP-Planta1

# Cancel·lar el treball número 42
cancel HP-Planta1-42

# Aturar temporalment la impressora per manteniment
sudo cupsdisable HP-Planta1
sudo cupsreject HP-Planta1

# Reactivar-la
sudo cupsenable HP-Planta1
sudo cupsaccept HP-Planta1
```

## 9.2. Ordres PowerShell (Windows)

| Ordre | Funció |
|---|---|
| `Get-Printer` | Llistar impressores instal·lades |
| `Get-PrintJob -PrinterName NOM` | Consultar treballs d'una cua |
| `Remove-PrintJob -PrinterName NOM -ID N` | Eliminar un treball |
| `Restart-Service Spooler` | Reiniciar el servei d'impressió (neteja cues encallades) |
| `Set-Printer -Name NOM -Shared $true -ShareName NOM` | Compartir una impressora |
| `Remove-Printer -Name NOM` | Eliminar una impressora |

```powershell
Get-Printer | Select Name, PrinterStatus
Get-PrintJob -PrinterName "HP-Planta1"
Remove-PrintJob -PrinterName "HP-Planta1" -ID 12
Restart-Service Spooler -Force
```

# 10. Compartició d'impressores entre sistemes operatius diferents

Aquest és el punt crític en qualsevol xarxa real: fer que impressores gestionades des de Linux siguin visibles des de clients Windows i viceversa, dins del mateix domini `THOS.LOCAL`.

## 10.1. Compartir una impressora CUPS cap a clients Windows (via Samba)

1. Assegureu-vos que Samba està instal·lat i unit (o almenys integrat) al domini `THOS.LOCAL`.
2. Afegiu a `/etc/samba/smb.conf`:

	```ini
	[printers]
	   comment = Totes les impressores
	   path = /var/spool/samba
	   browseable = no
	   guest ok = no
	   writable = no
	   printable = yes
	   printer admin = @lpadmin
	
	[print$]
	   comment = Drivers d'impressora
	   path = /var/lib/samba/printers
	   browseable = yes
	   read only = yes
	   guest ok = no
	```

3. Creeu el directori d'estat i reinicieu els serveis:

	```bash
	sudo mkdir -p /var/spool/samba
	sudo chmod 1777 /var/spool/samba
	sudo systemctl restart smbd nmbd cups
	```

4. Des d'un client Windows del domini, la impressora apareixerà a `\\SRV-CUPS\HP-Planta1` i es podrà afegir amb:

	```powershell
	Add-Printer -ConnectionName "\\SRV-CUPS\HP-Planta1"
	```

## 10.2. Compartir una impressora de Windows cap a clients Linux

Al servidor Windows (`SRV-FS01`), comparteix la impressora amb el rol *Print Server* (o des de *Propietats de la impressora → Compartició*). Des del client Linux, la cua es crea apuntant a l'URI SMB:

```bash
sudo lpadmin -p Windows-Direccio \
  -E \
  -v "smb://usuari:contrasenya@SRV-FS01/HP-Direccio" \
  -m everywhere
```

Si el domini requereix autenticació Kerberos (habitual en un AD com `THOS.LOCAL` amb SMB signing forçat), cal tenir el paquet `smbclient` i, si escau, un tiquet vàlid (`kinit usuari@THOS.LOCAL`) abans de crear la cua.

## 10.3. Descobriment automàtic entre sistemes

Per facilitar que qualsevol client (Linux, Windows 10/11, macOS, mòbils) trobi automàticament les impressores sense configuració manual:

- A CUPS, activeu **mDNS/DNS-SD** (paquet `avahi-daemon`), que permet que les impressores apareguin automàticament a macOS i a molts clients Linux.
- A Windows Server, activeu el rol **Internet Printing** si voleu que els clients puguin descobrir i connectar impressores via navegador (`http://SRV-FS01/printers`).

# 11. Documentació del servidor d'impressió

Documentar la configuració és un requisit professional: facilita el manteniment, la incorporació de nou personal tècnic i la resolució d'incidències. Com a mínim, la documentació hauria d'incloure:

1. **Inventari d'impressores**: nom lògic, marca/model, adreça IP/MAC, ubicació física, protocol utilitzat (IPP, RAW, SMB).
2. **Estructura de cues i classes**: quines cues existeixen, quines impressores formen cada classe i el criteri de balanceig.
3. **Permisos d'accés**: quins usuaris/grups poden imprimir o administrar cada cua.
4. **Configuració de compartició**: paràmetres de `smb.conf` o del rol *Print Server*, drivers desplegats per GPO.
5. **Procediments de manteniment**: com afegir una impressora nova, com actualitzar un driver, com purgar una cua encallada.
6. **Historial de canvis**: data, autor i motiu de cada modificació rellevant.

## 11.1. Plantilla mínima de fitxa d'impressora

```markdown
## Impressora: HP-Planta1
- Model: HP LaserJet Pro M404dn
- IP: 192.168.1.50
- MAC: AA:BB:CC:DD:EE:FF
- Ubicació: Aula 204, planta 1
- Protocol: IPP (driverless / Everywhere)
- Servidor: SRV-CUPS (thos.local)
- Cua CUPS: HP-Planta1 (membre de la classe "Aules")
- Compartida via Samba a: \\SRV-CUPS\HP-Planta1
- Grup amb permís d'impressió: G-Alumnes-Aula204
- Grup amb permís d'administració: lpadmin
- Data alta: 2026-09-01
- Responsable: Ramon López
```

Podeu generar aquesta documentació automàticament a partir de la configuració real amb:

```bash
lpstat -p -d                 # estat i impressora per defecte
lpstat -c                    # classes
lpoptions -p HP-Planta1 -l   # opcions del PPD
```

#### Versions d'aquest document

> + [HTML](https://proferamon.com/tic/0374RA5.html)
> + [PDF](https://proferamon.com/tic/pdf/0374RA5.pdf)
> + [ODT](https://proferamon.com/tic/odt/0374RA5.odt)
> + [MD](https://proferamon.com/tic/md/0374RA5.md)

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


