May. 8th, 2020

victor_sudakov: (Default)
Сабж через систему печати LPR.

Официально FreeBSD не поддерживается, но фирма-производитель любезно сообщает нам, что However generic Postscript/PCL driver can be used for Postscript or PCL compatible products. If your product is a Laser product, you will be able to use the Ghostscript hl1250 driver or Ghostscript hl7x0 driver.

Тогда для получения из сабжа PostScript-принтера создаем такой фильтр ps2pcl.sh:

#!/bin/sh
/usr/local/bin/gs -q -dBATCH -dNOPAUSE -dPARANOIDSAFER -dSAFER \
        -sDEVICE=hl1250 -sPAPERSIZE=a4 -r600x600 \
        -dDuplex=true \
        -sOutputFile=- - && exit 0
exit 2

И прописываем в /etc/printcap:

ps|Brother HL-L2340D series PostScript:\
        :sh:\
        :mx#0:\
        :lp=9100@192.168.1.74:\
        :if=/usr/local/etc/ps2pcl.sh:\
        :sd=/var/spool/output/lpd2:lf=/var/log/lpd-errs:

Теперь у нас есть Postscript/PDF принтер, даже с печатью кириллицы проблем нет. Ghostscript прекрасно кушает не только Postscript, но и PDF, если кто ещё не знал.

Хуже оказалось с печатью plain text. Оказывается если просто посылать текст на порт принтера, он печатает пустые страницы. Пробовал преобразовывать концы строк из UNIX в DOS и обратно, пробовал крутить настройки сетевого порта - ничего не помогает. То есть это оказался не line printer, а PCL-only. Первый раз такое чудище трахать буду. Ни разу в жизни не встречал принтера, на который нельзя было бы напечатать текст из командной строки DOS с помощью команды "COPY CON LPT1" (кроме совсем дешевых GDI винпринтеров. Но сабж всё же не из таких, он сетевой принтсервер).

Ладно, в моем распоряжении print/a2ps и print/enscript-a4. Можно прикрутить их в качестве фильтра из текста в PostScript, но какая досада! С Unicode у них совсем никак. Ничего кроме ascii в получившийся PostScript не попадает, в лучшем случае non-ascii отображаются вопросиками.

Выходит совсем без cups всё-таки не обойтись. Неспортивно. Придется поставить пакеты print/cups и print/cups-filters. Но запускать подсистему cups я не буду, просто возьму от неё одну утилиту и использую в фильтре txt2pcl.sh:

#!/bin/sh
exec 2> /dev/null
CHARSET=utf-8 ; export CHARSET
/usr/local/sbin/cupsfilter -i text/plain - |\
        /usr/local/bin/gs -q -dBATCH -dNOPAUSE -dPARANOIDSAFER -dSAFER \
        -sDEVICE=hl1250 -sPAPERSIZE=a4 -r600x600 \
        -dDuplex=true \
        -sOutputFile=- - && exit 0
exit 2

И добавляем в /etc/printcap запись для текстового принтера:

lp|Brother HL-L2340D series line printer:\
        :sh:\
        :mx#0:\
        :lp=9100@192.168.1.74:\
        :if=/usr/local/etc/txt2pcl.sh:\
        :sd=/var/spool/output/lpd1:lf=/var/log/lpd-errs:

Можно пользоваться. Можно даже раздать через lpd.

ЗЫ Если кто знает, как можно на этом принтере печатать текст НЕ преобразованием через Postscript - прошу высказаться в комментариях. На прочих виденных мною подобных устройствах можно было или просто отправить текст на локальный или сетевой порт, или склеить в фильтре нужный шрифт+текст и опять же отправить полученное на порт.

Profile

victor_sudakov: (Default)
Виктор Судаков

December 2024

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 23rd, 2025 05:06 am
Powered by Dreamwidth Studios