Пользователь
0,0
рейтинг
18 марта 2014 в 13:33

Администрирование → Как я сделал USB-МФУ беспроводным из песочницы

Вступление

Говорят, ребенку в школе понадобится цветной принтер и сканер. Да и самому хотелось уже на что-то поменять разваливающийся черно-белый лазерник 1996 года выпуска. Критериями выбора стали: цветность, лазерная технология (перерывы между печатью могут достигать месяцев), автоподатчик оригиналов для сканера и копира, автоматическая двусторонняя печать и Wi-Fi, чтобы поставить этот ящик в дальнем углу. По этим характеристикам подобралась какая-то громадина за 25+ килорублей, что показалось неразумным. И вдруг на работе выдали пару подарочных карт одного известного розового магазина, и пришло ощущение, что надо покупать. К сожалению, в его ассортименте было всего три лазерных МФУ с цветной печатью, ни один из которых не отвечал последним двум требованиям. Спустя два месяца аccортимент ничем не пополнился, а наоборот, сократился до двух позиций на всю Москву, и я решил взять то, что было в наличии и не на витрине.

Счастливчиком оказался HP Laserjet Pro 100 Color MFP M175a, без автоповорота страниц и с подключением только по USB. Кстати, он оказался не таким большим, как я ожидал, и не таким шумным, как пишут в отзывах.

Задача

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

Простой, но не подошедший мне способ — подключить его к роутеру, раздающему интернет в квартире и, возможно, имеющему порт USB. Этот способ подразумевает, что, во-первых, МФУ должен будет стоять в трехметровой дальности от роутера, во-вторых, роутер даст возможность только печати, а не сканирования тоже (на заводских прошивках).

Второй способ — купить некую коробочку за $35… … и надеяться, что она сможет делать то, что нужно, и вдруг будет совместима с Ubuntu на клиентской стороне. Представитель производителя охотно отвечает что-то невразумительное на замечательном китайском английском. Я надеяться на удачу не стал.

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

Софт

Реализаций существует несколько, но я сразу выбрал ту, что включена в ядро Linux, чтобы заранее избавить себя от каких-либо возможных лицензионных ограничений, платностей, невозможности что-то настроить и прочей зависимости. Называется usbip.

Железо

Можно было найти в шкафу старый D-Link, водрузить на него OpenWRT, но это было бы громоздко и с малой долей участия собственных рук, так что решено было поискать что-нибудь маленькое, всемогущее и недорогое.

Carambola
Размером со спичечный коробок, имеет на борту Wi-Fi, USB-host, 320 MHz MIPS-процессор, потребляет не более 1.5W, ОС OpenWRT, стоит 22 евро.

Raspberry Pi
размер 86х56, Wi-Fi придется докупать внешний и вставлять в USB, 700 MHz -процессор, много на плате того, что не будет использоваться, потребляет 3.5W минимум (700mA при 5V), ОС Linux на выбор, стоит 35 долларов США.

A13-OLinuXino-WIFI
размер 120х120, 1 GHz ARM-процессор, богатая периферия, ОС Linux, потребляет 4.2W (350mA при 12V), стоит 55 евро.

Cubieboard и его китайские аналоги
Похожи на предыдущий вариант.

ALIX от PC Engines
Мой давнишний фаворит, размер 100х160 или 152х152, 500 MHz i386-процессор, без встроенного Wi-Fi, ОС почти любая, потребляет 5W, стоит от 64 до 78 евро.

В результате по критериям размер-энергопотребление-стоимость с учетом достаточности функций был выбран первый вариант — Carambola.

Процесс

Поскольку подключить планировалось только USB и питание, необходимости в плате разработки и корпусе не было, заказал только сам модуль.

Консоль обнаруживается на TXD2-RXD2, 115000 8N1.
Для работы USB в режиме host на пин 21 надо подать 5V (сам модуль работает только на 3.3V), а пин 40 соединить с GND. Белый провод (D+) к пину 39, зеленый (D-) — к 38.
Производитель сообщил, что линии данных кабеля USB можно подключать к модулю напрямую, интернет подсказал, что в этом случае лучше не использовать hot plug, то есть подключать-отключать USB-устройства при обесточенном модуле. Мне это подходит — я собираюсь подключить МФУ раз и навсегда.
OpenWRT был предустановлен один из давнишних Bleeding Edge, я его сразу же обновил до стабильного 12.09 Attitude Adjustment через веб-интерфейс.
Затем в OpenWRT был установлен пакет usbip, который подтянул за собой необходимые модули ядра и утилиты. Осталось дописать пару строк в автозагрузку:
/usr/sbin/usbipd -D
/usr/sbin/usbip bind --busid=1-1
«1-1» я взял из вывода списка подключенных USB-устройств в консоли OpenWRT:
usbip list -l

