[SOLVED] Drucken von .odt, .ods... von der Commandline

Einrichten des Druckers und des Drucksystems, Scannerkonfiguration und Software zum Scannen und Faxen.
Antworten
scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

[SOLVED] Drucken von .odt, .ods... von der Commandline

Beitrag von scientific » 26.11.2016 14:18:44

Hi Leute!

Ich bin seit kurzer Zeit stolzer Besitzer eines Druckers. Das ist ein Ricoh SP 204SNF, ein SW-Laser-Drucker.
Die Einrichtung war nicht ganz trivial und erforderte einiges an Suchaufwand auf Google, da es ein sogenannter DDST-Drucker ist, wo das Rendering/Rastering vollständig am Host-Rechner gemacht wird.
Keiner der mit Debian und openprinting mitgelieferten Treiber passte, und so fand ich einen Treiber auf Github, der für die 100 und 200er Serie von Ricoh angepasst wurde [¹]

Damit klappt das Drucken jetzt wunderbar.

Weiters hab ich bei meinen Recherchen zu Fuse im Sommer ein nettes Fuse-Filesystem gefunden, welches am Mountpoint für jeden Drucker ein Verzeichnis anlegt, und man kann dorthin dann Files kopieren, und die werden nicht gespeichert, sonder gleich direkt gedruckt. Das funktioniert auch wunderbar. [2] (für Bilder, Textfiles...)

Dieses Filesystem jedoch verwendet den Befehl

Code: Alles auswählen

lpr -P printer
in einer Pipe...
Und damit taucht bei mir jetzt die Frage auf, wie ich mit lpr direkt z.B. ein .odt-File drucken kann.
Ich hab ja das ganze Druck-Zeugs in Unix/Linux noch nicht wirklich durchschaut, da hier offenbar viele Wege in die Nähe von Rom führen, manche führen direkt hin, andere über Umwege und manche enden irgendwo im Sumpf...

Wenn ich Text, Bilder u.ä. an lpr übergeben kann, dann muss das vom Drucksystem ja in ein PS, PDF oder gar wie in meinem Falle in eine Bitmap umgewandelt werden, bevor es zum Drucker geschickt wird. Das übernehmen die vielen "Filter", wie ich herausgefunden habe.
Aber wie übergebe ich dann ein File eines Textverarbeitungsprogrammes, einer Tabellenkalkulation dem Drucksystem?
Libreoffice kann ja auch headless zum konvertieren in ein PDF verwendet werden, oder auch zum headless Drucken mehrerer Files im Batch...

Kann man diese Funktion nicht auch für so einen Filter für CUPS verwenden? Oder muss da Foomatic ran?
Da kenn ich mich leider viel zu wenig aus, und würde mich über Anregungen freuen.

lg scientific




[1]http://blog.hansenpartnership.com/getti ... -on-linux/
[2]https://github.com/libfuse/python-fuse/ ... f-cupsfspy
Zuletzt geändert von scientific am 28.11.2016 00:45:31, insgesamt 2-mal geändert.
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

KP97
Beiträge: 3403
Registriert: 01.02.2013 15:07:36

Re: Drucken von der Commandline

Beitrag von KP97 » 26.11.2016 19:33:55

Das Paket cups-bsd sollte installiert sein. Wenn Du einen Standarddrucker festgelegt hast, reicht ein einfaches

Code: Alles auswählen

lpr <Dokument>
aus, sonst auch

Code: Alles auswählen

lpr -P <Drucker>  <Dokument>
Schau die manpage von lpr an, dort findest Du alle Infos.

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Drucken von der Commandline

Beitrag von scientific » 26.11.2016 20:39:03

Nun, wenn dem so wäre, dann würde ich das hier nicht fragen.

ein

Code: Alles auswählen

cat document.odt | lpr -P PDF
bzw. ein

Code: Alles auswählen

lpr -P PDF document.odt
erzeugt einfach ein PDF ohne Inhalt...

