Показаны сообщения с ярлыком CUPS. Показать все сообщения
Показаны сообщения с ярлыком CUPS. Показать все сообщения

вторник, 16 сентября 2008 г.

HP LaserJet 1020, принт-сервер и GNU/Linux

Виртуальная энциклопедия "Linux по-русски": новости, статьи, ссылки на материалы по операционной системе GNU/Linux.

Версия: 1.0

Автор: Андрей Василенко

Дата релиза: 14 сентября 2008 г.

Содержание:

Введение.

В этой статье я расскажу как подружить через сеть принтеры HP LaserJet линейки 10xx и операционные системы семейства GNU/Linux. Данный метод был опробован на Ubuntu Linux 8.04.1 и Debian Lenny (netinst).

Отмечу, что уже в этом случае есть небольшие различия в настройке, так что если у вас другой дистрибутив - будьте осторожнее и лучше не выполняйте непонятные для вас команды. Там, где команды для Ubuntu и Debian отличаются, я буду давать их отдельно.

О железе. Сам я пользуюсь маршрутизатором D-Link DI-704P, к которому подключёны компьютеры, а так же принт-сервер D-Link DP-301U, к которому в свою очередь и подключён наш источник проблем - лазерный принтер HP LaserJet 1020. Если у вас другая конфигурация и принтер 10xx, то этот способ всё-равно должен сработать. Но не ручаюсь за модель 1018: как я понял, он, будучи подучи подключённым к принт-серверу и управляемый специализированной программой PS Monitor под Windows, печатать всё-равно отказывается.

Итак, сначала обрисую проблему, а затем займёмся её решением, благо оно на самом деле довольно простое.

Почему мой не работает, когда соседский отлично печатает?

Это происходит потому, что наш принтер использует технологию WPS (Windows Printing System). Заключается она в следующем: маршрутизатор запросов печати принимает данные от приложений, которые хотят воспользоваться принтером, и перенаправляет их на провайдер печати. Провайдер печати преобразует передаваемые данные к виду, пригодному для передачи, принтеру (в т.ч. и по сети). Он же и возвращает необходимую информацию от принтера приложению, производя обратное преобразование. Так же в этой системе может существовать специальный монитор, следящий за работой принтера, исправляющий возникающие ошибки и выполняющий прочие функции.

В нашем случае не хватает как-раз такого монитора. Если конкретнее, то при включении наш принтер по большому счёту представляет из себя просто высокотехнологичный, но бесполезный кусок железа. В нём нет прошивки. Если подключение производится по USB, то вроде бы всё понятно: принтер определяется UDEV, после чего для него создаётся нода и выполняется специальное правило, подгружающее прошивку. Но как быть, если принтер физически не подключён к ПК? Выход есть. Рассмотрим процесс настройки принтера с самого начала.

Шаг за шагом.

Перво-наперво делаем бекап оригинальных файлов, с которыми будем работать.

P.S. Символ $ перед командой означает, что достаточно прав пользователя, а # - нужны полномочия администратора. Лучше используйте две сессии в терминале.

Ubuntu:

Debian:

Нам понадобится Common UNIX Printing System или, проще говоря, CUPS, а так же набор драйверов (на самом деле драйверов много больше, просто в этом пакете есть PPD для нашей линейки 10xx). Устанавливаем, соглашаясь с загрузкой зависимостей:

# apt-get install cupsys foo2zjs

Но, скорее всего, всё это уже установлено в вашей системе.

После этого запустите любой веб-браузер и откройте следующий адрес (подключение к Интернет не потребуется): http://localhost:631

Будет показана стартовая страница настройки CUPS. Далее по шагам (по завершении каждого жмите "Continue"):

1. Add printer

Введите (произвольно) название, место расположения и описание принтера соответственно.

2. Device for Printer

Из раскрывающегося списка выберите "LPD/LPR Host or Printer"

3. Device URI for Printer

