Linux als Netzwerkdrucker (Raw, Port 9100)


7

Ist es möglich, einen Linux-Computer so zu konfigurieren, dass er als "Netzwerkdrucker" fungiert? Ich habe einen USB-Drucker, den ich wie ein natives Netzwerkdruckergerät im Netzwerk freigeben möchte .

Ist das möglich? Wie?

HINWEISE: "Autonome" Netzwerkdrucker kommunizieren normalerweise mit dem Protokoll "HP Jetdirect" (auch als "Raw" bezeichnet).

Ich habe einen RS / 6000 mit AIX 5, der jede Art von "autonomem" Netzwerkdrucker findet und damit arbeitet. Und ich möchte über Linux (vorzugsweise Debian) einen USB-Drucker im Netzwerk verfügbar machen, wie jeden normalen Netzwerkdrucker (autonomes Gerät), auf den ich unter AIX zugreifen kann.

EDIT: Ich muss in AIX so etwas tun, wobei ' my_printer_ip ' die Linux-IP ist:

$ netcat my_printer_ip 9100
$ Hello remote USB printer plugged in a Linux !
$ <Ctrl+D>

Antworten:


4

Ich verstehe, dass Netzwerkdrucker ein Protokoll namens RAW (oder Jetdirect) verwenden. Ist das richtig?

Ja. Es gibt zwei Netzwerkprotokolle für Druckaufträge, die heute noch relevant sind: LPD , das auf TCP-Port 515 ausgeführt wird, und JetDirect , das auf TCP-Port 9100 ausgeführt wird. LPD wurde früher von Berkeley für BSD UNIX entwickelt. Es ist mittlerweile ziemlich veraltet, aber es ist immer noch auf vielen Druckern verfügbar, vermutlich aus Gründen der Kompatibilität mit alten Servern. JetDirect wurde Anfang der 90er Jahre von HP entwickelt und ist einfacher und etwas schneller als LPD. Sie sollten wahrscheinlich JetDirect verwenden, sofern verfügbar.

Ich habe einen RS / 6000 mit AIX 5, der jede Art von "nativem" Netzwerkdrucker findet und mit ihm funktioniert. Und ich möchte im Netzwerk einen USB-Drucker wie einen Netzwerkdrucker (autonomes Gerät) verfügbar machen, der Linux (vorzugsweise Debian) verwendet, um dies zu tun.

Installieren Sie CUPS auf einem Linux-Computer und schließen Sie den Drucker an. Sie benötigen dafür nicht einmal einen vollständigen Computer, einen Raspberry Pi oder ähnliches oder einen Heimrouter mit USB-Anschluss und OpenWRT oder DD-WRT.


Und wie kann ein Port 9100 in diesem Linux-Druckauftrag (oder Stream) "umgeleitet" werden, den der lokale USB-Drucker ausführt?
Luciano

Das soll CUPS tun, vorausgesetzt, Sie konfigurieren es richtig.
lcd047

Die gemeinsame Nutzung eines lokalen USB-Druckers über JetDirect mit CUPS scheint sehr unklar zu sein. Ich fand einen Vorschlag, nur ein Netzwerk-Streaming mit inetd (xinetd) zu konfigurieren: "9100 stream tcp nowait lp / usr / bin / lp lp -d <cups_printer_name> -o raw"
Luciano

@ Luciano: Vielleicht versuchen Sie die Dokumente, anstatt nach Spickzettel zu suchen?
lcd047

3

Mit CUPS können Sie Drucker mit (mindestens) IPP-, LPD- und Samba-Protokollen sofort freigeben. IPP wird von den meisten Betriebssystemen unterstützt, und IBM war Teil der Druckarbeitsgruppe, die IPP entwickelt hat, sodass es wahrscheinlich auch in AIX unterstützt wird.

Außerdem verfügt Samba über ein AIX-Protokoll, sodass das eine oder andere funktionieren sollte. Suche nach AIX

Da jedoch keines der Dokumente, auf die ich gestoßen bin, auf die AIX-Version verweist, kann ich nicht sicher sein, ob AIX 5 unterstützt wird oder nicht.

Die Funktionsweise besteht jedenfalls darin, dass Sie den Drucker mit installiertem CUPS an den Server anschließen und die Freigabemethode, die Broadcast-Einstellungen usw. auswählen. Dies ist unkompliziert. Dann können Clients eine Verbindung herstellen und es wird als Netzwerkdrucker angezeigt.


Ich bin ein erfahrener Programmierer und Ingenieur, aber Druckprotokolle sind für mich ein neues Thema. Alles, was ich gefunden habe, bezieht sich auf Drucker, die als autonome Netzwerkgeräte arbeiten. Hat IPP etwas mit dem Begriff oder Protokoll Raw zu tun? Ich hätte gerne einen USB-Drucker als autonomen Netzwerkdrucker (könnte man ihn "hinter" ein Linux stecken?)
Luciano

1
@ Luciano Ich bin auch kein Experte (oder sogar sehr erfahren) in Druckerprotokollen. Ich benutze nur CUPS, um nur wenige Kunden zu bedienen. Was ich jedoch herausfinden konnte, ist, dass das RAW- oder Telnet-Protokoll ein älteres Protokoll ist, ebenso wie LPD / LPR (es gab einen Tippfehler in meinem ursprünglichen Beitrag, sorry). Hier ein kurzer Überblick über die Unterschiede: In jedem Fall ist es möglich , CUPS so einzurichten, dass es auch in RAW / JetDirect bereitgestellt wird (Dokumentation ist möglicherweise knapp), sodass es funktionieren sollte.
WhimsicalWombat

