next up previous contents index
Next: Подключение к серверу Novell Up: Samba Previous: Доступ к принтеру Linux   Contents   Index

Доступ к принтеру Windows с машин работающих под Linux

Для доступа к принтеру на Windows машине:

  1. Вы должны иметь правильные записи в файле /etc/printcap и они должны соответствовать локальной структуре директориев (для буферизации и т.п.)
  2. У Вас должен быть скрипт /usr/bin/smbprint. Он поставляется вместе с исходными текстами Samba, но не со всеми двоичными дистрибутивами Samba.
  3. Если Вы хотите преобразовывать ASCII файлы в Postscript, вы должны иметь программу nenscript, или ее эквивалент nenscript - конвертер Postscript. Она обычно устанавливается в директорию /usr/bin.
  4. Вы можете сделать печать через Samba более легкой, используя программы-надстройки. Простой скрипт на Perl, который обрабатывает ASCII, Postscript или преобразованный Postscript приведен ниже.
  5. Вы также можете использовать MagicFilter. MagicFilter имеет преимущества потому, что он ``знает'' как автоматически преобразовывать достаточно большое количество форматов файлов.

Запись в файле /etc/printcap, приведенном ниже, сделана для принтера HP 5MP на сервере Windows NT. Используются следующие поля файла /etc/printcap:

Для более детальной информации о печати смотрите справочные страницы по 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-документы являются уже отформатированными, так что они печатаются сразу.



Alex Otwagin 2002-12-16