На клиентской стороне Ubuntu 13.10. Модули ядра в системе присутствуют, для их автоматической загрузки необходимо их (usbip_core, vhci_hcd) добавить в /etc/modules
Userspace-утилиты, впрочем, отсутствуют. Не стоит ставить их из репозиториев, там версия 0.1.7-3, работать с версией 1.1.1 на OpenWRT не будет. Сделать можно следующим образом:
sudo apt-get install linux-sources
tar -jxf /usr/src/linux-source-3.11.0/linux-source-3.11.0.tar.bz2 
cd drivers/staging/usbip/userspace/
./autogen.sh
./configure
make
sudo make install
Теперь для подключения МФУ мне достаточно выполнить
sudo usbip attach --remote=192.168.2.16 --busid=1-1

Недостатки

Основной недостаток заключается в том, что соединение usbip-сервера и usbip-клиента — это соединение один-к-одному, то есть если один клиент подключил себе USB-устройство сервера, то другие уже не могут его себе подключить, пока оно не будет отключено первым. Для такого случая можно напрячься и написать страницу управления usbip в веб-интерфейсе OpenWRT, но мне это пока не грозит, МФУ будет использоваться только с одного рабочего места.
Еще недостатком может стать то, что, теоретически, скорость линка по Wi-Fi меньше, чем по USB-кабелю, но в моем частном случае данные при сканировании медленнее идут по кабелю, но это наверное мои локальные проблемы.

Планы на будущее

Сейчас питание модуля у меня осуществляется с помощью DC-преобразователя 12V в 5V и 3.3V:

Он громоздкий и сам занял бы отдельный спичечный коробок. Ему на смену едет из Китая DC-преобразователь 5V в 3.3V, вот такой:

Он совсем малыш и поместится в один спичечный коробок с Carambola (без пинов). Питаться все это станет от старенького телефонного зарядника.
Предел мечтаний — поместить этот коробок внутрь корпуса МФУ, вдруг там найдется местечко, да найти там внутри источник 5V, или по крайней мере еще место под преобразователь с AC 220V. Но на это я решусь только после окончания срока гарантийного ремонта.

Разработка и тестирование:


(Цвета проводков питания произвольны)

Результат

Через два дня после написания топика, быстро как никогда (за пару недель вместо обычных четырех-пяти) приехал из Китая преобразователь напряжения, теперь проект завершен:

