资讯动态

使用 Fleet 跨平台部署打印机:macOS、Windows、Linux、iOS 与 Android 完整指南

发布时间:2026/9/17 18:41:38 来源:尧图企业网站定制
使用 Fleet 跨平台部署打印机macOS、Windows、Linux、iOS 与 Android 完整指南【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet本文是一份基于 Fleet 开源项目Open device management的跨平台打印机部署实战指南。Fleet 本身不提供打印队列管理功能但它允许你复用部署软件与系统设置时所用的脚本scripts与配置描述文件configuration profiles两套通道把打印机推送到 macOS、Windows、Linux、iOS、iPadOS 与 Android 主机上。读完本文你将掌握在 Fleet 中以自助安装Self-service脚本或固定配置描述文件方式部署打印机、为不支持 IPP Everywhere 的旧款打印机回退到厂商 PPD/驱动、以及在各平台上完成验证与排障的完整方法。核心思路用现成的软件分发通道部署打印机在 Fleet 中打印机本质上只是另一种设置。你可以使用与部署其他软件或系统设置完全相同的两种机制把打印机送达目标主机脚本Scripts以fleetd的脚本执行能力为载体适合需要用户自助选择打印机的场景如不同楼层的员工安装自己所在楼层的打印机。脚本可手动触发、按策略自动化policy automation执行或作为软件包被标记为 Self-service 供终端用户在 Fleet Desktop 的自助服务页选择。配置描述文件Configuration profiles通过 MDM 通道推送到主机适合整支 fleet 的所有主机都需要同一台打印机的固定场景不提供用户选择。选哪种方式取决于目标平台以及终端用户是否需要对打印机做选择平台推荐方式说明macOS自助脚本lpadmin IPP Everywhere或com.apple.mcxprinting配置描述文件描述文件方式一次只能有一个 Printing 载荷Windows自助脚本Add-Printer -IppURL或厂商驱动 脚本组合Windows 没有安装带厂商驱动的网络打印机的 CSPLinux自助脚本CUPSlpadmin依赖发行版上的 CUPS 客户端iOS / iPadOScom.apple.airprint配置描述文件只支持 AirPrint 打印机不能装驱动Android部署打印服务 App如 MopriaAndroid 没有安装单个打印机的概念开始之前前置条件无论目标平台是哪个请先确认以下前提Fleet 实例可用且目标平台上已有 enrolled 的主机。你拥有目标 fleet 的Admin 或 Maintainer权限。fleetd已开启脚本能力。对于开启 MDM 的主机脚本能力会自动启用否则需手动启用参见仓库文章 scripts.md 与 introducing-orbit-your-fleet-agent-manager.md。Fleet Premium付费版只有 Premium 才能把打印机放入自助服务或使用标签labels圈定目标主机子集。而按需运行脚本或通过策略自动化运行脚本在 Fleet Free 上同样可用。打印机的连接信息主机名或 IP 地址以及它打印到的队列名或资源路径resource path。macOS自助脚本 配置描述文件两种方案macOS 平台提供两条路线一条让终端用户在Fleet Desktop Self-service页面自助挑选打印机另一条用配置描述文件把固定打印机列表推给每一台主机。部署前请确认主机已 enrolled 且fleetd脚本已启用。方案一在自助服务中提供打印机将打印机添加为纯脚本包script-only package步骤在 Fleet 中进入Software选择目标 fleet点击Add software Custom package。选择包含下述脚本的.sh文件。在Advanced options下添加卸载脚本。勾选Self-service然后点击Add software。安装脚本使用lpadmin以 IPP Everywhere 的无驱动driverless模式添加打印机这覆盖了大多数现代网络打印机无需厂商 PPD#!/bin/sh PRINTER_NAMEFloor2-LaserJet PRINTER_LOCATIONFloor 2 PRINTER_URIipp://192.0.2.10/ipp/print /usr/sbin/lpadmin -p $PRINTER_NAME -L $PRINTER_LOCATION -E -v $PRINTER_URI -m everywhere -o printer-is-sharedfalse各参数含义-p指定队列名-L设置位置信息-E启用该队列-v给定设备 URI-m everywhere使用 IPP Everywhere 驱动-o printer-is-sharedfalse关闭共享。注意如果打印机不支持 IPP Everywhere需要先把厂商 PPD 暂存到主机上。做法是新增第二个软件包把 PPD 以.tar.gz归档形式携带安装脚本类似cp $INSTALLER_PATH/*.ppd /Library/Printers/PPDs/Contents/Resources/printer.ppd并设为自动安装。随后在打印机脚本里把-m everywhere替换为-P /Library/Printers/PPDs/Contents/Resources/printer.ppd。苹果主导的 CUPS 项目自 2018 年起就在推进以无驱动打印取代基于 PPD 的驱动因此 PPD 方式只应作为旧打印机的回退方案而非默认选择。卸载脚本#!/bin/sh /usr/sbin/lpadmin -x Floor2-LaserJet每台打印机重复一次上述流程使用不同的PRINTER_NAME和文件名。终端用户会在Fleet Desktop Self-service页面看到所有标记为自助服务的打印机按自己所在位置选择即可。在 GitOps 模式下可以直接以纯脚本包的形式添加脚本software: packages: - path: ../lib/macos/scripts/floor2-laserjet.sh display_name: Floor 2 printer self_service: true注意GitOps 目前没有为纯脚本包暴露卸载脚本字段。如果需要卸载脚本可以在软件包创建后从 Fleet UI 设置一次之后重跑 GitOps 不会移除它。提示打印机数量较多时可使用仓库中的生成脚本 docs/solutions/macos/scripts/generate-printer-install-scripts.sh 批量生成。它的用法是./generate-printer-install-scripts.sh printers.csvCSV 需要表头列name,location,uri,display_name脚本会为每台打印机生成一段安装脚本并同时输出对应的packages.yml条目self_service: true直接粘贴到 GitOps 配置即可slug 由name自动小写化得到。方案二用配置描述文件固定安装打印机适用于每台主机都需要同一台打印机、无需用户选择的场景用 iMazing Profile Creator或任何等效工具构建一个Printingcom.apple.mcxprinting载荷。仓库中提供了可直接参考的示例文件 docs/solutions/macos/configuration-profiles/printer.mobileconfig。以该文件为模板为每台打印机设置显示名、连接 URI 和 PPD。也可以跳过图形界面让 AI 编码助手生成并校验载荷。在 Fleet 中进入Controls OS settings Configuration profiles选择目标 fleet。点击Add profile上传.mobileconfig文件。仓库中的示例载荷结构如下节选关键部分PayloadType为com.apple.mcxprinting打印机列表位于UserPrinterList字典中每台打印机包含DeviceURI如ipp://TODO: PRINTER HOST OR IP/ipp/print、DisplayName、Location与PrinterLocked键。上传前把示例中的TODO占位符替换为真实值即可。警告苹果允许每台主机只有一个Printing 载荷。如果需要多台打印机请把全部打印机放进同一个描述文件而不是上传多个描述文件——否则第二次上传会替换第一次的打印机列表。注意配置描述文件目前会推送给所有目标主机因此无法像上面的自助脚本那样提供打印机选择。Fleet 官方正在规划自助服务配置描述文件tracking issue 见仓库changes/目录相关记录届时终端用户可以主动选择加入打印机描述文件而非被动接收推送。在 GitOps 中配置描述文件这样声明controls: apple_settings: configuration_profiles: - path: ../lib/macos/profiles/floor2-printer.mobileconfigWindowsIPP 无驱动脚本与厂商驱动两种路线Windows 平台不存在用 CSP 安装带厂商驱动的网络打印机的能力Universal Print 除外但它要求打印机注册到 Microsoft 365 服务。因此下述两种方式都使用脚本。用脚本部署 IPP 打印机大多数现代打印机支持 IPP。Add-Printer的-IppURL参数会直接在该 URL 上发现打印机并让 Windows 自行挑选驱动通常内置 Microsoft IPP Class Driver无需手动安装厂商驱动。添加为纯脚本包的步骤同 macOSSoftware Add software Custom package选择.ps1文件配置卸载脚本勾选Self-service。$printerName Floor2-LaserJet $printerUri http://192.0.2.10:631/ipp/print Add-Printer -Name $printerName -IppURL $printerUri注意-IppURL与-DriverName/-PortName属于Add-Printer两个互斥的参数集。不要混用——Windows 会在发现 URL 上的打印机后自行选择驱动。卸载脚本$printerName Floor2-LaserJet Remove-Printer -Name $printerNameGitOps 中同样是纯脚本包software: packages: - path: ../lib/windows/scripts/floor2-laserjet.ps1 display_name: Floor 2 printer self_service: true注意与 macOS 相同GitOps 暂不为纯脚本包暴露卸载脚本字段需要时从 UI 设置一次即可。需要厂商驱动时若打印机不支持 IPP或必须使用厂商驱动的完整功能则先安装驱动、再按驱动名引用打印机。驱动包是普通软件包software package不是纯脚本包因为它要携带真正的驱动文件从厂商获取驱动包。需要的是原始驱动文件包含.inf文件的文件夹而不是自解压安装程序。把文件夹压缩成.tar.gz。Software Add software Custom package选择该.tar.gz。在Advanced options中把安装脚本设置为下面这个然后Add software$infPath Get-ChildItem -Path $env:INSTALLER_PATH -Filter *.inf -Recurse | Select-Object -First 1 -ExpandProperty FullName if (-not $infPath) { Write-Host No .inf file found in driver package Exit 1 } pnputil /add-driver $infPath /install Exit $LASTEXITCODE这里用pnputil /add-driver把驱动放入 Windows 驱动存储区。驱动在测试主机上安装后在该主机运行Get-PrinterDriver拿到 Windows 实际注册的确切驱动名。厂商文档中的名字往往与这个字符串不一致。再添加第二个软件包——打印机本身按上面 IPP 打印机的同样步骤做成纯脚本包但脚本换成$printerName Floor2-LaserJet $printerIp 192.0.2.10 $driverName driver name from Get-PrinterDriver Add-PrinterPort -Name $printerName -PrinterHostAddress $printerIp Add-Printer -Name $printerName -PortName $printerName -DriverName $driverName卸载脚本$printerName Floor2-LaserJet Remove-Printer -Name $printerName Remove-PrinterPort -Name $printerName部署顺序很关键驱动包应设为自动安装确保先出现在每台目标主机上再让用户在自助服务中看到打印机只把打印机包标记为 Self-service驱动包不要标记。GitOps 中驱动是普通软件包托管在 Fleet 可下载的 URL 上打印机脚本是与它并列的纯脚本包software: packages: - path: ../lib/software/floor2-printer-driver.package.yml - path: ../lib/windows/scripts/floor2-laserjet-vendor.ps1 display_name: Floor 2 printer self_service: truelib/software/floor2-printer-driver.package.yml内容- url: https://example.com/drivers/floor2-printer-driver.tar.gz install_script: path: ../scripts/install-printer-driver.ps1注意Fleet 对用url:声明的软件包是直接下载而不是从仓库读取。请把驱动归档托管在 Fleet 能访问到的地方或者通过 UI 上传一次改用hash_sha256引用。Linux借助 CUPS 复用 macOS 思路大多数 Linux 桌面发行版使用 CUPS因此 Linux 的部署方式与 macOS 高度相似。前置条件里多一项主机上要装有cups-clientDebian、Ubuntu、cupsFedora、RHEL、Arch或对应发行版的 CUPS 软件包——它不是默认一定随系统安装的请先确认。添加为纯脚本包的步骤与前面一致安装脚本#!/bin/sh PRINTER_NAMEFloor2-LaserJet PRINTER_LOCATIONFloor 2 PRINTER_URIipp://192.0.2.10/ipp/print lpadmin -p $PRINTER_NAME -L $PRINTER_LOCATION -E -v $PRINTER_URI -m everywhere-m everywhere同样走 IPP Everywhere 无驱动打印。若打印机不支持则先以第二个软件包把厂商 PPD 以.tar.gz形式部署到/usr/share/cups/model/printer.ppd安装脚本类似cp $INSTALLER_PATH/*.ppd /usr/share/cups/model/printer.ppd自动安装再把脚本里的-m everywhere换成-P /usr/share/cups/model/printer.ppd。卸载脚本#!/bin/sh lpadmin -x Floor2-LaserJetGitOps 配置software: packages: - path: ../lib/linux/scripts/floor2-laserjet.sh display_name: Floor 2 printer self_service: true同样注意GitOps 暂不支持为纯脚本包配置卸载脚本字段。iOS 与 iPadOSAirPrint 配置描述文件iOS 和 iPadOS 不支持安装打印机驱动因此只对支持 AirPrint 的打印机有效。AirPrint 载荷的作用是向打印对话框填充一份 AirPrint 打印机列表它不会为不支持 AirPrint 的打印机添加支持。添加打印机构建AirPrintcom.apple.airprint载荷。仓库提供了示例文件 docs/solutions/ios-ipados/configuration-profiles/airprint.mobileconfig为每台打印机填写 IP 地址或主机名及资源路径即可。在 Fleet 中进入Controls OS settings Configuration profiles选择目标 fleet。点击Add profile上传.mobileconfig文件。与 macOS 的 Printing 载荷不同同一台主机可以接收多个 AirPrint 载荷所以多台打印机可以拆成多个描述文件分别推送。注意在 Fleet 的自助服务配置描述文件功能上线前该描述文件会推送给所有目标主机无法让用户按需选择。GitOps 配置controls: apple_settings: configuration_profiles: - path: ../lib/ios/profiles/floor2-airprint.mobileconfigAndroid部署打印服务 App 而非打印机Android 与上述所有平台都不同它没有安装单个打印机的概念通过 Fleet 或其他任何 MDM 都没有因为 Android 的打印完全依赖一个打印服务 App 自行发现网络上的打印机。因此整个任务就是部署这个 App。注意Android Management API 确实有printingPolicy设置但它只能整体允许或禁止打印不能配置或安装某台具体打印机对本需求没有帮助。选择打印服务 App通用选择Mopria Print Service应用 IDorg.mopria.printplugin对打印机支持面广。厂商 App 在打印机支持时通常是更优选择因为它能暴露泛用打印服务无法提供的特性如装订选项、墨量信息等。常见的有HP Print Service Plugincom.hp.android.printserviceBrother Print Service Plugincom.brother.printserviceCanon Print Servicejp.co.canon.android.printservice.pluginEpson Print Enablercom.epson.mobilephone.android.epsonprintserviceplugin添加打印服务 App在 Fleet 中进入Software选择目标 fleet点击Add software App store。选择 Android 平台输入应用 ID。添加后在Actions Edit software中勾选Self-service这样应用会出现在终端用户的受管 Google Play 商店中供其自行安装。注意Fleet 目前还不支持对 Android 做自动安装即把 App 直接推送到每台主机、无需用户操作。在跟踪 issue见仓库changes/目录相关记录完成之前自助服务是把 App 批量带到主机上的方式。GitOps 配置software: app_store_apps: - app_store_id: org.mopria.printplugin platform: android self_service: true打印服务 App 安装并启用后网络上的打印机会自动出现在 Android 的打印对话框中Fleet 侧不需要再做任何逐台打印机的配置。验证安装无论哪个平台都建议按三层逻辑验证Fleet 侧确认分发成功在主机Host details页查看对应标签页——脚本/软件包看Activity标签macOS/Windows/Linux 确认脚本或包安装显示成功状态描述文件看OS settings标签iOS/iPadOS 确认显示VerifiedAndroid App 看Software标签。主机侧确认队列存在macOS打开System Settings Printers ScannersWindows打开Settings Bluetooth devices Printers scannersLinux运行lpstat -p或打开发行版打印设置面板iOS/iPadOS从任意 App 打开Print对话框确认打印机出现在Printer列表Android从任意 App 打开Print选项确认打印机出现在列表中。打印测试页确认驱动和连接都真正可用而不仅仅是队列已创建。常见故障排查脚本执行成功但打印机没有出现macOS / Windows / Linuxlpadmin与Add-Printer都只负责创建队列即使连接 URI 错误也会返回成功。请对照打印机自身的网络设置页面核对 IP 地址、主机名与资源路径。打印机不支持 IPP EverywheremacOS / Linux-m everywhere会失败或队列装上后打印出乱码适用于较老的不支持 IPP Everywhere 的打印机。按上文方案先把厂商 PPD 暂存到主机改用-P指定 PPD 路径。The specified driver is invalidWindows 厂商驱动路线-DriverName里的驱动名与已安装驱动不完全一致。在主机上运行Get-PrinterDriver拿到 Windows 实际注册的确切名字使用该字符串而不是厂商打包时写的名字。描述文件没添加第二台打印机macOS每台主机只允许一个 Printing 载荷。如果你添加了第二个描述文件而不是把打印机加进现有载荷请删除第二个描述文件把全部打印机合并进同一个载荷。打印机没出现在打印对话框iOS / iPadOS确认打印机确实支持 AirPrint。许多网络打印机把 AirPrint 作为附加固件功能需要在打印机自身设置里打开。若完全不支持 AirPrint本载荷无效因为它只是列出 AirPrint 打印机而非安装驱动。描述文件已验证但打印机无响应iOS / iPadOS描述文件可以携带一个与打印机实际打印队列不匹配的资源路径而仍然成功安装。请对照打印机网络设置页核对 IP/主机名与资源路径。App 装上了但没有打印机出现Android确认主机与打印机在同一网络。包括 Mopria 在内的大多数打印服务 App 通过本地网络广播发现打印机若主机在访客网络或独立 VLAN 上打印机不会出现。打印机出现了但任务失败Android部分厂商打印服务 App 需要先把打印机加入 Wi-Fi Direct 或某种配对模式。请查阅厂商针对该 App 的设置说明因打印机而异。lpadmin: command not foundLinux主机上没装cups-client或cups。先安装它——既可作为前置软件包部署也可作为安装脚本的第一步——再运行lpadmin。仓库中的配套资源如果想继续深入以下仓库内文件可以直接参考或复用批量生成 macOS 打印机安装脚本与 GitOps 条目的工具docs/solutions/macos/scripts/generate-printer-install-scripts.sh输入 CSV 格式为name,location,uri,display_name。macOS Printing 载荷示例docs/solutions/macos/configuration-profiles/printer.mobileconfig。iOS/iPadOS AirPrint 载荷示例docs/solutions/ios-ipados/configuration-profiles/airprint.mobileconfig。配套概念文章scripts.md脚本能力、custom-os-settings.md配置描述文件的交付与校验、deploy-software-packages.md纯脚本包与软件包、install-app-store-apps.md应用商店 App 管理、android-mdm-setup.mdAndroid MDM 开启。总结Fleet 用一套统一的脚本与配置描述文件体系覆盖了 macOS、Windows、Linux、iOS、iPadOS 与 Android 六类平台的打印机部署需求。选择的关键只有两条平台决定用脚本还是描述文件是否需要终端用户选择决定用 Self-service 还是固定推送。对支持 IPP Everywhere 的现代打印机无驱动方案macOS/Linux 的-m everywhere、Windows 的-IppURL几乎零成本对旧款设备则按平台分别回退到厂商 PPDmacOS/Linux或厂商驱动Windows而 iOS/iPadOS 走 AirPrint 描述文件、Android 走打印服务 App 这两条不装驱动的路线。验证时务必打印测试页确认的是连接与驱动真正可用而不只是队列已创建。【免费下载链接】fleetOpen device management项目地址: https://gitcode.com/GitHub_Trending/fl/fleet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价