ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

使用 Fleet 为 iOS 与 iPadOS 主机下发 AirPrint 打印机配置

使用 Fleet 为 iOS 与 iPadOS 主机下发 AirPrint 打印机配置 使用 Fleet 为 iOS 与 iPadOS 主机下发 AirPrint 打印机配置【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本文是一份面向 IT 管理员的实战指南讲解如何在 Fleet 中通过 Apple 配置描述文件.mobileconfig为已纳入 MDM 管理的 iOS 与 iPadOS 主机批量添加 AirPrint 打印机覆盖前置条件、负载结构、Fleet UI 上传、GitOps 声明式下发、验证方法与故障排查并深入 Fleet 服务端源码说明配置文件“已验证Verified”状态背后的交付与校验机制。读完本文你将能独立完成从生成 AirPrint payload 到确认打印机可实际出纸的全流程。为什么 iOS/iPadOS 只能用 AirPrint payload 添加打印机与 macOS、Windows、Linux 不同iOS 与 iPadOS 不允许安装打印机驱动程序因此 Fleet 无法为这些平台下发任意打印机的驱动。唯一可行的路径是使用 Apple 的 AirPrintcom.apple.airprintpayload它向系统提供一份 AirPrint 打印机清单供系统打印对话框展示和连接。需要特别澄清的是这个 payload只负责“列出”支持 AirPrint 的打印机并不能让不支持 AirPrint 的打印机获得 AirPrint 能力。如果你的打印机本身不支持 AirPrint这个配置负载不会起到任何作用。关联阅读使用 Fleet 部署打印机 一文对比了各平台的做法——macOS 可用自服务脚本或配置描述文件、Windows 可用内置 IPP 驱动或厂商驱动、Linux 走 CUPS、Android 则是部署打印服务 App 而非单台打印机唯独 iOS/iPadOS 只能走本文的 AirPrint payload。前置条件开始之前请确认满足以下条件一个 Fleet 实例且已有 iOS 或 iPadOS 主机完成 MDM 注册enroll。对目标 Fleet 拥有Admin管理员或 Maintainer维护者权限。若需要将配置只下发到部分主机例如按楼层、按部门的 label 定向需要Fleet Premium免费版只能全量下发到整个 team。每台目标打印机的IP 地址或主机名hostname以及它的resource path资源路径。开始配置前请务必确认打印机确实支持 AirPrint。理解 AirPrint payload 的结构Fleet 仓库在 docs/solutions/ios-ipados/configuration-profiles/airprint.mobileconfig 提供了一个可直接套用的 AirPrint 配置描述文件示例其完整内容如下?xml version1.0 encodingUTF-8? !DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd plist version1.0 dict keyPayloadContent/key array dict keyAirPrint/key array dict keyIPAddress/key stringTODO: PRINTER IP ADDRESS OR HOSTNAME/string keyResourcePath/key stringTODO: RESOURCE PATH, e.g. ipp/print/string /dict /array keyPayloadDisplayName/key stringAirPrint/string keyPayloadIdentifier/key stringcom.fleetdm.airprint.airprint/string keyPayloadType/key stringcom.apple.airprint/string keyPayloadUUID/key stringA2E5F9B0-3D4C-4E7A-8F1B-2C9D6E4A7B22/string keyPayloadVersion/key integer1/integer /dict /array keyPayloadDisplayName/key stringAirPrint/string keyPayloadIdentifier/key stringcom.fleetdm.airprint/string keyPayloadType/key stringConfiguration/string keyPayloadUUID/key string9B3E7A5C-1F2D-4C6E-8A9B-3D5E7C1A9F44/string keyPayloadVersion/key integer1/integer /dict /plist对每台打印机需要填写AirPrint数组中的两个关键字段字段必填说明IPAddress是打印机的 IP 地址或主机名hostnameResourcePath是打印机上实际打印队列对应的资源路径例如ipp/print需与打印机自身网络设置页中显示的路径完全一致其余字段是 Apple 配置描述文件的通用元数据PayloadType内层负载必须为com.apple.airprint顶层容器为Configuration。PayloadIdentifier/PayloadUUID负载与描述文件的唯一标识示例中使用的是com.fleetdm.airprint命名空间下的固定值可自行更换为符合组织命名规范的标识符但需保证全局唯一。PayloadVersionpayload 版本号示例为1。PayloadDisplayName在设备上显示的名称。要给同一台设备下发多台打印机只需在AirPrint数组中追加dict条目每个条目一个IPAddressResourcePath组合。也可以准备多个独立的 AirPrint 描述文件分别下发。在 Fleet 中添加 AirPrint 配置文件方式一通过 Fleet UI 上传生成负载使用 iMazing Profile Creator 之类的 GUI 工具创建com.apple.airprintpayload为每台打印机填入 IP 地址/主机名与资源路径也可以直接以仓库中的 airprint.mobileconfig 为蓝本手工编写。如果跳过 GUI也可以让 AI 编码助手生成并校验 payload参考 Fleet 官方的 “Build and validate configuration profiles with AI” 指南。在 Fleet 中进入Controls OS settings Configuration profiles选择要下发到的 fleetteam。点击Add profile上传.mobileconfig文件并保存。与 macOS 的 Printing payload 不同Apple 允许向同一台主机交付多个 AirPrint payload因此你可以按楼层、按部门拆分成多个描述文件分别管理也可以把多台打印机塞进同一个 payload 的数组里两种方式都可行。注意在 Fleet 的自服务配置描述文件self-service configuration profiles跟踪于 Fleet 官方 issue #46834发布之前该描述文件会推送到每一个被定向到的主机无法由最终用户按需自行安装。方式二通过 GitOps 声明式下发Fleet 支持通过fleetctl gitops用 YAML 声明配置描述文件。在 GitOps 模式下AirPrint 描述文件在controls.apple_settings.configuration_profiles下列出controls: apple_settings: configuration_profiles: - path: ../lib/ios/profiles/floor2-airprint.mobileconfig关于这段 YAML 的更多细节可参考 docs/Configuration/yaml-files.md 中的apple_settings配置说明configuration_profiles是配置描述文件列表接受.mobileconfig/.jsonmacOS/iOS/iPadOS或.xmlWindows格式的文件。每个条目既可以用path:引用单个文件也可以用paths:配合 glob 模式例如../lib/ios/profiles/*.mobileconfig一次匹配多个文件文件名不得包含*、?、[、{这些字符使用path:时。默认情况下描述文件会下发到该 team 的全部主机如果只希望定向到一部分主机可以配合 label 使用labels_include_all命中所有指定 label 的主机、labels_include_any命中任一指定 label 的主机或labels_exclude_any排除命中任一指定 label 的主机这三个字段只能同时出现一个。例如只给“二楼”标签的主机下发楼层打印机controls: apple_settings: configuration_profiles: - path: ../lib/ios/profiles/floor2-airprint.mobileconfig labels_include_any: - Floor 2验证部署结果描述文件上传并推送后从两个层面进行验证在 Fleet 侧确认安装状态打开主机的Host details页面进入OS settings标签页确认该 AirPrint 描述文件的状态显示为Verified已验证。这里的状态反映的是 Fleet 服务端对该主机的 MDM 配置校验结果详见下一节。在设备侧确认可用性在主机上从任意 App 打开打印Print对话框确认目标打印机出现在Printer列表中然后实际打印一张测试页确认连接真正可用——配置文件“安装成功”不等于打印机“能出纸”这一步不能省。Fleet 是如何交付并“验证”配置文件的理解 “Verified” 状态从何而来能帮助你更准确地排查问题。在 Fleet 服务端这套机制由 server/mdm/apple/profile_verifier.go 中的 Profile verification 逻辑实现其核心流程如下Fleet 通过 MDM 协议向主机下发 InstallProfile 命令。命令入队后该主机上对应 profile 的校验状态被置为pending待处理。当主机通过 MDM 协议回报命令执行结果时Fleet 服务端解析结果并更新状态命令被确认acknowledged则进入verifying校验中若命令报错服务端会判断应重试重新入队 InstallProfile 命令还是直接标记为failed失败。当主机通过 osquery 上报 host details 时Fleet 会摄取主机上实际安装的 profile 清单与“该主机所属 team 应当安装的 profile 清单”逐一比对找到预期 profile 则置为verified已验证若某个预期 profile 缺失同样判断重试或标记为 failed。此外Fleet 服务端还有一个周期运行的 cron会为那些校验状态仍为 null尚未校验的 host profile 补发 InstallProfile 命令。触发安装命令的时机还包括主机新注册、主机更换 team、上传了新 profile、修改了既有 profile、重试失败 profile 等。简而言之“Verified” MDM 命令已被确认 osquery 上报的已安装 profile 与预期清单匹配。这解释了为什么有时 profile 显示验证通过打印机却连不上——那通常是负载内容IP/资源路径与打印机实际情况不符而非下发链路的问题。故障排查现象打印对话框中不出现目标打印机首先确认打印机确实支持 AirPrint。不少网络打印机把 AirPrint 作为可选固件功能需要在打印机自己的设置界面里手动开启。如果打印机根本不支持 AirPrint这个 payload 无济于事——它只负责列出 AirPrint 打印机而不是安装驱动。确认负载已成功下发对照上文的 OS settings 状态并确认主机的 iOS/iPadOS 版本支持 AirPrint 负载。现象profile 显示 Verified但打印机不响应对照打印机自身的网络设置页面核对 payload 中填写的IP 地址或主机名以及resource path。一个 profile 完全可以在 resource path 与实际打印队列不匹配的情况下成功安装——payload 只负责在打印对话框中“注册”这个条目路径对不对、队列存不存在只有发起打印时才知道。限制与边界AirPrint payload 只适用于 AirPrint 打印机iOS/iPadOS 无法安装任何打印机驱动。在 Fleet 的自服务配置描述文件功能发布前profile 会推送到每个被定向的主机用户无法自选。定向到部分主机label 作用域需要 Fleet Premium免费版仅支持按 team 全量下发。每个 payload 条目都需要填写IPAddress与ResourcePath两个字段二者都必须与打印机端实际情况一致才能正常出纸。如需了解 Fleet 如何交付和验证配置描述文件的通用机制可参阅 Fleet 官方的自定义 OS 设置指南在仓库中你还可以继续阅读 docs/Configuration/yaml-files.md 获取 GitOps YAML 的完整参数说明以及 server/mdm/apple/profile_verifier.go 了解验证状态机源码。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表