FreeBSD: Печать на сетевой принтер, подключенный к компьютеру с Windows

FreeBSD: Печать на сетевой принтер, подключенный к компьютеру с Windows Одной из важнейших задач, связанных с интеграцией десктопа с 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, подробное описание которых имеется в разделе Использование принтеров хендбука.

Понравилась статья?

 Подпишитесь на RSS или почтовую рассылку;

 Присоединяйтесь в Twitter, Facebook, Google+, VK;

 Поделитесь ссылкой в социальной сети или блоге:

16 комментариев к “FreeBSD: Печать на сетевой принтер, подключенный к компьютеру с Windows

  1. 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, ни ответов ни приветов…

  2. Да, печать из 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…

Оставить комментарий