Eines der Möglichkeiten bei uns in der KIT Infofakultät zu drucken, ist neben dem Benutzen des Pool-Rechner vor Ort, auch der externe Zugriff via. SSH. Dabei kopiert man mit SCP sein Dokument auf das Benutzerkonto der ATIS, sucht sich einen Drucker aus und startet mit lpd/lpr einen Druckauftrag.
Jedoch kann man mit einem CUPS-Backend soetwas automatisieren und im Netz lassen sich dazu auch schonScripte finden. Durch Debuggen von Cups habe Ich jedoch festgestellt, das keines der Backends von CUPS einen 6. Parameter (File to print) gestellt bekommt. Vermutlich habe Ich einfach den falschen Treiber bei der Einrichtung des SSH-LPR-Backends ausgewählt. Zumindest habe Ich dann ein Backend gefunden, der besser Dokumentiert wurde und selber auch eine sehr ausführliche Fehlerausgabe hat. Für ArchLinux lässt sich das ganze Setup dann relativ kurz zusammenfassen (es wird der Paketmanager-Wrapper Yaourt und SystemD verwendet):

yaourt -S sshldp
systemctl restart cupsd.service
sudo mkdir /sbin/.ssh
sudo chown daemon:daemon /sbin/.ssh
sudo -u daemon ssh s_xxx@i08fs1.ira.uka.de
# accept host/fingerprint for the user daemon
# adjust the lpd path for the remote machine in /usr/lib/cups/backend/sshlpd
mkdir /etc/sshpassword
vim /etc/sshpassword/s_xxx@i08fs1.ira.uka.de
# insert your user password (plain), yeah its creepy

Vermutlich nicht die schönste Variante für einen Backend (Perl, speichern eines unverschlüsselten Passwortes und das ganze noch bei einem unterpriviligierten User wie daemon), aber immerhin hats damit mal funktioniert ;)
Das Einrichten des Druckers ist relativ einfach, sobald CUPS läuft und der Backend richtig erkannt wurde. Zu erst http://127.0.0.1:631 im Browser aufrufen um die Konfigurationsoberfläche von CUPS zu erreichen. Dort auf Administration klicken, mit root einloggen und Drucker hinzufügen.

Bei der darauf folgenden Liste wählt man den Backend LPD over SSH Login, dann die Ziel-Adresse, also quasi Benutzername@UNI-Server/Druckername. In meinem Fall wäre das sshlpd://s_xxx@i08fs1.ira.uka.de/pool-farb1. Die verfügbaren Drucker lassen sich auf dem remote Server auch ausgeben:

# s_xxx@i08fs1(~)$
lpstat -p
# printer auskunft-sw1 is idle.  enabled since So 23 Sep 2012 07:25:23 CEST
# printer pool-farb1 now printing pool-farb1-49.  enabled since Do 27 Sep 2012 # 09:09:40 CEST
# printer pool-sw1 is idle.  enabled since Di 18 Sep 2012 19:27:32 CEST
# printer pool-sw2 is idle.  enabled since Di 18 Sep 2012 18:02:18 CEST
# printer pool-sw3 is idle.  enabled since Di 18 Sep 2012 18:01:55 CEST

Der “Druckertreiber” ist dann: Generic -> Generic PostScript Printer Foomatic/Postscript (recommended) (en).

Debugging

In /etc/cups/cupsd.conf kann das LogLevel auf debug2 gestellt werden (even more verbose!). Dann findet man in /var/log/cups/error_log auch die Ausgaben des Backends. Ob der Druckauftrag auf dem remote Server angekommen ist, kann man dort mit dem Befehl lpstat -o überprüfen.

💬 Are you interested in our work or have some questions? Join us in our public Signal chat pi crew 👋
🪙 If you like our work or want to supprot us, you can donate MobileCoins to our address.