Zum Inhalt springen

Drucken unter Linux

Das Drucksystem unter Linux basiert auf CUPS (Common Unix Printing System), entwickelt von Apple und heute der Standard auf allen gängigen Distributionen. CUPS abstrahiert Drucker als Warteschlangen (Queues), spricht das IPP-Protokoll (Internet Printing Protocol) und unterstützt Netzwerkdrucker, USB-Drucker und virtuelle Drucker (z. B. PDF).

Anwendung
│ lp / lpr / Druckdialog
CUPS (cupsd)
│ filtert Job → richtiges Format für Drucker
Drucker-Backend (USB, IPP, Socket, ...)
Drucker

CUPS ist auf Desktop-Systemen meist vorinstalliert. Auf Servern:

Terminal-Fenster
# Debian/Ubuntu
sudo apt install cups cups-client
# RHEL/Fedora
sudo dnf install cups cups-client
# openSUSE
sudo zypper install cups
Terminal-Fenster
sudo systemctl enable --now cups
systemctl status cups

CUPS bringt ein Web-Interface mit, das auf Port 631 lauscht:

http://localhost:631

Über das Web-Interface lassen sich Drucker hinzufügen, konfigurieren und Druckjobs verwalten. Für administrative Aufgaben wird nach dem root-Passwort (oder einem Benutzer in der Gruppe lpadmin) gefragt.

CUPS erkennt viele USB- und Netzwerkdrucker automatisch. Im Web-Interface unter Administration → Drucker hinzufügen oder:

Terminal-Fenster
# Verfügbare Drucker suchen
lpinfo -v
# zeigt alle erkannten Geräte und Backends:
# network ipp://drucker.local/ipp/print
# direct usb://Canon/MF230%20Series
Terminal-Fenster
# Netzwerkdrucker (IPP)
sudo lpadmin \
-p "BueroDrucker" \
-E \
-v "ipp://192.168.1.100/ipp/print" \
-m everywhere
# -p: Name der Queue
# -E: Queue aktivieren und freigeben
# -v: Geräte-URI
# -m everywhere: IPP Everywhere / Driverless (für moderne IPP-Drucker)
# USB-Drucker
sudo lpadmin -p "MeinDrucker" -E -v "usb://Canon/MF230" -m everywhere
Terminal-Fenster
sudo lpadmin -d BueroDrucker # systemweit
lpoptions -d BueroDrucker # für den aktuellen Benutzer

Moderne Drucker unterstützen IPP Everywhere (driverless printing) — kein separater Treiber nötig, -m everywhere reicht.

Für ältere Drucker:

Terminal-Fenster
# Verfügbare Treiber suchen
lpinfo -m | grep -i canon
lpinfo -m | grep -i "laserjet"
# Drucker mit PPD-Treiber einrichten
sudo lpadmin -p "AltDrucker" -E \
-v "socket://192.168.1.101:9100" \
-m "drv:///sample.drv/generpcl.ppd"

Für Drucker ohne freien Treiber gibt es oft Hersteller-PPDs oder das Paket printer-driver-*:

Terminal-Fenster
apt search printer-driver # Debian/Ubuntu
dnf search cups-filters # RHEL/Fedora
Terminal-Fenster
lpstat -p # alle Drucker und Status
lpstat -d # Standard-Drucker
lpstat -s # Kurzübersicht
sudo cupsenable BueroDrucker # Drucker aktivieren
sudo cupsdisable BueroDrucker # Drucker deaktivieren
sudo cupsaccept BueroDrucker # Jobs annehmen
sudo cupsreject BueroDrucker # Jobs ablehnen
sudo lpadmin -x BueroDrucker # Drucker löschen
Terminal-Fenster
/etc/cups/cupsd.conf # CUPS-Daemon-Konfiguration
/etc/cups/printers.conf # installierte Drucker
/etc/cups/ppd/ # PPD-Dateien der Drucker
/var/log/cups/ # Access- und Error-Log

Der einfachste Weg ist cupsctl:

Terminal-Fenster
# Remote-Zugriff, Remote-Administration und Drucker-Freigabe aktivieren
sudo cupsctl --remote-admin --remote-any --share-printers
sudo systemctl restart cups

Alternativ manuell in /etc/cups/cupsd.conf. Wichtig: Es gibt drei separate Location-Blöcke, die alle angepasst werden müssen — nur / freizuschalten reicht nicht für die Admin-Seiten:

/etc/cups/cupsd.conf
Listen *:631
# Web-Interface allgemein
<Location />
Order allow,deny
Allow @LOCAL
</Location>
# Admin-Seiten — ohne diesen Block bleibt der Zugriff verweigert
<Location /admin>
Order allow,deny
Allow @LOCAL
</Location>
# Admin-Konfiguration
<Location /admin/conf>
AuthType Default
Require valid-user
Order allow,deny
Allow @LOCAL
</Location>
Terminal-Fenster
sudo systemctl restart cups

@LOCAL matcht Verbindungen vom gleichen Subnetz wie eine der eigenen Netzwerkschnittstellen. Bei VM-Zugriff vom Host hängt das vom Netzwerk-Modus ab:

VM-Netzwerk-ModusHost-IP aus VM-Sicht@LOCAL?
NAT10.0.2.2 (NAT-Gateway)✓ (gleicher /24)
Host-only192.168.x.1✓ (gleicher Subnet)
Bridgeechte LAN-IP✓ wenn gleicher Subnet

Bei Problemen: Allow all temporär zum Testen setzen, dann wieder einschränken.