klink0v (klink0v) wrote,
klink0v
klink0v

Category:

Немного про AirPrint

Нарисовался тут у нас на работе недавеча один как бы помягче сказать... ммм... индивид и заявил, что желает печатать на принтере у секретаря напрямую со своего iPad-а. А поскольку этот индивид относится к высшему руководящему составу, отправить его сразу в пешее эротическое путешествие с подобными запросами не удалось. Пришлось разбираться как его удовлетворить.

Технология печати с i-устройств называется "AirPrint". Как водится, ничего нового Apple конечно же не придумала. Всё очень банально. Когда нужно что-то распечатать, iГаджет сначала запаковывает это "что-то" в PDF, потом ищет ближайший доступный принтер с поддержкой IPP и засылает всё это безобразие туда. Всё. Соответствено, задача разделяется на две части.


  1. Либо раздобыть где-то сетевой принтер с поддержкой IPP (как правило, все современные модели это умеют), либо научить винду расшаривать локальные принтеры по данному протоколу.

  2. Объяснить iГаджету как найти этот принтер. Это можно сделать двумя способами: при помощи mDNS либо DNS-SD.

А дальше уже начинаются варианты.

Сначала по первой части.

Если уже имеется принтер с гордой надписью "AirPrint" в спецификации, либо просто годный сетевой принтер с поддержкой IPP, либо достаточное количество бабла на приобретение оного, то первую часть задачи можно считать решённой. Если же нет, то идём вот сюда, скачиваем выдранную из какого-то яблопродукта готовую утилитку, которая превращает любой расшаренный на виндовом компе локальный принтер по IPP и заводим по инструкции. Единственное, понадобится создать какого-нибудь локального пользователя специально под печать, ибо анонимно расшаривать принтер утилитка не позволит. Тут особо ничего мудрого нет.

Теперь по второй части.

Если принтер и iГаджет находятся в одном сегменте сети второго уровня, то можно использовать обнаружение по mDNS. В случае "аппаратного принтера" не понадобится специально делать вообще ничего. В случае печати через виндовый комп, на последний придется установить Bonjour Services отсюда.

Если же сегменты разные, то придется изнасиловать DNS.

Для начала придумываем какое-нибудь имя для нового домена печати. Любое. Главное, чтобы оно не заканчивалось на "local". Я у себя сделал "i-print.lan". В этом новом домене нужно указать:


  • А-запись для каждого конкретного принтера, в которой фигурирует его IP-адрес;

  • SRV-запись для этого принтера, которая указывает на каком порту запущена служба IPP;

  • TXT-запись для этого же самого принтера, которая говорит какие сервисы этот принер умеет предоставлять (можно и нужно смотреть сетевым отладчиком, на время включив тестовый iГаджет в один сегмент с принтером);

  • PTR-записи для ресурсов "_universal._sub._ipp._tcp" и "_ipp._tcp", на которые ссылаются вышеупомянутые SRV и TXT-записи.

В качестве примера, вот моя зона "i-print.lan"



$TTL 180
@        IN SOA    ns.i-print.lan. foo.i-print.lan. (2014022707 8h 1h 4w 1h)
         7d      IN NS ns.i-print.lan.
;
ns   IN A 192.168.1.1
hp401 IN A 192.168.1.2
samsung IN A 192.168.1.3
;
hp401._printer._tcp IN SRV 0 0 631 hp401
samsung._printer._tcp IN SRV 0 0 631 samsung
;
hp401._printer._tcp IN TXT (  "txtvers=1"  "qtotl=1"  "rp=printers/HP401" "adminurl=http://hp401.i-print.lan:631/" "ty=HP 401 DN"  "product=(HP LaserJet M401DN)"  "transparent=t"  "copies=t"  "duplex=t"  "color=f"  "pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf" "URF=W8,SRGB24,CP1,RS600" )
samsung._printer._tcp IN TXT (  "txtvers=1"  "qtotl=1"  "rp=printers/Samsung" "adminurl=http://192.168.1.3:631/" "ty=Samsung 4600"  "product=(Samsung 4600)"  "transparent=t"  "copies=t"  "duplex=f"  "color=f"  "pdl=application/octet-stream,application/pdf,application/postscript,image/jpeg,image/png,image/urf" "URF=W8,SRGB24,CP1,RS600" )
;
_universal._sub._ipp._tcp       IN PTR hp401._printer._tcp
_ipp._tcp                       IN PTR hp401._printer._tcp
;
_universal._sub._ipp._tcp       IN PTR samsung._printer._tcp
_ipp._tcp                       IN PTR samsung._printer._tcp



Но и это ещё не всё. iГаджет по DHCP получает некий домен по умолчанию. Это можно посмотреть в его настройках, "Информация об устройстве". Там будет значится что-нибудь типа "mygadget.mycompany.com". Дык вот, берем домен "mycompany.com" и добавляем в него PTR-ссылки на "i-print.lan". Как-то так:





b._dns-sd._udp IN PTR i-print.lan.
lb._dns-sd._udp IN PTR i-print.lan.



Ну что, кто-нибудь ещё хочет настраивать у себя в сети AirPrint? То-то же!

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments