FreeBSD: Раздача драйверов принтеров сервером Samba
Постановка задачи
Однажды в процессе установки принт-сервера на базе Samba я решил настроить раздачу драйверов принтеров для операционных систем семейства Windows NT x86 принт-сервером. Как обычно, все началось с поиска чужих наработок в Сети, однако, мне так и не попалась четкая и однозначная инструкция на русском языке. Пришлось действовать согласно Chapter 21 - Classical Printing Support документа The Official Samba 3.2.x HOWTO and Reference Guide, а затем написать свою интерпретацию содержащихся там рекомендаций.
Исходные данные
Имеется сервер с FreeBSD, на котором кроме всего прочего развернут принт-сервер на базе Samba. Т.к. настройка подобных принт-серверов многократно описана, и реализация раздачи клиентских драйверов принтеров не зависит от используемой подсистемы печати, я не буду заострять внимание на конфигурации принт-сервера, который использовался для выполнения действий, описанных ниже. Для того, чтобы приступить к настройке, достаточно знать имя принтера и иметь дистрибутив соответствующего Windows-драйвера. В качестве тестового принтера я использовал HP LaserJet 1200, которому было присвоено имя hp1200, и драйвер HP LaserJet 1200 Series PCL6 for Windows 2000/XP, поставляемый с принтером на компакт-диске.
Создание общей папки [print$]
Начать настройку следует с подготовки общей папки (далее шары) print$, которая предназначена для хранения драйверов принтеров, подключенных к серверу. Именно из нее загружаются драйверы, когда клиенты подключают сетевые принтеры. Шара print$ должна быть соответствующим образом определена в файле конфигурации smb.conf, по умолчанию находящемся в папке /usr/local/etc:
[print$] comment = Драйверы принтеров path = /data/samba-drivers browseable = Yes guest ok = Yes read only = Yes write list = admin
Указанные параметры имеют следующие значения: comment – комментарий шары в сетевом окружении (может иметь любое значение), path – физическое местонахождение папки на диске сервера, browseable – видимость шары в сетевом окружении (в нашем случае шару не видно в сетевом окружении, т.к. ее имя заканчивается на $, но она может быть подключена командой net use), guest – возможность чтения кем угодно (в рассматриваемом случае включена), read only – запрет записи (в рассматриваемом случае включен), write list – список пользователей, которым разрешена запись (только эти пользователи, root и пользователи, определенные параметром printer admin в секции [global] файла smb.conf, могут выгружать драйверы на сервер).
Общая папка print$ имеет несколько подпапок, соответствующих архитектуре операционных систем, для которых на сервере имеются драйверы: W32X86 - драйверы для "Windows NT x86", WIN40 - драйверы для "Windows 95/98", W32ALPHA - драйверы для "Windows NT Alpha_AXP", W32MIPS - драйверы для "Windows NT R4000", W32PPC - драйверы для "Windows NT PowerPC". Нас будет интересовать подпапка W32X86, т.к. именно в ней должны находиться драйверы для операционных систем семейства Windows NT x86. Необходимо создать эту папку и установить права на нее таким образом, чтобы пользователи, обладающие правами администрирования принтеров (смотрите выше), имели права на запись, а все остальные пользователи имели права на чтение. В рассматриваемом случае эта папка находится в папке /data/samba-drivers, принадлежит пользователю admin, на нее установлены права 755.
Идентификация файлов драйвера
Существует два способа идентификации (определения списка) файлов, которые входят в состав соответствующего драйвера: анализ соответствующего inf-файла, (не всегда) поставляемого вместе с драйвером, и анализ информации, которая выдается в окне свойств драйвера, установленного на компьютер c Windows.
Естественно, второй способ проще и удобнее первого, поэтому рассмотрим именно его. Все действия, описанные в данном разделе, должны выполняться на компьютере с Windows. В первую очередь необходимо подготовить необходимый драйвер. Затем нужно подключиться к принт-серверу и вручную установить подготовленный ранее драйвер. После этого необходимо выполнить команду Пуск » Настройка » Принтеры и факсы. В открывшемся окне Принтеры и факсы нужно выполнить команду меню Файл » Свойства сервера. В открывшемся окне Свойства: Сервер печати необходимо перейти на закладку Драйверы, выделить соответствующий драйвер и нажать кнопку Свойства. Откроется окно Свойства драйвера:
Следует внимательно сохранить следующие данные, которые понадобятся позже: имя файла драйвера (HPBF312G.DLL); имя файла данных (HPBF312I.PMD); имя файла настройки (HPBF12E.DLL); имя файла справки (HPBF312I.HLP); имена зависимых файлов (HPBF12F.DLL, HPBF12H.DLL, HPBF12I.DLL, HPBF12J.DLL, HPBF12K.DLL, HPBAFD32.DLL, HPBFTM32.DLL); путь к драйверу (C:\WINDOWS\System32\spool\DRIVERS\W32X863\3).
Копирование файлов драйвера на принт-сервер
После сохранения данных необходимо тем или иным способом скопировать файлы драйвера на принт-сервер. Следует отметить, что файлы нужно копировать в корень папки print$\W32X86, не обращая внимание на то, что на компьютере с Windows они находятся в одной из подпапок папки W32X86. После того, как файлы будут скопированы, можно проверить их доступность, выполнив команду:
smbclient //localhost/print$ -U 'admin%<пароль>' -c 'cd W32X86; pwd; dir'
Добавление драйвера в список драйверов принт-сервера
После копирования нужных файлов необходимо добавить драйвер в список драйверов принт-сервера. Для этого следует выполнить команду:
rpcclient -U'admin%<пароль>' -c 'adddriver "Windows NT x86" \ "hp1200:HPBF312G.DLL:HPBF312I.PMD:HPBF312E.DLL:HPBF312I.HLP:NULL:RAW: \ HPBF312F.DLL,HPBF312H.DLL,HPBF312I.DLL,HPBF312J.DLL,HPBF312K.DLL,HPBAFD32.DLL,HPBFTM32.DLL"' \ localhost
Естественно, данную команду нужно откорректировать в соотвтетствии с параметрами своего драйвера, сохраненными выше. Вторая строка команды содержит (слева-направо) имя драйвера принтера, имя файла драйвера, имя файла данных, имя файла настройки, имя файла справки, NULL, формат данных; третья - список зависимых файлов через запятую. После того, как драйвер будет добавлен, можно проверить его доступность, выполнив команду:
rpcclient -U'admin%<пароль>' -c 'enumdrivers' localhost
Задание соответствия между принтером и драйвером
После того, как как драйвер будет добавлен в список драйверов принт-сервера, необходимо задать соответствие между драйвером и принтером. Для этого следует (во избежание недоразумений под root'ом) выполнить команду:
rpcclient -U'root%<пароль>' -c 'setdriver hp1200 hp1200' localhost
На этом добавление драйвера принтера заканчивается. Можно попробовать установить принтер на компьютер с Windows. Мастер добавления принтеров больше не должен говорить о том, что на сервере отсутствует необходимый драйвер.
Заключение
В документе Chapter 21 - Classical Printing Support описана установка драйвера принтера Heidelberg Digimaster 9110 (PS). Я устанавливал драйвер совсем другого принтера по тому же алгоритму. С учетом того, что все прошло без ошибок с первого раза, я надеюсь, что эта статья пригодится в процессе установки драйверов для других моделей принтеров.



Уважаемые Посетители! Пишите, какие принтеры и с какими драйверами удалось настроить, а какие не удалось
Пытался настроить принтер hp laserget 2015n. При выполнении команды:
rpcclient -U 'admin%pass' -c 'adddriver "Windows NT x86" \ "HP2015:unidrv.dll:HPC20155.GPD:unidrvui.dll:unidrv.hlp:NULL:RAW: \
EP9RES.DLL, EP9RES.DLL, hpcdmc32.dll, hppdvq01.dll, hpz5r43e.dll, hpz6r43e.dll, hpzev43e.dll, hpzls43e.dll, hpzss43e.dll, hpzst43e.dll, hpzui43e.dll, mdigraph.dll, mdiui.dll, mxdwdrv.dll, mxdwdui.dll, pclxl.dll, SNAGITD8.DLL, unires.dll, XpsSvcs.dll"' \
localhost
вот такая ошибка:
cli_start_connection: failed to connect to LOCALHOST (0.0.0.0). Error NT_STATUS_BAD_NETWORK_NAME Cannot connect to server. Error was NT_STATUS_BAD_NETWORK_NAME
Я новичек в linux, посоветуйте что-нибудь для исправления данной ошибки.
Очень странный IP-адрес
localhost. На первый взгляд, некорректно настроен резольвингВсем приветище
Я не смогла установить принтер… canon pixma ip1800 на ХР
Драйвера скачала, в мастере установки путь указала, принтер установился, но маленький нюанс… Он не печатает вообще, то есть комп его видит, но команды принт не выполняет. В чём может быть проблема?
Если комп видит принтер, но принтер не печатает, то в кривом драйвере. Из консоли FreeBSD принтер печатает?
Эмммм… В смысле команда через командную строку? Просто я мало поняла, что такое консоль FreeBSD, и с чем её едят… Если объясните подробнее, то возможно найду где находится данный зверь в моём ЭВМ
Звери живут в зоопарке, а Вы задали вопрос немного не в там, где следовало это сделать. Данный блог на 99% посвящен Linux и Unix. Судя по тому, что Вас отпугнуло слово “консоль”, Вы не сталкивались с этими операционными системами. В этом нет ничего плохого, просто воспользуйтесь Гуглом или Яндексом
Вы жжоте. Здесь обсуждается не “хрюша”, а т.н. “фря” или “фряха” – она же – операционная система FreeBSD
Вот Вам ссылочка на драйвер. Только старый перед установкой удалите