Для доступа к принтеру на Windows машине:
/etc/printcap
и они
должны соответствовать локальной структуре директориев (для
буферизации и т.п.)
/usr/bin/smbprint
. Он поставляется
вместе с исходными текстами Samba, но не со всеми двоичными
дистрибутивами Samba.
nenscript
, или ее эквивалент nenscript
-
конвертер Postscript. Она обычно устанавливается в директорию
/usr/bin
.
MagicFilter
. MagicFilter
имеет
преимущества потому, что он ``знает'' как автоматически
преобразовывать достаточно большое количество форматов файлов.
Запись в файле /etc/printcap
, приведенном ниже, сделана для
принтера HP 5MP на сервере Windows NT. Используются следующие поля
файла /etc/printcap
:
cm
- комментарий;
lp
- имя устройства, открываемого для вывода;
sd
- директория спула принтера (на локальной машине);
af
- файл учета пользования принтером;
mx
- максимальный размер файла (ноль - без ограничений);
if
- имя входного фильтра (скрипта).
Для более детальной информации о печати смотрите справочные
страницы по printcap
.
# /etc/printcap
#
# //zimmerman/oreilly via smbprint
#
lp:\
:cm=HP 5MP Postscript OReilly on zimmerman:\
:lp=/dev/lp1:\
:sd=/var/spool/lpd/lp:\
:af=/var/spool/lpd/lp/acct:\
:mx#0:\
:if=/usr/bin/smbprint:
Убедитесь, что буферный директорий и директорий, используемый для учета использования, существуют и для них имеется право на запись.
Убедитесь, что строка if
содержит правильный путь к скрипту
smbprint
и убедитесь, что записи указывают на правильное
устройство вывода (специальный файл /dev
).
Далее приведен сам скрипт smbprint
. Он обычно находится в
директории /usr/bin
и написан человеком, который создал пакет
Samba. Этот скрипт поставляется вместе с дистрибутивом исходного
кода Samba, но отсутствует в некоторых бинарных дистрибутивах.
#!/bin/sh -x
# Этот скрипт является входным фильтром для основанной на printcap
# печати на unix-машинах. Он использует программу smbclient для
# печати файла на указанный smb-сервер и сервис.
# Например Вы можете быть запись в printcap, подобная этой
#
smb:lp=/dev/null:sd=/usr/spool/smb:sh:if=/usr/local/samba/smbprint
#
# которая создает unix-принтер названный "smb", который будет
# печатать с помощью этого скрипта. Вам необходимо создать директорий
# спула /usr/spool/smb с соответствующими правами и владельцем
# Установите здесь сервер и сервис на который Вы хотите печатать. В
# этом примере предполагается наличиеWfWg PC, названного "lapland", который
# имеет экспортируемый принтер, называемый "printer" без пароля
#
# Далее скрипт был изменен hamiltom@ecnz.co.nz (Michael Hamilton)
# так: сервер, сервис и пароль могут быть считаны из файла
# /usr/var/spool/lpd/PRINTNAME/.config
#
# Для того чтобы это работало запись в /etc/printcap должна
# включать файл учета использования (af=...):
#
# cdcolour:\
# :cm=CD IBM Colorjet on 6th:\
# :sd=/var/spool/lpd/cdcolour:\
# :af=/var/spool/lpd/cdcolour/acct:\
# :if=/usr/local/etc/smbprint:\
# :mx=0:\
# :lp=/dev/null:
#
# Файл /usr/var/spool/lpd/PRINTNAME/.config должен содержать
# server=PC_SERVER
# service=PR_SHARENAME
# password="password"
#
# Например,
# server=PAULS_PC
# service=CJET_371
# password=""
#
# Файл логов. Замените на /dev/null, если хотите.
#
logfile=/tmp/smb-print.log
# logfile=/dev/null
#
# Последним параметром для фильтра является имя файла.
#
spool_dir=/var/spool/lpd/lp
config_file=$spool_dir/.config
# Должны читаться следующие переменные, заданные в
конфигурационном файле:
# server
# service
# password
# user
eval `cat $config_file`
#
# Некоторая помощь при отладке. Замените >> на > для экономии места.
#
echo "server $server, service $service" >> $logfile
(
# Вы можете добавить строку 'echo translate' для автоматизации.
# CR/LF translation when printing.
echo translate
echo "print -"
cat
) | /usr/bin/smbclient "\\\\$server\\$service" $password -U $user -N -P >> $logfile
Большинство дистрибутивов Linux поставляется с программой
nenscript
для преобразования ASCII документов в Postscript.
Следующий скрипт на Perl облегчает работу, обеспечивая простой
интерфейс для печати с использованием smbprint
.
Использование: print [-a|c|p] <filename>
-a печатает <filename> как ASCII
-c печатает <filename> отформатированный как исходный код
-p печатает <filename> как Postscript
Если опции не заданы, программа попробует определить
тип файла и соответственно печатать
Используя smbprint
для печати ASCII файлов, скрипт отслеживает
длинные строки. Если возможно, скрипт разрывает длинную строку на
пробеле (вместо разрыва в середине слова).
Форматирование исходного кода таже выполняется с помощью программы
nenscript
. Она берет ASCII-файл и форматирует его в 2 колонки с
заголовком (дата, имя файла и т.п.). Эта программа дополнительно
нумерует строки. Используя скрипт как пример, можно ввести другие
типы форматирования. Postscript-документы являются уже
отформатированными, так что они печатаются сразу.