постскриптумная печать с Netcat - PullRequest
1 голос
/ 07 марта 2020

Как я могу использовать программу netcat для двунаправленной связи с сетевым принтером PostScript? Программы PostScript часто отправляют информацию в STDOUT, и ее трудно перехватить по сети. Мне нужна двунаправленная связь с портом принтера 9100. Мой ответ ниже. Кто-нибудь знает лучший способ?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вот альтернатива bash / dev / tcp для печати без netcat. Он отправляет на сетевой принтер PostScript, используя bash, если он построен с --enable- net -redirections. Это работает с моим Void bash и с моим Xerox Phaser 6500n и переключается между PJL и PostScript. Было бы полезно проверить результаты на других принтерах.

#!/bin/bash
#
#   ++++   driverless postscript printing   ++++
#   bash needs --enable-net-redirections build option
#
# for postscript programs with postscript printer only
#
# bash escape is \033 or \e or \E or \x1B

exec 5<>/dev/tcp/192.168.1.111/9100 || exit 1     # change ip as needed

{
 echo -e "\E%-12345X@PJL"           # PJL entrance
 echo @PJL ECHO "$(date)"
 echo @PJL ECHO "setting up printer ..."
 echo @PJL COMMENT Change Printer Settings
 echo @PJL SET COPIES = 1           # modify environment settings
 echo @PJL SET MANUALFEED = off
 echo @PJL ECHO "Starting PostScript Program ..."
 echo @PJL ENTER LANGUAGE = POSTSCRIPT
 echo  "%!"                         # optional
cat "$1" || echo -E "(Hello World\n) print flush"   # if input.ps missing
 echo -e "\004"                     # ctrl-D for end of file
 echo -e "\e%-12345X@PJL"           # back to PJL
 echo @PJL ECHO "Finished PostScript Program."
 echo @PJL RESET                    # unset modified environment settings
 echo @PJL ECHO BYE.
 echo -e "\033%-12345X"             # PJL universal exit
} >&5                               # send to printer

while read -t 122 -r LINE            # timeout after 122 seconds of silence
do
  echo "$LINE"
if [[ "$LINE" =~ @PJL\ ECHO\ BYE. ]]; then break; fi
done <&5 || echo "Timeout waiting for printer."

echo "Finished reading printer"

exec 5>&-                           # close
exec 5<&-                           # close both
exit 0

Вот результат в моем терминале. Обязательно отправьте файл наподобие «print. sh input.ps», иначе это произойдет:

$ ./print.sh
cat: '': No such file or directory
@PJL ECHO Mon 20 Apr 2020 07:10:03 AM PDT

@PJL ECHO setting up printer ...

@PJL ECHO Starting PostScript Program ...

Hello World
@PJL ECHO Finished PostScript Program.

@PJL ECHO BYE.
Finished reading printer

ОБНОВЛЕНИЕ: Я добавил это здесь: github

1 голос
/ 08 марта 2020

Программа netcat может использоваться для двунаправленной связи с принтером PostScript.

Я использовал несколько простых программ для отправки заданий на печать непосредственно на сетевой принтер PostScript и не получил никакой информации о возврате из принтер до сих пор. Мне нравится общаться напрямую с принтером, а не отправлять задания в спулер.

В некоторых местах есть небольшая информация о печати с помощью netcat, очень скудная, поэтому я делаю этот отчет.

Мой принтер Xerox 6500n подключен к маршрутизатору с помощью кабеля rnet. Я могу отправлять программы PostScript или PDF-файлы напрямую на принтер различными способами. Иногда я хочу получить ответы от принтера, и поэтому у меня есть тестовая программа, которая использует принтер для преобразования ввода с помощью 'pathforall' и отправки ответа обратно. Netcat делает это красиво:

nc -n 192.168.1.111 9100 < pathforall.ps

Я получаю желаемый ответ. Это было проверено и по какой-то причине похоже на вывод ghostscript:

$ nc -v -w 5 -n 192.168.1.111 9100 < pathforall.ps
192.168.1.111 9100 (hp-pdl-datastr) open
28.6998 12.2999 moveto
28.6998 9.29996 28.3998 8.09995 25.2998 6.59998 curveto
24.3998 6.09998 21.2999 4.79999 19.0999 4.79999 curveto
15.3999 4.79999 12.4999 7.89996 12.4999 12.5999 curveto
12.4999 12.7999 lineto
12.4999 16.1999 13.5999 21.7999 28.6998 26.7999 curveto
closepath

$ gs pathforall.ps
GPL Ghostscript 9.50 (2019-10-15)
Copyright (C) 2019 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Loading Times-Roman font from /usr/share/ghostscript/fonts/Times-Roman.pfa... 4824712 3114962 3833824 2546359 1 done.
28.6184 12.2615 moveto
28.6184 9.27632 28.3224 8.07977 25.2262 6.57484 curveto
24.3257 6.08141 21.2418 4.78618 19.0461 4.78618 curveto
15.3577 4.78618 12.4589 7.8824 12.4589 12.5576 curveto
12.4589 12.7673 lineto
12.4589 16.1472 13.5567 21.7352 28.6184 26.7188 curveto
28.6184 12.2615 lineto
closepath

Netcat позволяет мне общаться с моим принтером, аналогичным ghostscript, за исключением того, что у меня пока не работает рабочий режим. Кроме того, обязательно включите в постскриптум команду flu sh, чтобы получить полный ответ обратно. Это может использоваться для многих целей для получения информации от принтера.

РЕДАКТИРОВАТЬ: Вот простой тест, чтобы увидеть, возвращается ли принтер STDOUT к компьютеру:

%!
(Hello World\n) print flush

EDIT3 : Исполнительный режим Postscript работает с te lnet для Xerox 6500n, как это было предложено luser droog. Смотрите комментарии ниже.

...