Создание службы 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 для доступа к вашему принтеру.

Другие вопросы по тегам