Создание службы Bonjour AirPrint на устройстве iOS - PullRequest
4 голосов
/ 05 сентября 2011

Итак, я понял, что для публикации (анонса службы) на устройстве 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 ]

1 голос
/ 05 июля 2016

Поскольку вы даже не показываете начальную точку или заглушку своего кода, здесь есть другой совет: вы можете смоделировать действующее рабочее объявление службы AirPrint в вашей локальной сети LAN / WLAN, что позволит вашим клиентам iOSУспешная печать на существующем принтере (AirPrint или нет).

Требования: Mac с OS X.

После того, как вы все заработаете, теперь вы можете использовать что-то вроде Wireshark или tcpdump длязахватывайте пакеты по проводам или из эфира и сохраняйте и анализируйте их.

Затем начните кодировать свое собственное приложение и сделайте так, чтобы оно испускало те же пакеты, что и симуляция.


Известно, что следующие действия работают в OS X Yosemite (10.10.x).

Предполагается, что ...

  • у вас Mac (Book) под управлением 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 "прокси-объявлением" для вашей локальной LAN / WLAN.Объявление сообщит потенциальным клиентам AirPrint следующую информацию:

  • В вашем домене .local. есть устройство AirPrint.
  • Его имя Airprint-abcd.
  • Это может быть достигнуто через IP-адрес 192.168.111.111 и порт 631.
  • Используйте имя очереди печати printers/abcd для печати на него.
  • Может принимать PDF и URFрастровые документы.
  • Не требует аутентификации.
  • Может выводить дуплексные и цветные документы.

Подробнее об этой утилите см. man dns-sd.Для получения дополнительной информации см. dns-sd.org и эти другие ответы .

0 голосов
/ 13 января 2014

Попробуйте эту статью, за ней легко следить, и автор отвечает на сообщения в блоге: http://sybaspot.com/configuring-dns-to-share-bonjour-printers-across-subnets-and-vlans-including-airprint-for-ios/

0 голосов
/ 14 марта 2012

Эта ссылка рассказывает, как настроить avahi для доступа к вашему принтеру.

...