Здесь нам предлагают указать полный LPD-адрес до принтера. Его можно узнать в веб-меню принт-сервера (по умолчанию это http://192.168.0.10) на вкладке "Home", раздела "Printer Status", после "Printer Name". Должно быть что-то вроде "PS-C6D4D2-U1". Таким образом, в зависимости от настроек принт-сервера, нужно ввести:

lpd://192.168.0.10/PS-C6D4D2-U1

4. Make/Manufacturer for Printer

В этом меню необходимо выбрать производителя и модель принтера. Мы используем имеющиеся у нас драйверы, так что в "Make" выбирем "HP", а после нажатия "Continue" отметим пункт "HP LaserJet 1020 Foomatic/foo2zjs (recommended) (en)". Нажмите "Add Printer".

После этого вас потребуют ввести имя пользователя, имеющего привилегии администратора (root) и пароль. Всё, основная часть настройки принтера позади. Теперь вы можете заглянуть, при необходимости, в раздел "Manage printers" главного меню настройки CUPS и обнаружить там свой принтер. Помимо всего прочего можно сделать данный принтер используемым по умолчанию, нажав на кнопку "Set As Default", а так же произвести его настройку в меню "Set Printer Options".

Если появились проблемы, то в Интернете есть уйма информации по "банальной" установке и настройке принтера под GNU/Linux и, думаю, читатель без труда её отыщет. В этом материале рассказывается не об этом.

Теперь настало время перейти к оживлению нашего принтера.

Первый вздох.

Итак, всё вроде бы настроено, но при попытке произвести пробную печать, воспользовавшись кнопкой "Print Test Page", получаем молчание, хотя если посмотреть в лог принт-сервера, то задание для печати там должно быть. Как уже писалось выше, на данный момент в принтере отсутствуют "мозги". Чтобы это исправить, нам будет нужна сама прошивка, в последствии немного модифицированная.

Загружаем прошивку:

# getweb 1020
Модифицируем для возможности загрузки "печатью", удаляем оригинал, после чего переносим прошивку на новое место:

Теперь, убедившись что принт-сервер и CUPS настроены верно, снова произведём тестовую печать, но в этот раз уже определённого файла (наверно уже догадались какого ;) ):

$ lp /usr/share/foo2zjs/firmware/sihp1020.dl

Принтер должен зашевелиться! Но ничего не печатать. С этого момента он обрёл разум и теперь может печатать что вы укажете, но до первой перезагрузки, после которой процедуру "печати" прошивки нужно будет повторить. На этом можно было бы и закончить, но рассмотрим как можно сделать процесс "оживления" более удобным, чтобы не требовалось каждый раз лезть в терминал.

Just for Fun.

1. Если не лень

Сделаем скрипт и иконку для него в главном меню (с картинкой только для Ubuntu, т.к. в пакет foo2zjs для Debian соответствующая gif'ка не входит). Начнём со скрипта. Создадим его и выставим права чтения и исполнения для всех пользователей ПК:

Следующая страшнющая с виду команда (всё это - одна строка) создаст ярлык запуска "Активация принтера" с изображением самого принтера и добавит его в меню "Приложения" - "Прочие":

Ubuntu:

Debian: Если боитесь испортить меню (у меня всё сработало), запустите

$ alacarte
входящий с состав обоих дистрибутивов или
$ gmenu-simple-editor
и создайте значок самостоятельно. Так же использование этих программ может понадобится для активации иконки, если вы добавите её командой.

Теперь у вас есть кнопка активации принтера, которую при желании можно вынести и на gnome-panel (в команду-скрипт добавлять не решился :) )

2. Если лень

Вариант для тех, у кого в аптайме не недели и месяцы, да и принтер включён не постоянно.

Здесь будет рассмотрено, как изменить один фильтр для CUPS, добавив запуск нашего скрипта после каждой подачи задания на печать, что избавит вас от специального тыканья по кнопке. Конечно, если вы много и часто печатаете, то этот вариант вас, полагаю, не устроит. Но для тех, кто не держит принтер постоянно в режиме готовности и не печатает тонны документов, он вполне подойдёт.

Проведя не очень большое, но достаточно нудное исследование, я обнаружил в своей системе скрипт-фильтр на Perl, который исполняется при каждой печати. Его-то и было решено модифицировать. Наше задание с прошивкой будет добавляться после основного. Хотя и после первой печати основное задание пропадает, а "печатается" только прошивка (конечно, если не была загружена до этого), но зато потом она будет подгружаться уже после основного задания, не задерживая его. Теперь рассмотрим как это реализовать.

Сначала идут такие же действия, как и в предыдущем варианте:

# echo -e "#! /bin/sh\n\nlp /usr/share/foo2zjs/firmware/sihp1020.dl" > /usr/bin/hploader # chmod 0775 /usr/bin/hploader

Но затем никаких значков создавать не будем, а просто добавим в тот самый скрипт пару строк:

# sed -i -e '/#!\/usr\/bin\/perl/ a \$cmd="hploader";\nsystem $cmd;' /usr/bin/foomatic-rip

Теперь можете произвести пробную печать и в случае успеха перейти к Заключению :)

Заключение.

Автор статьи искренне надеется, что его труд не прошёл даром и помог читателю. Если же вас постигла неудача - не отчаивайтесь. Внимательно повторите шаги, попробовав сделать что можете "вручную" (всякое возможно, в т.ч. дистрибутивно-специфические отличия), предварительно подчистив то, что насоздавали и восстановив файлы из заблаговременно созданного бекапа:

$ sudo -i
или
$ su
потом
# export USER=<имя вашей учётной записи, например vasya>

Ubuntu:

Debian:

Если возникли вопросы или хотите что-то уточнить/дополнить, то свяжитесь со мной по электронной почте. Удачи!

Текст документа распространяется под лицензией GNU Free Documentation Licence