Создание службы Bonjour AirPrint на устройстве iOS
Итак, я понял, что для публикации (объявления службы) на устройстве iOS в качестве принтера я использую NSNetService и установил тип _ipp._tcp
,
Но чтобы быть признанным в качестве принтера AirPrint, необходимо:
- AirPrint использует IPP для управления печатью.
- AirPrint прослушивает mDNS (Bonjour/Avahi) для обнаружения принтера.
- AirPrint требует
_universal
подтип должен присутствовать в_ipp
Объявление, прежде чем он рассмотрит распечатку принтера. - AirPrint требует наличия дополнительной записи TXT, "URF", которая должна быть непустой, прежде чем будет рассмотрен список принтеров.
- Хотя этот формат URF (см. Ниже) представляется будущим вариантом для Apple, все текущие приложения с поддержкой AirPrint, похоже, отправляют данные печати в формате PDF.
- Если принтер защищен именем пользователя / паролем, демон iTunes/AirPrint отправит TXT-запись "air= имя пользователя, пароль".
Поэтому я пытаюсь выяснить, как опубликовать подтип и опубликовать запись TXT в NSNetService, чего я не смог сделать. У кого-нибудь есть идеи?
3 ответа
Поскольку вы даже не показываете начальную точку или заглушку своего кода, здесь есть другой совет: вы можете смоделировать действующее, работающее объявление службы AirPrint в вашей локальной сети LAN/WLAN, что позволит вашим клиентам iOS успешно печатать в существующий принтер (AirPrint или нет).
Требования: Mac с OS X.
После того, как вы это заработали, теперь вы можете использовать что-то вроде Wireshark или tcpdump
захватывать пакеты на проводе или в эфире, сохранять и анализировать их.
Затем начните кодировать свое собственное приложение и сделайте так, чтобы оно испускало те же пакеты, что и симуляция.
Известно, что следующее работает на OS X Yosemite (10.10.x).
Предполагая,...
- у вас Mac(книга) под управлением OS X,
- имя хоста этого Mac
mymac
, - его IP-адрес
192.168.111.111
, - на нем установлен общий принтер с именем
abcd
(НЕ обязательно должен поддерживать AirPrint!), и - общий ресурс принтера не требует аутентификации
DefaultAuthType none
в/etc/cups/cupsd.conf
),
... тогда вы можете сделать abcd
очередь доступна для клиентов iOS.
Чтобы проверить это, просто выполните следующую команду в окне Terminal.app (внимание, команда не вернется - если вы закроете окно Terminal.app, эффект от этой команды пропадет!):
dns-sd \
-P AirPrint-abcd \
_ipp._tcp,_universal \
local. \
631 \
mymac.local. \
192.168.111.111 \
pdl="application/pdf,image/urf" \
kind="document" \
priority="1" \
product="Model Name of my Printer" \
rp="printers/abcd" \
URF="DM3" \
Duplex="T" \
Color="T" \
note="Testing AirPrint via MacBook"\
txtvers="1" \
qtotal="1" \
printer-type="0x0480FFFC" \
printer-state="3" \
air="none" \
UUID="54321abc-1234-1234-abcd-1238e4babcd8"
Если это работает (как и должно быть), вы можете легко придумать сценарий или задание cron, которое выполняет эту команду (и позволяет запускать ее в фоновом режиме) каждый раз при загрузке Mac. Это оставлено в качестве упражнения для читателя.
(Вы можете выполнить эту же команду без изменений даже со второго, совершенно другого Mac, если первый Mac предоставляет общую очередь печати и все приведенные выше данные соответствуют настройкам первого Mac...)
Справочная информация:
dns-sd
Утилита командной строки предназначена как средство тестирования и разработки для всех, кто интересуется Bonjour, mDNS (многоадресная DNS) и DNS-SD (обнаружение служб на основе DNS). Это часть любой системы OS X с тех пор, как появился Bonjour.
-P
параметр для dns-sd
сделает Bonjour "прокси-объявление" в вашей локальной сети / локальной сети. Объявление расскажет потенциальным клиентам AirPrint следующую информацию:
- Устройство AirPrint доступно в вашем
.local.
домен. - Его имя
Airprint-abcd
, - Это может быть достигнуто через IP-адрес
192.168.111.111
и порт631
, - Используйте имя очереди печати
printers/abcd
напечатать на него. - Может использовать растровые документы PDF и URF.
- Не требует аутентификации.
- Он может выводить дуплекс и цветные документы.
Подробнее об этой утилите смотрите man dns-sd
, Для получения дополнительной информации см. Dns-sd.org и другие ответы.
Попробуйте эту статью, за ней легко следовать, и автор отвечает на сообщения в блоге: http://sybaspot.com/configuring-dns-to-share-bonjour-printers-across-subnets-and-vlans-including-airprint-for-ios/
По этой ссылке вы узнаете, как настроить avahi для доступа к вашему принтеру.