Wie sammelt der Mac Druckerinformationen (hauptsächlich Treiber), nachdem ein Drucker in der Liste der hinzuzufügenden Drucker ausgewählt wurde?

Wenn wir einen Drucker zu Mac hinzufügen möchten, gehen wir in den Systemeinstellungen zu „Drucker und Scanner“. Dort klicken wir auf die Schaltfläche „+“ und dann auf „Drucker oder Scanner hinzufügen“. In einem neuen Dialog mit dem Titel "Hinzufügen" sehen wir eine Liste von Druckern.

Wenn wir einen der Drucker auswählen: Drucker-x, sehen wir den Status: "Druckerinformationen werden gesammelt...". Und sein Treiber wird automatisch ausgewählt. Wie sammelt der Mac Druckerinformationen? Was ist dieser ganze Vorgang des Hinzufügens eines Druckers im Detail? Gibt es ein Tutorial / Artikel, der helfen kann? Ich habe die Google-Suche versucht, konnte noch nichts Interessantes finden.

Ich möchte eine Situation debuggen, in der der Mac manchmal einen Treiber für einen Drucker auswählt und manchmal nicht (für denselben Drucker). Erwartet, dass Fahrer sehen, dass es AirPrint gibt. Der Drucker wird von einem Druckserver hinzugefügt. Also, wollen Sie einen Blick darauf werfen, was im Hintergrund passiert.

Antworten (2)

Nachdem Sie sich den DNSCache und das Netzwerk genau angesehen haben:

Weitere Details auf dns-sd.org, aber kurz gesagt, damit alles richtig funktioniert, werden die folgenden vier DNS-Einträge für jeden Drucker im Falle von Airprint/Secure Airprint auf Client-Seite benötigt:

  • PTR-Eintrag vom Typ _universal._sub._ipp/ipps._tcp (nennen wir es universell): wird nur benötigt, wenn der Drucker airprint-kompatibel ist (siehe dns-sd.org)

  • PTR-Eintrag vom Typ _ipp/ipps._tcp (nennen wir es ipps)

  • SRV-Aufzeichnung

  • TXT-Eintrag

Der SRV-Eintrag gibt Auskunft über die dienstbezogenen Daten (Server/Port usw.) und der TXT-Eintrag gibt Auskunft über die Druckerfunktionen.

Auf dem Mac werden „ipps“- und „universal“-Einträge von unterschiedlichen Prozessen abgefragt (printtool bzw. PKBrowserServic). Aus Beobachtung: Abfragen von "universal"-Records durch PKBrowserServic sind häufiger als Abfragen von "ipps"-Records durch printtool. Also, in einem Szenario: Es hat universelle Aufzeichnungen, aber keine ipps, es wird den Fahrer nicht identifizieren.

Um die ursprüngliche Frage zu beantworten: Wenn ein Drucker ausgewählt wird, fragt er nach SRV- und TXT-Einträgen (basierend auf universellen oder ipps-Einträgen, die sich bereits im Cache befinden, so sehen wir den Drucker in der Liste). Wenn der Drucker/Druckserver nicht verfügbar ist oder der ipps-Eintrag fehlt, kann der Mac die automatische Auswahl für den Treiber nicht durchführen.

Dieses Problem kann in Multicast behoben werden, indem sowohl universal als auch ipps selbst abgefragt werden, bevor die TTL der Datensätze abläuft, sodass die Caches aller Mac-Clients aktualisiert werden.

Im Fall von Unicast hat der Mac eine hohe TTL von universellen/ipps-Datensätzen, daher kann es einige Zeit dauern, bis der ipps-Datensatz im Cache in einem neuen Netzwerk aktualisiert wird, aber in wenigen Minuten (maximal 10 Minuten nach der Beobachtung) hat er beide ipps und universell und das Thema existiert nicht mehr. Eine andere Möglichkeit, schnell damit umzugehen, besteht darin, den Cache zu löschen (sierra: killall -HUP mDNSResponder).

Wenn der Drucker IPP oder IPPS ( Internet Printing Protocol ) unterstützt , sendet macOS eine IPP-Abfrage an das Druckgerät, um nach allen unterstützten Funktionen zu fragen.

Basierend auf der Antwort des Geräts richtet es die Druckwarteschlange ein (durch automatisches Generieren einer PPD-Datei, PostScript-Druckerbeschreibung ), sodass die verfügbaren Auftragsoptionen in der Benutzeroberfläche des Druckdialogs aufgelistet werden.

Sie können diese Abfrage simulieren und die entsprechenden Antworten von Druckern mit Hilfe von zwei Befehlszeilenprogrammen sehen, die Sie vom Terminal aus starten können: ippfindund ipptool.

Erster Laufippfind

ippfind [ENTER]

Dadurch wird eine Liste aller IPP-fähigen Druckgeräte (oder freigegebenen CUPS-Druckwarteschlangen) in dem LAN und WLAN zurückgegeben, mit dem Sie verbunden sind. Die Liste enthält den IPP-Geräte-URI , der zur Adressierung des Druckgeräts verwendet werden kann.

Zweitens laufenipptool

Jetzt können Sie den im vorherigen Schritt gefundenen IPP-Geräte-URI verwenden, um eine Get-Printer-Attributes- Abfrage an das Druckgerät oder die Druckwarteschlange zu senden:

ipptool -t -v                 \
    <IPP-DEVICE-URI>          \
    get-printer-attributes.test

Sie können nun die Antwort auf die Anfrage in Ihrem Terminal sehen.