Добавка в веб-интерфейс OpenWRT для освобождения USB-устройства: disik.ru/uploads/luci-usbip.tar.gz
@disik
карма
6,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (28)

  • +1
    Еще есть замечательные китайские wifi-роутеры на которые уже установили openwrt:
    image
    Да там надо повозится с прошивкой, и расширять не так удобно чем например TP-Link TL-MR3020 но стоимость 10$ с доставкой позволяет использовать его как wifi-usb-ethernet модуль для поделок на микроконтроллерах :)
    А Carambola где заказывалась? 22 евро это без доставки?
    • 0
      Покупал у производителя shop.8devices.com/
      Доставка из Литвы в Москву — 9 евро и 9 дней.
    • +1
      Ссылочку на роутер плиз
      • +1
        Да да, ссылку плиз, потому как я покупал такой на dx.com за 650 р. с доставкой в Челябинск. Любопытно где можно купить дешевле с доставкой.
      • 0
        Например, здесь www.ebay.com/itm/171262995576
        • 0
          Сапсибо!
  • +3
    Я на 100% уверен, что вы, как пользователь Ubuntu знаете про CUPS и Sane. Эти демоны имеются под openwrt.
    • +2
      Для работы этого МФУ необходима (по рекомендации hp) установка утилиты HPLIP, которая в процессе установки скачивает и устанавливает проприетарный «плагин», ожидает прямого подключения устройства по USB и в будущем участвует в процессе печати и сканирования. Это меня сильно напугало и я решил сразу найти решение, заменяющее именно USB-кабель.
      • 0
        Плагин можно пихать в устройство хоть с помощью cat. Создаете правило в udev на этот принтер и все.
  • +1
    Вместо usbip можете поставить sane и один из фронтендов для сканирования, а для печати p910nd. Все должно влезть в 32мб RAM.
    • 0
      Мне пока не ясно, на каком этапе используется проприетарный софт hp, как бы не пришлось его иметь в точке подкоючения USB. Но когда возникнет необходимость использования МФУ с нескольких устройств, я разберусь.
      • 0
        Вам не придется. Все ОС поддерживают протокол LPR, который p910nd реализует, так что проприетарные драйверы работать будут, только порт будет не USB, а TCP.
        • 0
          Спасибо, буду иметь в виду.
      • 0
        О, тут все сложно )
        Во-первых, sane практически не поддерживает МФУ от HP — считается, что это сделано в официальных драйверах — hplip. Вот тут указаны только LaserJet M1005 MFP, LaserJet M1120 MFP, LaserJet M1120n MFP.

        Во-вторых, вот список файлов из проприетарного пакета hplip-plugin: bb_marvell-x86_32.so bb_soapht-x86_32.so bb_soap-x86_32.so fax_marvell-x86_32.so hbpl1-x86_32.so hp_laserjet_1000.fw.gz hp_laserjet_1018.fw.gz hp_laserjet_p1005.fw.gz hp_laserjet_p1007.fw.gz hp_laserjet_p1009.fw.gz hp_laserjet_professional_p1102.fw.gz hp_laserjet_professional_p1566.fw.gz license.txt lj-x86_64.so plugin.spec
        bb_marvell-x86_64.so bb_soapht-x86_64.so bb_soap-x86_64.so fax_marvell-x86_64.so hbpl1-x86_64.so hp_laserjet_1005_series.fw.gz hp_laserjet_1020.fw.gz hp_laserjet_p1006.fw.gz hp_laserjet_p1008.fw.gz hp_laserjet_p1505.fw.gz hp_laserjet_professional_p1102w.fw.gz hplip-plugin-install


        Тут файлы двух видов — во-первых, сжатые прошивки принтеров (fw.gz), которые загружаются в момент, когда принтер появляется на шине USB, банальным cat /var/lib/my-fw/my_fw.fw > /dev/lp0 через udev. Вроде, в OpenWRT даже скрипты есть. Во-вторых, это динамические библиотеки под архитектуры i386 и 86_64. Как видно, MIPS тут нет ) Библиотеки нужны для обеспечения сканирования через sane, и, возможно, печати. По крайней мере, CUPS ругается на их отсутствие. Если это просто фильтры по типу foomatic-rip, то p910d заработает, но если библиотеки занимаются отправкой задания непосредственно на принтер, то без них ничего не получится, и придется пользоваться usbip (
  • 0
    Ему на смену едет из Китая DC-преобразователь 5V в 3.3V, вот такой:

    Линейный стабилизатор, преобразователем можно назвать с натяжкой
    • 0
      Я назвал его преобразователем, потому что он преобразовывает 5V в 3.3V. Да, он состоит из стабилизатора напряжения, конденсаторов, светодиода и его резистора.
  • 0
    del
  • 0
    За 3 т.р. можно купить такой чудесный девайз, по возможностям очень даже неплох, проверить бы в действии еще. Есть драйвера под Mac и Win, почему под Linux не сделали — непонятно :(
    www.iogear.com/product/GUWIP204/
  • 0
    Для windows такой фокус будет бесполезным, так понимаю?
  • 0
    Наверное вы не знали, что на роутерах Dlink есть технология Shareport для подключения USB-принтеров, сканеров и т.п.

    Бу роутер можно от 300 рублей взять
    • 0
      Системные требования (с сайта)
      • Windows® 2000/2003/XP/Vista® 32-бит

      Windows 8 не факт что поддерживается. Linux не поддерживается точно. Поддержка 64-bit не заявлена (хотя на FTP есть бинарники). Поддержка OS X не заявлена (бинарники тоже есть). В общем, вполне в стиле D-Link )

  • 0
    И не стоило так заморачиваться.

    Все это делается легко на MR3020.
    Очень распространенный роутер.

    Ставите в несколько кликов туда openwrt и ищи в пару кликов p9100d.
    После этого устанавливается принтер как локальный и в качестве порта используете стандартный TCP/IP порт.
    Указываете адрес роутера и порт 9100.

    Вуаля! миниатюрная коробочка — принт сервер готова.

    А стоит это добро сейчас около 800 рублей. Сопоставимо.
    • 0
      Вся идея была в том, чтобы «заморочиться», готовое решение — слишком неинтеренсно, это ж не работа, это для себя. К тому же вряд ли MR3020 побьет голую Carambola в размерах и энергопотреблении. Более того, я хочу обеспечить работу не только принтера, а МФУ вцелом, см. habrahabr.ru/post/216177/#comment_7414455
      • 0
        В принципе можно организовать на основе принт-сервера. Скажем Dlink DPR-2000/A1A.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.