|
Программирование
On-line приложения
Почитать
Web-сервер Apache
Печать и форматирование
MySQL
Разные рецепты
Сборка/установка
Справки
Философия
Мой опыт
Скачать
Программы на Tcl/Tk (GUI)
Программы на Python/Tk (GUI)
Программы (CLI)
Help
Хобби
Фракталы
on-line
Язык для рисования фракталов
Гиперкуб
Теория относительности
Ампуллярии
Преподавание
Студенту/абитуриенту
Мой опыт
Автора!
|
Сетевой принтер через lpdКогда я впервые пытался настроить печать на сетевой принтер
из FreeBSD, я с удивлением обнаружил, что советы, которыми наводнена
Всемирная Паутина мне не подходят. Handbook мне тоже не помог.
Возможно, авторы этих советов
пользовались старой версией На этой же странице вы найдёте много информации, актуальной не только для сетевых принтеров. ПредметМы имеем сетевой принтер HP. Язык принтера — PCL. IP адрес —
Требуется организовать печать на этом принтере из-под FreeBSD. Будем решать её с помощью демона lpd. Настраиваем printcapПервым делом, пишем в lp|text:\
:sh:sd=/var/spool/lpd:\
:if=/usr/share/examples/printing/ifhp:\
:lp=9100@192.168.1.4:rm=192.168.1.4:Мы создали принтер с именем Обратите внимание, на параметр Настраиваем фильтрЭта часть заметки подойдёт для любого (не только сетевого) принтера. Я использую фильтр, поставляемый с FreeBSD, лишь слегка его подправив. #!/bin/sh
#
# фильтр для печати на HP принтере PostScript и plain-text (koi8) файлов
#
# Концы строк будут в стиле UNIX
printf "\033&k2G" || exit 2
#
# читаем первую стоку
read first_line
# выделяем первые два символа
first_two_chars=`expr "$first_line" : '\(..\)'`
# проверяем, с чем мы имеем дело
if test "$first_two_chars" = "%!" -o "$first_two_chars" = "%P"
then
# печатаем PS и PDF
(echo "$first_line" && cat) | \
/usr/local/bin/gs -dSAFER \
-dNOPAUSE \
-q \
-sDEVICE=djet500 \
-sOutputFile=- - && exit 0
else
# печатаем обычный текст, конвертируя его
printf "\033(3R" &&
echo "$first_line" &&
iconv -f KOI8-R -t 866 &&
printf "\f" &&
exit 0
fi
exit 2В «родном» фильтре допущена небольшая неаккуратность:
при печати PostScript-файлов на вход Этот фильтр автоматически различает PostScript и PDF. Всё, что не похоже не PostScript и PDF печатается, как обычный текст. Строго говоря, и в этом фильтре есть что поправить. Например, было бы очень не плохо прописать полные пути ко всем утилитам. Кроме того, с первой строкой можно работать ещё аккуратнее. Совершенствовать универсальный фильтр, который сам распознаёт форматы можно бесконечно. Возможно, лучше просто завести разные принтеры для разных форматов. Для других нужд я создаю другие принтеры (записи с другими
именами в #!/bin/sh /usr/local/bin/convert -density 150 png:- pcl:- Запускаем демонТеперь можно запускать демон печати У Чтобы сервер запускался автоматически, добавьте в lpd_enable="YES" Чтобы передать серверу дополнительные ключи, добавьте туда же: lpd_flags="-s" ПечатаемПосле запуска сервера вы можете начать печатать: lpr file.txt lpr file.ps Имя принтера можно указать явно: lpr -Ppng file.png На этом этапе возможно одно единственное недоразумение: сообщение unable to get official name for local machine В этом нет ничего страшного, просто машина не может разрешить
собственное имя. Посмотрите имя вашей машины,
например командой Исправляем неполадкиЕсли печать не работает.
Тонкости настройкиВы наверно обратили внимание на команду BUGS (недостатки предложенного фильтра)Предложенный мною здесь фильтр хорош тем, что распознаёт PostScript и PDF, и автоматически перекодирует текст и подстраивает принтер, но через этот фильтр можно печатать только русский текст в кодировке koi8-r и PostScript. При попытке напечатать, скажем, уже готовый PCL-код, мой фильтр выполнит перекодировку и исказит данные. Более того, команды, используемые в фильтре, не равнодушны
к нулевому байту ( Так что, если вы хотите печатать нечто нетривиальное, то вам придётся существенно изменить фильтр и скорее всего — переписать его на более подходящем языке, чем shell. |
|
|
|