Drucken und PDF mit PC/GEOS und Linux (noch ein Weg) aktualisiert 09.08.26

  • Hallo zusammen,

    GEODRUCK.ZIP
    Version vom 09.08.26 inklusive einem Skript das drucken und konvertieren kann.


    Ein Gedanke, der mir schon eine Weile durch den Kopf geisterte war:
    CUPS  (Das Drucksystem auf den meisten Linux-PCs) kann doch mit Postskript-Dateien umgehen. Warum soll ich da erst etwas umständlich nach PDF konvertieren?
    Ich hatte dann ein klein wenig recherchiert und fand heraus, das das komplette System sich auch über die Kommandozeile / die Shell bedienen lässt.
    die Zeile lp dateiname reicht (nach ein wenig Vorarbeit) bereits aus um eine PS-Datei auszudrucken. Die Vorarbeit besteht zum einen darin mit dem Befehl lpstat -p -d herauszufinden, welche Drucker sind installiert und zum anderen mit dem Befehl lpoptions -d Druckername einen davon zum Standarddrucker zu machen. Drucken geht aber auch mit dem Befehl lp Druckername Dateiname also ohne einen Standarddrucker. Soweit so gut, ich bekomme jetzt also eine PostSkriptdatei, wie sie PC/GEOS Mit der Anweisung "In Datei drucken" erstellt, ausgedruckt.

    Bei Surfen im Netz stolperte ich dann über das Paket inotify, ein Kernel naher Dienst der es ermöglicht das Dateisystem umfassend auf Veränderungen zu überwachen UND abhängig davon Anweisungen auszuführen, also ein Programm zu starten, oder eine Meldung ausgeben, ins log schreiben usw..

    Neben der Möglichkeit mit inotifywait zu überwachen, ob eine Datei neu angelegt, gelöscht oder einfach nur bearbeitet wurde gibt es auch die Option, sich melden zu lasen, wenn eine Datei nach der Bearbeitung wieder geschlossen wird. Der pefekte Kandidat für meinen Wunsch zu drucken.:)

    Ein wenig mehr Bastelarbeit führte dann zum folgenden Skript, dass ich bei mir schlicht als /home/meins/bin/geodruck.sh abgelegt habe.

    Bash
    #!/bin/bash
    MONITOR_DIR="/home/meins/dosbox/DRUCKEN.PS"
    inotifywait -m -e close_write --format '%w%f' "$MONITOR_DIR" | while read FILE; do
       echo "Drucke Datei: $FILE"
       lp "$FILE"
       sleep 2 # Kurze Pause, um den Druck-Spooler nicht zu überlasten
       done

    Erläuterungen dazu:
    DRUCKEN.PS ist der Standardname der Spooldatei im Deutschen Geos. Den Pfad habe ich allerdings mit der paths Anweisung in der GEOS.INI auf das Rootverzeichnis meiner DosBox gelegt, damit ich das mit allen zum Testen installierten Installationen verwenden kann.
    inotifywait wird mit Parameter (-m) aufgerufen, das verhindert, das es sich nach dem ersten Ergebnis beendet.
    Wie oben erwähnt, habe ich einen Drucker zum Standard gemacht. Es klappt aber auch wenn man den Druckernamen in die Zeile einfügt. Es sind über CUPS auch noch viele andere Optionen machbar. Da sich das aber von Drucker zu Drucker unterscheiden kann gehe ich an dieser Stelle nicht weiter darauf ein.

    Ebenfalls sollte es möglich sein mit Inotifywait auch mehr als eine Datei zu überwachen und mit verschiedenen Anweisungen zu versehen. So, dass im Ergebnis man über den Namen der Spool-Datei verschiedene Drucker oder Papiereinzüge verwenden kann. Ich brauchte hier halt schlicht nur die Möglichkeit zu Drucken. Im Moment starte ich das Skript noch von Hand und beende es mit STRG +C ebenso von Hand wieder. Das lässt sicher auch noch anders lösen...

    Kurze Zusammenfassung:
    Es werden benötigt CUPS als Druckersteuerung. ist auf vielen Linuxsystemen bereits Standard.
    Das Paket Inotify muss installiert sein.
    Ein Skript in einem erreichbaren Pfad (meinHome/bin bietet sich da an)
    Hier mal mein Beispiel (Neu 30.07.26 Mit PDF-Skript):
    geos-infobase.de/WBB_317/index.php?attachment/2095/

    Ach ja.:D Es gibt auch ein Paket CupsPDF.....
    Wenn also einer doch mal ein PDF benötigt, behaupte ich mal ohne mir das jetzt näher angesehen zu haben. Damit sollte es gehen.:)

    Grüße Klaus / Locke

    Edited 3 times, last by Lockesoft (August 9, 2026 at 6:21 PM).

  • Lockesoft July 26, 2026 at 3:05 PM

    Changed the title of the thread from “Drucken mit PC/GEOS uns Linux (noch ein Weg)” to “Drucken mit PC/GEOS und Linux (noch ein Weg)”.
  • Sehr gut. Wenn du es als Service im Hintergrund laufen lässt, brauchst du nicht einmal dein Script starten.

    Ich hatte mal so etwas ähnliches gemacht, um von meinem MS-DOS/GEOS-Rechner per PCNFS-Verbindung zu drucken. Dort hatte ich auf Linux-Seite auch ein Script, dass bei Vorhandensein einer bestimmten Datei, diese druckte und im Anschluss löschte. Das war aber nicht ausgereift, da die Datei nach einer festprogrammierten Zeitdauer gelöscht wurde. Wenn dem Drucker mal Papier fehlte ging das in die Hose.

    Gestört hat mich jedoch immer, dass ich beim Drucken in GEOS mit dem Dateidialog immer erst die Ausgabedatei festlegen musste. Ist das eigentlich noch immer so?

    Mario

  • Gestört hat mich jedoch immer, dass ich beim Drucken in GEOS mit dem Dateidialog immer erst die Ausgabedatei festlegen musste. Ist das eigentlich noch immer so?

    Noe. Auch in der englischen ist ein Name vorgegeben. In dem Fall dann UNNAMED.PS. :)Ich hätte ja, wenn ich mir einen Namen hätte einfallen lassen müssen wahrscheinlich eher etwas wie TEST.PS genommen. das DRUCKEN.PS stand da schon.:)

    Grüße Klaus / Locke

  • Moin.

    Diese ganze PDF-Geschichte ist m. E. ja auch mehr oder weniger dazu gut, damit andere Systeme wie z. B. Windows oder Windows-basierte Programme (z. B. Win-Office) mit in FreeGEOS erstellten Texten, Tabellen, o. ä. umgehen können. Linux selbst hingegen kann sehr gut mit PS-Dateien arbeiten.

    Gruß Achim


    PC/GEOS unter Linux in der DOSEMU = UNSCHLAGBAR!

  • Die Tage werde ich mir mal das Paket mit CUPS und PDF angucken. Vielleicht ist der Export damit ja genauso simpel... Erledigt.^^

    Ja, es ist genauso simpel. Oder auch nicht. Zum Erstelllen von PDF benötigt Ihr das oben erwähnte Treiber-Paket- Das heisst aber zumindest bei Debian nicht CUPS-PDF sondern printer-driver-cups-pdf. Das installiert Ihr mit den Mitteln Eurer Linux-Distro. Danach habt Ihr in CUPS einen neuen Drucker zur Verfügung: PDF. Den kann man jetzt genauso wie oben beschrieben mit Inotifywait zum Konvertieren verwenden.

    Bash
    #!/bin/bash
    MONITOR_DIR="/home/meins/dosbox/"
    CONVERT_FILE="DRUCKEN.PS"
    
    inotifywait -m -e close_write --format '%w%f' "$MONITOR_DIR$CONVERT_FILE" | while read FILE; do
      echo -d PDF "Drucke Datei: $FILE"
      lp "$FILE"
      sleep 2 # Kurze Pause, um den Druck-Spooler nicht zu überlasten
      done

    Erläuterung hierzu:
    Da ich nach wie vor beide Dienste mit einem Skript erschlagen möchte ist der Dateiname jetzt in einer Extra-Variable.
    PC/GEOS zeigte da leider ein etwas merkwürdiges Verhalten, wenn ich einen anderen Namen als DRUCKEN.PS für Das SPOOL-File verwende (das ist ja die Idee, im Skript über den Namen zu sagen, was damit geschehen soll) wird es eigentümlicher Weise nicht in meinem umgeleiteten Spool-Verzeichnis abgelegt sondern wieder im Spool-Verzeichnis der verwendeten Installation. Ausserdem wird der Name nach jedem Druck irgendwie vergessen. Anscheinens hats da nen Bug.
    Egal, jetzt sind es halt zwei Skripte.:)
    Was noch anders ist. Wenn mehr als ein Drucker im System ist muss ich CUPS auch mitteilen, welchen ich nehmen möchte. Daher wird hier
    mittels -d PDF der Drucker vorgegeben.

    Bliebe nur noch zu klären, wo denn die PDF-Dateien landen. ^^
    Standardmässig eingestellt ist Euer_Benutzerverzeichnis/PDF Sogar mit aus den Dokumenten ermittelten passenden Dateinamen + der Nummer des Druckauftrags aus CUPS.

    Das Skript hierzu packe ich mit dem Rest von Oben zusammen und häng es oben mit an.

    Grüße Klaus / Locke

    Edited 7 times, last by Lockesoft (August 9, 2026 at 5:59 PM).

  • Lockesoft August 9, 2026 at 6:15 PM

    Changed the title of the thread from “Drucken mit PC/GEOS und Linux (noch ein Weg)” to “Drucken und PDF mit PC/GEOS und Linux (noch ein Weg) aktualisiert 09.08.26”.
  • Frisch aus meiner Skript-Presse.^^
    Hatte einen Moment Zeit gefunden und die vorher erwähnten Skripte so umgebaut, dass sie jetzt anhand des Dateinamens steuern, was geschehen soll.


    Alle 3 Skripte und den Installer zum Umlegen des Spoolverzeichnis findet Ihr im Archiv GEDODRUCK.ZIP oben im ersten Post.

    Grüße Klaus / Locke

  • Sehr gut. Wenn du es als Service im Hintergrund laufen lässt, brauchst du nicht einmal dein Script starten.

    Auch diese Idee hat Ihren Reiz...

    Hier eine kurze Anleitung dazu:

    Legt in /etc/systemd/system eine neue Datei mit der Endung .service an. Zum Beispiel geosprint.service

    Diese befüllt Ihr mit ungefähr diesem Inhalt:

    Code
    [Unit]
    Description=Drucken für Geos via inotifywait
    After=network.target
    [Service]
    Type=simple
    User=Mein_Benutzername
    ExecStart=/bin/bash /home/meins/bin/geodruck.sh
    Restart=on-failure
    [Install]
    WantedBy=multi-user.target

    Anmerkung hierzu. Der User, dessen Name Ihr oben bei User= eintragt, ist der in dessen Benutzerverzeichnis Ihr dann die PDF-Dateien findet. Ich hatte in einem ersten Versuch, da noch ROOT drinstehen und mich gewundert, warum PDF-erstellen anscheinend nicht geht. Doch klappte schon, nur waren die Dateien dann im Benutzerverzeichnis von ROOT.^^
    Danach sagt ihr systemctl über die Shell /bash, dass sich etwas geändert hat: sudo systemctl daemon-reload
    Jetzt startet und aktiviert Ihr Euren Dienst mit: sudo systemctl enable --now geosprint.service
    Fertig.:)
    Kontrolle, ob alles läuft geht mit: sudo systemctl status geosprint.service

    Grüße Klaus / Locke

    Edited once, last by Lockesoft (August 18, 2026 at 10:07 PM).