Следующим шагом после установки на DIR-620 прошивки dd-wrt и создания из него сетевого хранилища и торрентокачалки стало подключение сетевого принтера по USB. В принципе задача совершенно не сложная, исходные данные следующие:
- Роутер D-Link DIR-620 с прошивкой dd-wrt и подключенным к нему USB-хабом;
- Лазерный принтер Xerox Phaser 3140 (имеется штатный драйвер под *nix);
- Linux и Windows машины в локальной сети, которые должны печатать на сетевом принтере;
- Ресурсы роутера ограничены, следовательно использование демона печати CUPS возможно, но может быть проблематично.
При таких исходных данных логичной выглядит схема связи машин из локальной сети с принтером, подключенным к роутеру, при которой вся обработка заданий печати будет выполняться на самих клиентах (там же должны быть установлены драйверы принтера), а роутер займется простой переадресацией готовых заданий печати на принтер. Наряду с плюсом этого решения – экономией ресурсов роутера, есть и минус, который я пока не знаю, как победить – для просмотра оставшегося уровня тонера нужно печатать тестовую страницу.
Подключение принтера к роутеру с dd-wrt через USB
Для связи роутера с принтером я использовал распространённый демон печати p910nd – маленький и легкий, рекомендуется в том числе и для использования в embedded linux системах, к которым можно отнести dd-wrt. Демон связывает usb/lp0 порты с ipp очередью печати клиентов (своего обработчика очереди печати он соответственно не имеет).
ВАЖНО! Если на роутере используется прошивка с поддержкой SWAP из заметки D-Link DIR-620 и dd-wrt – бюджетный NAS и торрентокачалка – в ней отсутствует поддержка USB-принтеров в ядре. Соответственно нужно либо пересобирать ядро и затем упаковывать и заново устанавливать саму прошивку, либо собрать поддержку принтеров в виде модуля ядра и загружать его при старте роутера. Я выбрал второй путь, можно скачать готовый модуль поддержки принетров для версии ядра 2.7.23 под DIR-620, сохранить его на подключенном к роутеру внешнем носителе (я положил в директорию /opt/lib) и дописать в скрипт автозагрузки
insmod /opt/lib/usblp.ko
(после монтирования ФС, на которой хранится модуль). Проверить, что модуль загружен, можно командойlsmod
.
Затем необходимо проверить, что в веб-интерфейсе прошивки включена поддержка USB-принтеров: Services -> USB -> USB Printer Support -> Enabled.
Далее устанавливаем демон печати p910nd: ipkg-opt install p910nd
. После установки в директории /opt/etc/init.d будет создан скрипт для автозапуска демона – S95p910nd (кому интересно – цифры вида SNN в именах означают порядок запуска скриптов из этой директории). На всякий случай, параметры запуска демона такие: p9100d -f /dev/lp0 0 -t 5
.
Если все прошло успешно (модуль ядра загружен в память, демон печати запущен и работает), то при подключении к роутеру принтера в выводе dmesg
должны быть примерно такие строки:
<6>usb 1-1.3: new full speed USB device using dwc_otg and address 6
<6>usb 1-1.3: configuration #1 chosen from 1 choice
<6>usblp0: USB Bidirectional printer dev 6 if 0 alt 0 proto 2 vid 0x0924 pid 0x3CF4
Установка/подключение сетевого принтера на клиентах
Теперь нужно подключить принтер к клиентским машинам (драйвера должны быть установлены на них или будут установлены в процессе подключения принтера).
Установка принтера с использованием CUPS
Систему печати CUPS удобней всего на мой взгляд конфигурировать через ее штатный веб-интерфейс, по умолчанию доступный по адресу http://localhost:631. После настройки веб-интефейс при отсутствии необходимости в нём можно отключить, изменив значение в строке WebInterface конфигурационного файла (который доступен там же через меню Администрирование -> Редактирование конфигурационного файла) с Yes на No. Если для внесения изменений запрашиватся логин и пароль и в конфиге CUPS выставлено DefaultAuthType Basic, то логин и пароль те же, что у текущего пользователя системы.
Итак, заходим в Администрирование -> Добавить принтер, там выбираем AppSocket/HP JetDirect, на следующем шаге вводим socket://192.168.0.1:9100
(где 192.168.0.1 – адрес роутера), затем потребуется задать название принтера (при желании – и описание). Если CUPS обнаружит драйвр принтера (который к этому моменту должен быть уже установлен) – принтер будет подключен, можно печатать пробную страницу. Пользователям Ubuntu и его производных проще использовать встроенную программу работы с CUPS, которая позволяет установить драйвер в процессе подключения.
Установка принтера в Windows
Под Windows сетевой принтер подключается следующим образом (замечу, что все это я проделывал в WinXP и не знаю, совпадут ли названия настроек полностью с другими версиями ОС): Управление принтерам (Принтеры и факсы) -> Добавить новый -> Локальный принтер -> Порт 9100 (стандартный TCP/IP порт, если его нет – создать там же во вкладке ниже), затем выбор нужного драйвера и его установка, принтер создан. Теперь нужно зайти в свойства принтера на вкладку Порты, на ней – Настройка порта, указать IP-адрес роутера и протокол Raw. Настройка закончена, можно распечатать тестовую страницу!