Schöne Übersicht, sehr hilfreich
Luciano

1

Nach einigen Recherchen und Versuchen ...

Diese "Netzwerkdruckergeräte" könnten einige Protokolle implementieren, darunter "HP JetDirect", auch bekannt als "Raw", "JetDirect", entweder nur "9100". Es scheint das am häufigsten von Netzwerkdruckern unterstützte Protokoll zu sein.

Ein Beispiel für die Konfiguration eines Netzwerkdruckers: Ein Konfigurationsbeispiel für einen Netzwerkdrucker

Das JetDirect-Protokoll ist nur ein gewöhnlicher Netzwerkstrom und zumindest in meinen Tests kein echtes Protokoll. Sie benötigen also weder CUPS noch irgendeine Art von Drucker-Engine, damit sich ein Linux wie ein Netzwerkdrucker verhält. Sie benötigen lediglich einen "Netzwerk-Stream-Server" wie inetd (oder xinetd), um den Port 9100 abzuhören und diesen umzuleiten Stream zum Drucker-Stream.

Stellen Sie sich einen Drucker-Stream im Port vor /dev/lp0, in dem wir so etwas tun könnten:

$ echo "Hi local legacy printer !" >/dev/lp0

Jetzt könnten wir den Stream, der im Port 9100 kommt, auf den umleiten /dev/lp0, indem wir einfach die alte Schule inetd verwenden:

9100 stream tcp nowait cat > /dev/lp0

In jedem anderen Remote-System (wie AIX) könnte der ältere Parallel- (oder USB-) Drucker an ein Linux angeschlossen werden, damit er wie ein Netzwerkdrucker funktioniert:

$ netcat linux_ip 9100
$ Hello remote Parallel printer plugged in a Linux !
$ <Ctrl+D>

Natürlich gibt es Parallelitätsprobleme, die über andere Lösungen hinaus von CUPS behoben werden könnten, wenn der lokale Drucker unter einem Spooler konfiguriert wird.

Es hat bei mir funktioniert!


1
Das sieht nach der richtigen Antwort aus: Verwenden Sie inetd und 9100 stream tcp nowait cat> / dev / lp0. Keine CUPS erforderlich.
Josef

0

Sie werden wahrscheinlich CUPS installieren wollen ; Laut dieser Seite ist es definitiv auch für AIX verfügbar.

Sobald Sie es so konfiguriert haben, dass es Ihren Drucker erkennt und verwendet, möchten Sie wahrscheinlich hier nach Anweisungen suchen, wie Sie ihn im Netzwerk freigeben können .

Alternativ können Sie Samba verwenden , um den Drucker freizugeben. Heutzutage sprechen die meisten Betriebssysteme das Protokoll.


Aber wie wäre es, wenn Sie CUPS nicht in AIX installieren und wissen, dass es bereits mit Netzwerkdruckern funktioniert? Gibt es eine Möglichkeit, ein Linux als generisches "Pass-Through" -Netzwerkdruckergerät mit CUPS oder auf andere Weise zu verwenden?
Luciano

@ Luciano: Sie brauchen CUPS unter AIX nicht, Sie brauchen es nur auf dem Linux-Computer. Sie müssen CUPS jedoch so konfigurieren, dass ein Protokoll verwendet wird, das der Druckserver auf dem AIX-Computer sprechen kann.
lcd047

0

Dieses sehr alte Programm exportiert einen lokalen Drucker auf / dev / lp nach localhost: 9100. Ich musste das Makefile bearbeiten, um ältere Programmierstandards zu unterstützen. Es könnte andere Möglichkeiten geben, dies mit neueren Programmen zu tun. Ich würde gerne wissen: lp_server-1.1.6 Quellcode


Wie beantwortet dies die Frage?
Pierre.Vriens

0

OP- Und ich möchte über Linux (vorzugsweise Debian) einen USB-Drucker im Netzwerk verfügbar machen , wie jeden normalen Netzwerkdrucker

Hier ist die Hilfe von lp_server:

lp_server [-n port] [-w] [-d device] [-t stty_cmds]
Version lp_server-1.1.6
Export a printer by simulating an HP JetDirect interface.
-n connection port (default 9100)
-w open output device write only (default r/w)
-d device (default /dev/lp)
-t stty_cmds - stty commands to apply if device is serial port
-r remote_list - remote hosts allowed, in IP/netmask or hostname
       separated by commas. i.e. - 130.191.20.10/24,dickory would
       allow connections from subnet 130.191.20.0 (24 bit netmask)
       and host dickory
-D level - set debug level

Bearbeiten:

The lp_server will bind to the connection port, and wait for
an incoming connection.  After accepting a  connection, it 
opens the output device, (rw or write only as specified),
applys the stty options,  and then copies the connection output
to the device input and vice versa.

Der USB-Drucker wird als Zeichengerät / Entwicklungsdatei auf dem Linux-Server angezeigt und dann von lp_server in den Netzwerk-IP-Adressport 9100 exportiert, wo der AIX-Computer den simulierten Jet Direct-Druckdienst finden kann. Dies sollte der minimalistischen inetd-Antwort sehr ähnlich sein und nur eine andere Wahl bieten.


1
Hallo und willkommen auf der U & L Stack Exchange Site! Bitte lesen Sie die Hilfe , um Informationen darüber zu erhalten, wie Sie am besten auf dieser Website posten können. Um zu Ihrem Beitrag zu gelangen, können Sie Ihren Beitrag so bearbeiten , dass er zusätzlichen Kontext enthält, warum Sie glauben, dass dies eine Antwort ist. Vielen Dank!
Kemotep
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.