使用 Fleet 为 Android 设备添加打印支持:部署打印服务应用的完整指南
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
在 Android 生态中,MDM 无法像桌面平台那样"安装一台打印机"——Android 的打印能力完全依赖于一个能够自行发现网络中打印机的打印服务应用。本指南基于 Fleet 的 deploy-printers-on-android.md 官方指南,结合仓库源码与配置文档,完整讲解如何通过 Fleet 的自助服务(Self-service)机制把 Mopria、HP、Brother、Canon、Epson 等打印服务应用分发到 Android 设备,并覆盖前提条件、UI 与 GitOps 两种操作方式、验证方法及常见故障排查。读完本文,你将掌握在 Fleet 中为 Android 主机添加打印支持的全部实操细节,并能理解其背后的 Android Management API 限制。
Android 打印的工作原理:为什么是"部署应用"而非"安装打印机"
在开始配置之前,需要先理解 Android 与桌面平台的根本差异。macOS、Windows 和 Linux 上,MDM 可以直接下发打印机配置(如通过 CUPS、IPP 驱动或配置描述文件);而Android 没有"安装单个打印机"的概念——无论是通过 Fleet 还是任何其他 MDM 都无法做到。Android 的打印依赖打印服务应用在本地网络中发现打印机,因此部署这个打印服务应用就是整个任务的全部。
注意:Android Management API 确实提供了一个
printingPolicy设置,但它只能整体地允许或禁止打印,并不能配置或安装某台具体的打印机,因此对"添加打印机"这个需求没有帮助。Fleet 服务端在接入 Android 设备时对接的正是 Android Management API 目录下的实现),所以在 Fleet 中同样不存在"指定一台打印机"的配置入口。
前提条件
在开始部署前,需要满足以下条件:
- 已启用 Android MDM 的 Fleet 实例,并且有 Android 主机成功 enroll。若尚未启用,可参考 android-mdm-setup.md 完成 Android MDM 配置。
- 管理员或维护者(Admin or Maintainer)权限:操作目标 fleet 需要相应角色权限。
- Fleet Premium(按需):如果需要用标签(labels)将应用限定到部分主机,需要 Fleet Premium;如果只做全量自助分发,Free 版即可覆盖。
- 打印服务应用:使用打印机厂商自带的打印服务应用,或者使用Mopria Print Service(包名
org.mopria.printplugin)获得广泛的打印机兼容性。
选择建议:厂商应用 vs Mopria。当打印机厂商提供官方打印服务插件且设备支持时,厂商应用通常是比 Mopria 更优的选择——它可以暴露通用打印服务无法提供的功能,例如装订选项(finishing options)、墨量显示等。以下是常见的厂商打印服务应用:
| 打印机品牌 | 应用名称 | 包名(app ID) |
|---|---|---|
| 通用(多品牌) | Mopria Print Service | org.mopria.printplugin |
| HP | HP Print Service Plugin | com.hp.android.printservice |
| Brother | Brother Print Service Plugin | com.brother.printservice |
| Canon | Canon Print Service | jp.co.canon.android.printservice.plugin |
| Epson | Epson Print Enabler | com.epson.mobilephone.android.epsonprintserviceplugin |
通过 Fleet UI 添加打印服务应用
在 Fleet 管理界面中,添加 Android 应用商店应用的步骤如下:
- 进入Software页面,在 fleets 下拉框中选择目标 fleet。
- 选择Add software > App store。
- 选择Android平台,然后输入应用 ID(即上表中的包名)。
- 添加完成后,在应用详情页选择Actions > Edit software,勾选Self-service。这样该应用会出现在终端用户的受管 Google Play Store中,由用户自行安装。
关于应用 ID 的校验:从源码测试 server/service/integration_android_software_test.go 可以看到,服务端在
POST /api/latest/fleet/software/app_store_apps时会做多层校验:
- Android MDM 尚未开启时添加 Android 应用会返回
400 Bad Request;- 不符合格式的应用 ID(如
thisisnotanappid)会返回422 Unprocessable Entity,错误信息为 "Application ID must be a valid Android application ID";- 缺少平台字段、或应用在 Play Store 中不存在(模拟 404)时同样会失败;
com.fleetdm.agent等 Fleet Agent 包名会被明确拦截("The Fleet agent cannot be added manually"),防止误操作。这些校验逻辑保证了只有真实、有效的 Play Store 应用才能进入 Fleet 的软件清单。
关于"自动安装"的限制
Fleet 目前尚不支持对 Android 应用进行自动推送安装(即无需终端用户操作、静默推送到所有主机的安装方式)。官方仓库中有一个 跟踪 issue(#36424) 记录该能力的进展。在此之前,自助服务(self-service)是无需逐台设备手动安装、又能批量触达所有主机的唯一途径——这也正是本文推荐勾选 Self-service 的根本原因。
从源码测试 TestAndroidAppsSelfService 还可以看到:添加 Android 应用时,服务端会把self_service强制置为true(测试中通过直接查询vpp_apps_teams表验证了这一行为),进一步印证了 Android 平台目前只有自助服务这一条分发路径。
通过 GitOps 声明式管理打印服务应用
Fleet 的最佳实践是使用 GitOps 方式管理配置。如果你已经用fleetctl+ YAML 管理 fleet,可以在软件段中添加如下配置:
software: app_store_apps: - app_store_id: "org.mopria.printplugin" platform: android self_service: true这段配置的含义是:把 Mopria Print Service 添加到指定 fleet 的软件清单中,平台限定为 Android,并以自助服务方式开放给终端用户。
关于app_store_apps的字段细节,可参考仓库中的 docs/Configuration/yaml-files.md:
app_store_id:应用商店应用的 ID。Android 应用 ID 即 Play Store 链接?id=后面的包名,例如com.android.chrome。注意 Apple 应用 ID 必须用引号包裹并按字符串处理。platform:应用平台,可选darwin、ios、ipados或android。若省略且app_store_id是 Apple 应用 ID,则会为所有受支持的平台各添加一个应用;Android 场景下务必显式指定platform: android。self_service:是否允许终端用户从 Fleet Desktop 或受管 Play Store 自助安装。configuration.path:Android 应用的管理配置(managed configuration),JSON 格式,支持managedConfiguration与workProfileWidgets两项(来自 Android Management API 的 ApplicationPolicy)。auto_update_enabled/auto_update_window_start/auto_update_window_end:自动更新相关配置,仅支持 iOS/iPadOS 的 VPP 应用,Android 不适用。
另外需要注意:GitOps 更新 Android 应用的配置时,应用不会被重新安装,安装状态会显示为 "Pending",直到新配置被应用。
部署完成后的行为
一旦打印服务应用被安装并在设备上启用,网络中的打印机就会自动出现在 Android 的打印对话框中。Fleet 中不需要、也不存在针对单台打印机的设置——打印机发现完全由打印服务应用在本地网络完成。这也再次呼应了本文开头:部署应用即全部任务。
如果希望进一步了解 Fleet 中应用商店应用的完整管理能力(例如 Apple VPP 应用、Android 应用管理配置等),可阅读 install-app-store-apps.md;若需了解其他平台(macOS、Windows、Linux、iOS/iPadOS)的打印机部署方式,可阅读 deploy-printers-with-fleet.md。
验证部署结果
应用添加并安装后,按以下顺序验证:
- 在 Fleet 中打开该主机的Host details页面,进入Software标签,确认打印服务应用显示为已安装(installed)状态。
- 在主机上,从任意应用中打开打印(Print)选项,确认打印机出现在打印机列表中——这验证了打印服务应用确实发现到了网络中的打印机。
- 从主机打印一张测试页,确认打印链路真实可用,而不只是应用安装成功。
故障排查
应用已安装但打印机不出现
确认主机与打印机处于同一网络。包括 Mopria 在内的大多数打印服务应用都通过**本地网络广播(local network broadcast)**发现打印机。如果主机连接的是访客网络(guest network)或位于不同 VLAN,打印机将无法被发现。这是最常见的"装好了却看不到打印机"的原因。
打印机出现了但打印任务失败
部分厂商的打印服务应用需要先把打印机添加到Wi-Fi Direct或进入特定的配对模式。这类操作因打印机型号而异,请查阅该厂商对自家打印服务应用的设置说明,而不是统一套用 Mopria 的流程。
与 REST API 的衔接
除 UI 与 GitOps 外,Fleet 还提供 REST API 供程序化管理应用商店应用:
- 查询已添加的应用:
GET /api/v1/fleet/software/app_store_apps(需fleet_id查询参数) - 添加应用商店应用:
POST /api/v1/fleet/software/app_store_apps(body 中携带app_store_id、platform等字段)
完整参数与响应示例参见 docs/REST API/rest-api.md。对于批量、自动化的运维场景,可以通过该 API 将"添加打印服务应用"纳入自己的自动化流程。
小结
为 Android 主机添加打印支持,核心思路是通过 Fleet 分发一个打印服务应用,而非像桌面平台那样下发打印机配置。本文覆盖了从前提条件、应用选择(Mopria 或厂商插件)、UI 添加与 Self-service 开启、GitOps 声明式配置,到验证与故障排查的完整链路,并借助仓库源码与配置文档说明了背后的校验逻辑与 Android Management API 的能力边界。记住两个关键点:Fleet 目前仅支持 Android 应用自助安装,且打印服务应用与打印机必须处于同一本地网络才能被发现。
【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考