Нарисовался тут у нас на работе недавеча один как бы помягче сказать... ммм... индивид и заявил, что желает печатать на принтере у секретаря напрямую со своего iPad-а. А поскольку этот индивид относится к высшему руководящему составу, отправить его сразу в пешее эротическое путешествие с подобными запросами не удалось. Пришлось разбираться как его удовлетворить.
Технология печати с i-устройств называется "AirPrint". Как водится, ничего нового Apple конечно же не придумала. Всё очень банально. Когда нужно что-то распечатать, iГаджет сначала запаковывает это "что-то" в PDF, потом ищет ближайший доступный принтер с поддержкой IPP и засылает всё это безобразие туда. Всё. Соответствено, задача разделяется на две части.
- Либо раздобыть где-то сетевой принтер с поддержкой IPP (как правило, все современные модели это умеют), либо научить винду расшаривать локальные принтеры по данному протоколу.
- Объяснить 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? То-то же!