Eine halbe Zeile im PDF ist mit "stream" und "endstream" gekennzeichnet, dazwischen stehen 30-40 seltsame Zeichen. Davor und danach sind irgendwelche Header-Zeilen und Felder.

Also dürfte da etwas schief gehen.

Ich nehme an, es wird kein geeigneter Filter für .odt-Files z.B. vorliegen.

Und ich vermute einmal, ich könnte mir so einen bauen, wenn ich dazu unoconv zu Hilfe nehme.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Drucken von der Commandline

Beitrag von scientific » 27.11.2016 02:44:55

Also gut...

lpr bzw. cups hat nach meinen Recherchen definitiv keine Filter für den Druck von Opendocument-Files (odt, ods, odp...) mit dabei.

Ich hab mir jetzt die Mühe gemacht, und sowohl CupsFS angepasst und mime.conv, mime.type und einen Filter erstellt, der mittels unoconv aus einem Libreoffice-Dokument (Writer, Calc, Presentation) ein PDF erzeugt, welches dann einem Drucker gefüttert werden kann.

Ich weiß, dass das ein wenig doppelt gemoppelt ist, jedoch benötige ich das für das Fuse CupsFS, wo ich Files in einem Ordner ablegen kann, die dann direkt gedruckt werden. Dieses FS nutzt lpr über eine Pipe. Damit benötige ich diese Möglichkeit.

Das ganze ist hier zu finden:
https://github.com/xundeenergie/libreoffice_cups

Das ganze zu nutzen, müssen lediglich die Files in die entsprechenden Verzeichnisse kopiert werden und dann pro User als dieser eingeloggte User ein beherztes

Code: Alles auswählen

systemctl --user enable cups-fuse.path
systemctl --user start cups-fuse.path
ausgeführt werden.

Es tut sich dann noch nicht viel. Aktiv wird das ganze erst, wenn im Verzeichnis ~/Desktop das Verzeichnis "Drucker" angelegt wird.

Die Drucker werden jedoch nur beim Starten von CupsFS eingelesen. Sollten Drucker dazukommen oder entfernt werden, aktualisiert sich das Druckerverzeichnis noch nicht.
Dann muss nur

Code: Alles auswählen

systemctl --user restart cups-fuse.service
ausgeführt werden, und schon sind die Drucker aktualisiert.

Ich hab CupsFS auch nur übernommen und geringfügig modifiziert.

Wahrscheinlich ist der Filter für Libreoffice und Cups anders und schöner zu lösen. Aber mir war es mit meinem aktuellen Wissenstand nicht möglich.
Vor allem spinnt unoconv, wenn ich ihm mit --stdin einen Stream füttere.

Code: Alles auswählen

cat Datei.odt|unoconv --stdin ...
bringt einen Fehler, dass mit der UTF-8-Codierung etwas nicht stimmt... :-/

Viel Spaß beim Testen.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Drucken von der Commandline

Beitrag von Meillo » 27.11.2016 07:09:25

Schoener Post, scientific. Danke!
Use ed once in a while!

scientific
Beiträge: 3020
Registriert: 03.11.2009 13:45:23
Lizenz eigener Beiträge: Artistic Lizenz
Kontaktdaten:

Re: Drucken von der Commandline

Beitrag von scientific » 27.11.2016 22:30:38

Danke dir!

Btw. ich hab den Code noch ein wenig aufgeräumt und ein deb-Paket erstellt.

Leider funktioniert mein Repository momentan nicht (hab das schon lange nicht gepflegt und muss das mal auf Vordermann bringen... das ist ja auch wahnsinnig mühsam...).

Also einfach nur von https://github.com/xundeenergie/libreoffice_cups das deb downloaden und mit

Code: Alles auswählen

sudo dpkg -i libreoffice-cups_0.1.deb
installieren.

lg scientific
dann putze ich hier mal nur...

Eine Auswahl meiner Skripte und systemd-units.
https://github.com/xundeenergie

auch als Debian-Repo für Testing einbindbar:
deb http://debian.xundeenergie.at/xundeenergie testing main

Antworten