Одной из важнейших задач, связанных с интеграцией десктопа с FreeBSD в корпоративную сеть, состоящую из компьютеров с Windows, является организация печати на принтеры, подключенные к «инородным» принт-серверам. На мой взгляд, самым простым решением данной «проблемы» является совместное использование штатной системы печати FreeBSD, известной как Berkeley printing system и LPD, а также службы Print Services for UNIX, которая входит в комплект поставки всех современных версий Windows.
Почему именно LPD?
Вполне закономерный вопрос, особенно с учетом того, что штатная система печати FreeBSD «бесповоротно устарела», и в настоящее время доступно множество более мощных и удобных альтернатив, самой популярной из которых является CUPS. Во-первых, потому, что LPD прекрасно работает со всеми используемыми мной десктопными приложениями, во-вторых, потому, что она не нуждается в стороннем программном обеспечении и может быть настроена за пару минут. Система печати CUPS менее стабильна, занимает много места на диске и нуждается в сложной настройке, при этом большинство ее «наворотов» не имеет практического смысла при использовании на десктопе. Вот, собственно, и все обоснование.
Исходные данные
Все действия, которые описаны в данной заметке, могут быть выполнены на любом компьютере с Linux/Unix, при этом Вам не придется устанавливать на него какое-либо программное обеспечение. На роль сервера печати подойдет компьютер с любой операционной системой семейства Windows NT, к которому подключен принтер. Лично я использовал десктоп с FreeBSD 8.1-PRERELEASE и KDE 3.5.10_6, принт-сервер с Windows XP Professional SP3 и принтер HP LaserJet 1200. На всякий случай следует отметить, что штатный брандмауэр сервера печати был отключен.
Настройка компьютера с Windows
Для того, чтобы компьютер с Windows мог обрабатывать задания, отправленные штатной системой печати FreeBSD, необходимо установить на него Службы печати для Unix. Для выполнения этой процедуры следует перейти к Панели управления, запустить компонент Установка и удаление программ, щелкнуть по закладке Установка компонентов Windows, выбрать Другие службы доступа к файлам и принтерам в сети, нажать кнопку Состав, установить «галочку» Службы печати для Unix и нажать кнопку ОК. В результате будет установлена и запущена служба Сервер печати TCP/IP (короткое название — lpdsvc). По непонятным причинам (скорее всего, из-за «любви» разработчиков Windows к Unix-like операционным системам) для нее задается режим запуска Вручную, который следует изменить на Автоматически любым удобным способом, например, командой:
sc config lpdsvc start= auto
Настройка компьютера с FreeBSD
Для того, чтобы штатная система печати компьютера с FreeBSD могла отправлять задания Службам печати для Unix, нужно настроить демон lpd(8). Первым этапом данной процедуры является добавление определения принтера в базу данных принтеров, которая хранится в файле /etc/printcap
(подробное описание формата данного файла имеется в printcap(5)). Определение сетевого принтера должно выглядеть примерно так:
HP LaserJet 1200|lp: :lp=:rm=computer:rp=printer:sh:sd=/var/spool/lpd:
Первая строка содержит любое количество имен (псевдонимов) принтера (принтер, который предполагается использоваться по умолчанию, должен иметь псевдоним lp
), вторая строка определяет: lp
— устройство, связанное с принтером (для сетевых принтеров нужно указывать пустое значение), rm
— IP-адрес или имя сервера печати, rp
— имя принтера, заданное на сервере печати, sh
— запрет выдачи начальных страниц, sd
— папка спулинга.
Для того, чтобы демон lpd автоматически запускался при запуске операционной системы, выводил подробную информацию о выполняемых действиях в лог /var/log/lpd-errs
и не открывал сокет для приема заданий от других компьютеров, нужно добавить в файл /etc/rc.conf
следующие строки:
lpd_enable="YES" lpd_flags="-ls"
На этом настройка штатной системы печати FreeBSD заканчивается. Можно запустить демон lpd командой /etc/rc.d/lpd start
, а затем запросить его состояние командой /etc/rc.d/lpd status
. Если последняя команда выдаст сообщение: lpd is running as pid
…, все нормально, если же – lpd is not running
, Вам следует найти и устранить ошибки в файлах конфигурации. Для финальной проверки свеженастроенной системы следует воспользоваться командой lptest 20 5 | lpr
, в результате выполнения которой в левом верхнем углу листа должен напечататься вот такой текст:
!"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456 $%&'()*+,-./01234567 %&'()*+,-./012345678
На всякий случай следует отметить, что список возможных проблем, а также методов их устранения имеется в разделе Выявление проблем хендбука.
Заключение
Выполнив действия, которые описаны в этой заметке, Вы сможете без каких-либо проблем печатать на сетевой принтер из браузера Mozilla Firefox и почтового клиента Mozilla Thunderbird, приложений KDE 3.5.x и OpenOffice.org, а в случае необходимости использовать стандартные команды штатной системы печати FreeBSD, подробное описание которых имеется в разделе Использование принтеров хендбука.
Не знал о такой возможности, спасибо!
хех. а вот как осилить печать через epdfview
установлен в минималке
Не сталкивался 🙁
FreeBSD 9.0-RELEASE
Все настроил как написано, запускается без ошибок,статус в норме, отправляю на печать, ноль реакции.
Ошибок тоже не выдает. На машине с WinXP открыт доступ к HP LJ P1566.
Недавно пытался запустить HP LJ2055d через lpd, тоже ничего не получилось. Пришлось ставить CUPS с hplip. Если есть время и желание, попробуйте состыковать hplip с lpd, если нет, переходите на CUPS 🙁
А на Windows XP никаких ошибок не видно? Хоть задания-то в очереди появляются? Ведь они либо доходят, либо НЕ доходят.
Вообще эти вещи надо тестить из коммандной строки, а в /etc/printcap можно добавить строчку:
:lf=/var/log/lpd-errs
чтобы туда отчёт об ошибках писался. И просматривать его в реальном времени (одновременно отправляя из другого терминала задания
на печать из коммандной строки):
tail -f /var/log/lpd-errs
Вы мне глаза открыли, или думали, что я про логи не догадывался раньше? 😀
Да это я не вам, а юзеру Account. Из его поста не ясно, знает ли он про логи и тд…
Да понятно. После фильтров для lpd про логи как-то неразумно. А вообще, я не знаю, как люди берутся за Фрю, не зная про логи 🙂
🙂
Буду считать, что вы пошутили про логи. Может конечно у меня опыта менее вашего и хозяина ресурса, но какой никакой опыт имеется.
По существу, так же не было времени разбираться, а посему выход был как и у хозяина ресурса.
Народ, не ругаться
Лог lpd действительно не позволяет понять, где косяк, если нет ошибок в настройках, и принтер не поддерживается.
В
/var/log/lpd-errs
стандартное сообщение о том, что получено pint job, в XP тишина. Задание висит в очереди BSD, ни ответов ни приветов…Да, печать из FreeBSD на Windows-принтер есть интереснейшая тема !!
…А я-то пошёл обходным путём и настроил печать с использованием фильтров, которые отсылают задания на расшаренный Windows-принтер с использованием smbclient.
В этом случае
/etc/printcap
выглядит так:lp|samsung|Samsung ML-2950 Samba printer:
:lp=/dev/null:
:if=/usr/local/libexec/samba-if:
:sd=/var/spool/output/lpd:
:lf=/var/log/lpd-errs:
:sh:mx#0:
Параметр
lp
в этом случае нельзя оставлять пустым, нужно поставить=/dev/null
, а вместо принтера/хоста поток перенаправляется в файл фильтра/usr/local/libexec/samba-if
следующего содержания:#!/bin/sh
gs -dSAFER -dNOPAUSE -q -sDEVICE=pxlmono -sOutputFile=- -
| smbclient "//VLAD/Samsung_ML-2950" -c "print -" -N && exit 0
Командная строка ghostscript в данном случае выбрана для принтера PCL6 и позаимствована мною из PPD файла для соответствующего принтера. Она преобразует PostScript в PCL6, соответственно. Как я понял, openprinting драйвер для вашего принтера тоже использует GS, так что по идее возможно вычислить нужную командную строку.
Спасибо. Я думал, что с новыми принтерами только CUPS. Про фильтры читал, но так глубоко не заморачивался 🙂
Ха-ха, да я бы и сам не стал заморачиваться, да что-то припёрло 😉 ну и решил добить. Он в общем-то и с CUPSом печатал нормально…
Да ведь CUPS-то в принципе делает кучу манипуляций и в конечном счёте использует коммандную строку вроде вышеуказанной. И ради этих нескольких строк нужны многие мегабайты установленых файлов и скриптов… вот это-то меня и задело. Ведь от него не всегда добьёшься, чтобы всё работало, и порой не знаешь, где и искать-то — так много всего.
А если поковыряться в PPD файлах или исходниках линукс-драйверов для нужных принтеров, то всё сведётся в конечном счёте к отысканию нужных параметров коммандной строки для Ghostscript…
Согласен. Просто разок в одном филиале (в другом городе) старый принтер умер, подключили новый на тот момент HP LaserJet 2055d, а он с lpd никак без танцев с бубном. Времени разбираться не было, Гугл быстро нашел нужный PPD-файл, поэтому быстренько поставил CUPS…