Raspberry Pi als Printserver für HP-Drucker und Windows-Rechner

26.10.2023

Der Mini-Computer Raspberry Pi lässt sich als Printserver betreiben. Er macht USB-Drucker zu Netzwerkdruckern, auf welche die Windows- oder Linux-Rechner im eigenen LAN direkt zugreifen können. Das ist sehr praktisch und der Aufwand ist auch für Anfänger leicht beherrschbar, wenn man die hier vorgestellten Fallstricke kennt.

Die nachfolgende Anleitung müsste für die allermeisten Drucker mit USB-Schnittstelle von Hewlett Packard (HP) funktionieren. Zum Einsatz kam bei mir eine Raspberry Pi 3 B+ und verschiedene Rechner mit Windows 10, Windows 7 und eine ältere Lubuntu-Linux-Version. Mit dem völlig veralteten Windows XP hat es bei mir nicht geklappt. Ich versuche es so zu erklären, dass auch für Anfänger die Stolpersteine erkannt werden.

Der kleine HP LaserJet P1006 erfüllt seit 2009 immer noch seinen Zweck und passt in das Bücherregal. Jetzt macht ihn ein Printserver netztwerkfähig.
Welch eine Freude! Dieses betagte Notebook mit Windows 7 ( https://elektronikbasteln.pl7.de/lg-lm70-express ) Baujahr 2006 erreicht über WLAN problemlos den Printserver und führt die Druckaufträge klaglos aus (Anmerkung: Aus Sicherheitsgründen kommt wegen des veralteten Windows 7 dieses Notebook nur noch für interne Zwecke gelegentlich zum Einsatz).

Vorüberlegungen: Früher war bei uns ein Drucker über USB an meinem Windows-Rechner angeschlossen. Dieser Drucker erhielt eine Freigabe, damit er allen Rechnern derselben Arbeitsgruppe zu  Verfügung steht. Nachteilig ist, dass mein Rechner für den Druck immer im Betrieb sein musste. Das klappte dennoch zufriedenstellend, bis eines Tages ein Sicherheitspatch von Windows diese Art des Druckens über das Netzwerk unmöglich machte. Zwar konnte man schließlich durch Tricksereien das Drucken wieder ermöglichen, wobei man Gefahr lief eine Sicherheitslücke zu schaffen.

Ein Ausweg wäre es zum Beispiel den USB-Drucker an eine FritzBox anzuschließen. In manchen Fällen klappt das sehr gut, weshalb es ein Versuch wert sein sollte. Allerdings hätte ich dafür ein über 5 Meter langes USB-Kabel zwischen der FritzBox und dem Drucker verlegen müssen, was aus technischen Gründen nicht möglich ist.

Unser Drucker ist ein 14 Jahre alter Schwarz-Weiß-Laserdrucker von HP mit der Bezeichnung HP Laser Jet P1006. Wir benutzen in nicht intensiv und er ist deshalb immer noch im guten Zustand.  Vor allen Dingen ist er klein. Als Alternative kämen gebrauchte Netzwerkdrucker für den harten Büroalltag, die zu günstigen Preisen zum Beispiel in der Bucht erhältlich sind, in Frage. Allerdings waren sie mir zu groß und ich hatte dafür nicht genügend Platz im Regal.

Irgendwo in einer verstaubten Ecke arbeitet in einem Raspberry Pi 3B der Printserver vor sich hin. Man kann ihn sogar über eine Steckerleiste ein- und ausschalten. Später soll der Raspi noch weitere Funktionen übernehmen. Selbstverständlich können die meisten Raspberry auch WLAN und dann entfällt sogar das WLAN. Ein Netzwerkkabel ist jedoch zuverlässiger. Nachtrag: Dem aufmerksamen Leser wird sicherlich aufgefallen sein, dass das USB-Kabel des Druckers vergessen wurde anzuschließen.

Der Raspberry Pi und sein Linux:  Der “Raspi” ist ein kleiner Linux-Rechner. Ausprobiert habe ich den Netzwerkdrucker auf einem Raspberry Pi 3 B+, der für diese Zwecke sicherlich völlig überdimensioniert ist. Er könnte noch viele andere Aufgaben gleichzeitig übernehmen.

Auf meinem Raspberry Pi befindet sich das Linux-Betriebssystem Raspian, das speziell für den Raspberry Pi entwickelt wurde. Der Raspberry Pi sollte eine statische IP besitzen. Wie man diese einrichtet und das Betriebssystem Raspbian auf dem Raspberry installiert, ist auf https://elektronikbasteln.pl7.de/installation-von-raspbian-raspberry-pi-os-auf-einem-raspberry-pi beschrieben.

Raspberry Pi 3 B im Gehäuse.
Installation des Betriebssystems Raspbian (Raspberry Pi OS) auf einem Raspberry Pi – 23.12.2021: Im Grunde ist die Installation des Linux-Betriebssystems Raspbian (Raspberry Pi OS) auf einem Raspberry Pi denkbar einfach, wenn alles gut geht. Doch manchmal liegt die Tücke im Detail.

Kinderleicht ist es, wenn das neueste Raspbian einwandfrei funktioniert. Das war bei mir leider nicht mehr der Fall, weil im Root-Modus die Menüleiste fehlt. Mir blieb nichts anderes übrig ein altes Betriebssystem zu installieren und es mit einem Update und Upgrade zu versehen. – weiter

Die Druckertreiber von HP: Sie stehen auf der Homepage von HP unter https://support.hp.com/de-de/drivers/printers zur Verfügung. Aus Sicherheitsgründen holen wir die Windows-Drucker-Treiber nur von dort. Auf jedem Rechner, der auf den Printserver zugreift, muss der passende Druckertreiber für den Drucker installiert sein, auf den auch der Printserver zugreift.

Treiberinstallation auf Windows-Rechner: Für meinen HP LaserJet P1006 kann muss man sich ein großes Installationsprogramm für Windows herunterladen und ausführen. Es funktioniert für eine ganze Reihe von HP-Rechnern und ist für den dümmsten anzunehmenden Besitzer ausgelegt. Erst einmal musste ich den linken der beiden Drucker, als die P1000-Serie auswählen. Dann wurde das Auspacken des Druckers erklärt. Schließlich kam in roter Schrift eine Aufforderung den eigentlichen Treiber zu installieren. Erst nach einer halben Ewigkeit des geduldigen Wartens war mir klar, dass man für die Treiberinstallation auf den roten Schriftzug klicken muss. Dann kommt die Aufforderung den Drucker mit seinem USB-Kabel mit dem Rechner zu verbinden. Erst danach ist der Drucker einzuschalten. Die Reihenfolge ist wichtig und dadurch erkennt das Programm den Drucker und installiert den passenden Treiber. Das klappte reibungslos. Allerdings gab es keine andere Alternative als den Drucker tatsächlich per USB mit dem Rechner zu verbinden.

Treiberinstallation auf Linux-Rechner: Das ist ganz einfach. Auf der Kommandozeilenebene des Linux-Rechners  geben wir folgendes ein:

# Installation der Druckertreiber für Drucker von HP

sudo apt-get install hplib

# Die hplip-ppds 
# (Hewlett-Packard Linux Imaging and Printing - PostScript Printer Description Files)
# sind eine separate Sammlung von PostScript-Druckerbeschreibungsdateien (PPD),
# die spezifische Druckereinstellungen für HP-Druckermodelle bereitstellen.
# Die hplip-ppds sind speziell für HP-Drucker,
# die von HPs offiziellem hplip-Paket unterstützt werden.

sudo apt-get install hplip-ppds

# Die Installation der hplip-ppds war in meinen Fall nicht notwendig

Bei mir hat also die Ausführung eines einzigen Befehls in der Linux-Konsole gereicht.

 

INSTALLATION UND KONFIGURATION DES PRINTSERVERS AUF EINEM RASPBERRY

Die Programme CUPS und Samba: Grundsätzlich müssen für einen auf Linux basierten Printserver, der auch auf Windows-Rechnern zugreifen kann, zwei Programme installiert werden:

1. CUPS: Das ist ein Druckervewaltungsprogramm mit optionaler  grafischer Oberfläche.

2. Samba: Das es dem Linux-Betriebssystem ermöglicht auf das Windows-Netzwerk zuzugreifen. Wer nicht auf Windows-Rechner zugreifen möchte, kann auf die Installation und Konfiguration von Samba verzichten.

Die drei Schritte für die Installation des Printservers lauten der Reihe nach:
1. CUPS installieren
2. Den passenden Druckertreiber installieren.
3. Samba installieren und eventuell konfigurieren

Für diese Prozedur  habe ich mich an die Empfehlungen von https://www.initpals.com/raspberry-pi/setting-up-a-print-server-with-raspberry-pi-and-an-old-hp-mfp-printer-in-a-home-network/ orientiert. Die Raspberry hat in meinem Beispiel die feste statische lokale IP 192.168.1.112 bereits erhalten. Für die Installation ist der Raspberry mit dem Internet verbunden.

CUPS installieren:

# System updaten und upgraden (alle Zeilen, die mit # anfangen sind Kommentarzeilen und zu ignorieren)
sudo apt update
sudo apt upgrade

# CUPS installieren
sudo apt install cups

# Den User pi zur Gruppe lpadmin hinzufügen:
sudo usermod -a -G lpadmin pi

# Bei meiner Installation hatte ich zuvor den User pi in asterisk unbenannt
# und deshalb musste ich logischerweise
# sudo usermod -a -G lpadmin pi
# eingeben

# Die Fernbedienbarkeit für CUPS ermöglichen
sudo cupsctl --remote-any

Eine Frage hatte ich bei der Konfiguration nicht verstanden und ChatGPT half mir auf die Sprünge. In dem Feld “Enter a location description for this printer” kann man eine Beschreibung oder den Standort für deinen HP P1006 Drucker eingeben. Dieser Text dient dazu, den Drucker leichter identifizieren zu können, besonders wenn du mehrere Drucker in deinem Netzwerk hast.

Man könnte dort beispielsweise den physischen Standort des Druckers oder den Raum angeben, in dem er sich befindet. Zum Beispiel:

      • “Wohnzimmer”
      • “Büro im Erdgeschoss”
      • “Küche”
      • “Schlafzimmer”

Da ich meinem  Raspberry vorher schon die feste statische IP 192.168.1.112 vergeben hatte, ist das Web-Interface von CUPS über http://192.168.1.112:631/ erreichbar. Der Link geht natürlich nur, wenn man ins seinem eigen LAN dem Printserver die gleiche IP vergeben hat.

Web-Oberfläche von CUPS. Hier können wir später Anpassungen vornehmen.

Druckertreiber von HP installieren: Da ein als Drucker einer von HP zum Einsatz kommt,  installieren wir das Treiberpaket von HP:

sudo apt-get install hplip
sudo apt-get install hplip-ppds
sudo hp-setup -i

# Folge nun den Anweisungen, um in meinem Fall den HP P1006
# auf dem Rasberry zu installieren. Danach ist er in
# den Druckereinstellungen des Rasperry aufgelistet.
#
# Stelle sich, dass dieser Drucker eingeschaltet (enabled) 
# und freigegeben (shared) ist.

Der Befehl sudo apt-get install hplip installiert das hplip-Paket (Hewlett-Packard Linux Imaging and Printing), das Treiber und Tools für HP-Drucker unter Linux bereitstellt.

Der Befehl sudo apt-get install hplip-ppds installiert eine Sammlung von speziellen Druckerbeschreibungsdateien (PPDs) für HP-Drucker, um erweiterte Druckereinstellungen und -funktionen unter Linux zu ermöglichen.

Der Befehl sudo hp-setup -i öffnet ein interaktives Konfigurationsprogramm, das es erlaubt, HP-Drucker unter Linux zu installieren und einzurichten. Benutzer können dabei den Drucker auswählen und verschiedene Einstellungen anpassen.

Samba installieren: Damit wäre für jene, die nur Linux-Rechner einsetzen, die Installation abgeschlossen. Die meisten Leser werden allerdings auch oder nur Windows-Rechner nutzen. Damit der Printserver auch auf Windows-Arbeitsgruppen im eigenen lokalen Netz erreichen kann muss Samba auf dem Printserver installiert werden.

# Kommentarzeilen sind mit # eingeleitet und werden natürlich nicht übernommen
# Installation von Samba
sudo apt-get install samba

Samba installiert sich dann. Nun müssen wir Samba noch konfigurieren. Die Konfigurationsdatei smb.conf befindet sich /etc/samba/smb.conf und bei mir im Raspbian Bullseye war sie schon vorkonfiguriert. Ich habe sie unverändert übernommen und es hat funktioniert. Erfolgreich testen konnte ich diverse Rechner mit Win 7 und Win 10. Bei Win XP war der Netzwerkrechner unauffindbar.

So sieht bei mir die smb.conf aus, wenn man die meisten Kommentarzeilen entfernt:

[global]
  workgroup = WORKGROUP
  log file = /var/log/samba/log.%m
  max log size = 1000
  logging = file
  panic action = /usr/share/samba/panic-action %d
  server role = standalone server
  obey pam restrictions = yes
  unix password sync = yes
  passwd program = /usr/bin/passwd %u
  passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
  pam password change = yes
  map to guest = bad user


############ Misc ############
   usershare allow guests = yes

#======================= Share Definitions =======================

[homes]
   comment = Home Directories
   browseable = no
   read only = yes
   create mask = 0700
   directory mask = 0700
   valid users = %S

[printers]
   comment = All Printers
   browseable = no
   path = /var/spool/samba
   printable = yes
   guest ok = no
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = no

Der Witz ist, dass diese smb.conf bei mir auch funktionert, obwohl meine Arbeitsgruppe “ARBEIT” und nicht  WORKGROUP” lautet. Nachträglich habe ich die zweite Zeile angepasst.

Erklärung:

  1. Globaler Abschnitt ([global]):
    • workgroup: Definiert die Arbeitsgruppe des Samba-Servers (hier: WORKGROUP).
    • log file: Der Pfad zur Log-Datei für Samba-Ereignisse.
    • max log size: Begrenzt die Größe der individuellen Log-Dateien.
    • logging: Bestimmt, dass Samba nur in Log-Dateien protokolliert.
    • panic action: Definiert, was bei einem Samba-Absturz zu tun ist.
    • server role: Der Servermodus, in dem Samba betrieben wird (hier: standalone server, als eigenständiger Server).
    • obey pam restrictions: Zwingt Samba, PAM-Beschränkungen zu befolgen.
    • unix password sync: Synchronisiert Unix-Passwörter mit SMB-Passwörtern.
    • passwd program und passwd chat: Konfiguriert den Befehl und die Zeichenfolge, um Passwörter zu ändern.
    • pam password change: Ermöglicht PAM, Passwortänderungen durchzuführen.
    • map to guest: Leitet nicht authentifizierte Anfragen an den Gastbenutzer weiter.
  2. Freigaben:
    • [homes]: Definiert die Home-Verzeichnisfreigabe mit spezifischen Berechtigungen und gültigen Benutzern.
    • [printers]: Freigabe für Drucker, der auf das Druckerspooler-Verzeichnis zeigt.
    • [print$]: Freigabe für Druckertreiber, die von Windows-Clients heruntergeladen werden können.
  3. Sonstiges:
    • usershare allow guests: Erlaubt Gästen, freigegebene Ordner zu erstellen.

Der letzte Abschnitt in der smb.conf-Datei enthält verschiedene Freigabe-Definitionen für den Samba-Server. Hier ist eine Erklärung für jede Freigabe:

  1. [homes]
    • comment: Eine Beschreibung für die Freigabe (in diesem Fall: Home-Verzeichnisse).
    • browseable: Legt fest, ob die Freigabe im Netzwerkbrowser sichtbar ist (hier: nein).
    • read only: Erlaubt nur Lesezugriff auf die Freigabe (hier: ja).
    • create mask: Legt die Berechtigungen für neu erstellte Dateien fest (hier: 0700, was bedeutet, dass nur der Besitzer die Dateien lesen und schreiben kann).
    • directory mask: Legt die Berechtigungen für neu erstellte Verzeichnisse fest (hier: 0700, was bedeutet, dass nur der Besitzer das Verzeichnis anzeigen und darin arbeiten kann).
    • valid users: Erlaubt den Zugriff nur für die angegebenen Benutzer (hier: %S, was den aktuellen Samba-Benutzernamen darstellt).
  2. [printers]
    • comment: Eine Beschreibung für die Freigabe (in diesem Fall: Alle Drucker).
    • browseable: Legt fest, ob die Freigabe im Netzwerkbrowser sichtbar ist (hier: nein).
    • path: Der Pfad zum Verzeichnis, in dem Druckaufträge gespeichert werden (hier: /var/spool/samba).
    • printable: Erlaubt das Drucken auf diese Freigabe (hier: ja).
    • guest ok: Verbietet Gästen den Zugriff (hier: nein).
    • read only: Erlaubt nur Lesezugriff auf die Freigabe (hier: ja).
    • create mask: Legt die Berechtigungen für neu erstellte Dateien fest (hier: 0700, was bedeutet, dass nur der Besitzer die Dateien lesen und schreiben kann).
  3. [print$]
    • comment: Eine Beschreibung für die Freigabe (in diesem Fall: Druckertreiber).
    • path: Der Pfad zum Verzeichnis, das die Druckertreiber enthält (hier: /var/lib/samba/printers).
    • browseable: Legt fest, ob die Freigabe im Netzwerkbrowser sichtbar ist (hier: ja).
    • read only: Erlaubt nur Lesezugriff auf die Freigabe (hier: ja).
    • guest ok: Verbietet Gästen den Zugriff (hier: nein).

Diese Freigaben ermöglichen den Zugriff auf die entsprechenden Ressourcen im Netzwerk, während gleichzeitig die Berechtigungen und der Zugriff streng kontrolliert werden. In diesem Fall sind die Home-Verzeichnisse für authentifizierte Benutzer zugänglich, während Druckaufträge und Druckertreiber nur für autorisierte Benutzer verfügbar sind.

Wie bereits beschrieben, muss in Windows für der Installation des Netzlaufwerks vorher der passende Druckertreiber auf dem Windows-Rechner installiert worden sein. Dann können wir unter “Drucker hinzufügen” oder so ähnlich je nach Version einen Netzlaufdrucker hinzufügen. Wenn er gefunden wurde, melden wir diesen an. Danach werden wir oft noch aufgefordert den passenden Treiber zu installieren, der vorhanden sein muss, wenn wir vorher den Treiber wie beschrieben installiert haben.

Falls wir die /etc/samba/smb.conf editieren möchten, müssen wir die Änderungen wie folgt übernehmen:

sudo service smbd restart

Verschiedenes: Wenn wir auf der grafischen Benutzerebene die Dateien abändern wollen, müssen wir uns als root neu anmelden. Und dann verschwand bei mir die obere Menüleiste im Raspbian Bullseye. Zum Glück ist der Papierkorb auf dem  Desktop vorhanden. Über den Papierkorb kommen wir in die diversen Ordner und Dateien und auch auf das Terminalfenster für die Eingabe der Befehle auf der Kommandozeilenebene. Das Ausschalten und Herunterfahren gelingt mit dem Befehl

shutdown now

Falls es Schwierigkeiten gibt, weil Windows 10 keine Rechner seiner Arbeitsgruppe findet, dann geben wir in Windows 10 bei “Suchen” dort wo das Symbol der Lupe ist, das Wort “Features” ein und es öffnet sich das Fenster “Windows Features”:

Windows Features

Wie im Bild zu sehen, ist alles unter “Unterstützung für die SMB 1.0/CIFS-Dateifreigabe” abzuhaken.

Nachtrag vom 28.10.23: Der Printserver arbeitet zuverlässig. Auch häufiges An- und Ausschalten über einen gemeinsamen Netzschalter für den Drucker und für den Raspberry schafft keinerlei Probleme. Leider druckt der Drucker immer nur einseitig, obwohl ich das zweiseitige Drucken sogar im CUPS zugelassen habe. Das Drucken aus Win XP funktioniert auch nicht, weil Windows XP den Drucker nicht finden kann.