CUPS 打印机配置指南:从开发板到局域网打印

张开发
2026/4/10 17:56:22 15 分钟阅读

分享文章

CUPS 打印机配置指南:从开发板到局域网打印
1. 为什么要在开发板上折腾CUPS一个真实场景的引入你可能和我一样最开始也觉得在开发板上搞打印机有点“奇怪”。一块小小的板子跑着Linux连上打印机听起来像是极客的玩具。但实际工作中这种需求还真不少。比如我手头有个项目需要在一个部署在仓库角落的树莓派上实时打印发货单又或者你想把家里那台老旧的USB打印机变成网络打印机让全家人的电脑、手机都能用但又不想专门开着一台电脑做打印服务器。这时候一块功耗低、24小时开机的开发板就成了绝佳的选择。而CUPS就是实现这个目标的“瑞士军刀”。它的全称是Common UNIX Printing System顾名思义它是Unix/Linux世界里的打印标准。简单理解CUPS就是一个运行在后台的“打印管家”。它负责接收来自各种应用程序的打印任务然后和你的打印机“对话”把任务翻译成打印机听得懂的语言比如PCL、PostScript最后送出去打印。更厉害的是它自己就带了一个管理后台一个网页你不需要在命令行里敲一堆晦涩的命令通过浏览器点点鼠标就能添加打印机、管理打印队列非常方便。所以这篇文章就是带你一步步走通这条路在一块运行Debian或Ubuntu的开发板比如树莓派、香橙派、NanoPi上安装配置CUPS把它变成一个局域网打印服务器。无论你的打印机是USB直连开发板还是本身就有网络功能都能搞定。我会把我在多个项目里踩过的坑、试出来的最佳实践都分享给你保证你跟着做半小时内就能让打印机“吐”出第一张测试页。2. 准备工作给开发板“体检”与安装CUPS在开始动手之前我们得确保开发板的状态是健康的。首先用SSH或者直接接上显示器键盘登录到你的开发板系统。我假设你已经有一个运行着Debian或Ubuntu包括Raspberry Pi OS的板子了。第一步先更新一下软件源列表确保我们能安装到最新的软件包。打开终端输入sudo apt update这个命令会从软件源服务器获取最新的软件包列表信息就像去超市前先看看最新的商品目录。接下来就是安装主角CUPS以及它的好搭档cups-client。cups-client提供了一些命令行工具比如lp、lpstat后面我们会用到。sudo apt install cups cups-client -y这里的-y参数是自动回答“yes”省去我们手动确认的步骤。安装过程可能会花上几分钟取决于你的网络速度和开发板性能。安装完成后CUPS服务默认是没有启动的。我们可以先启动它并设置成开机自启这样即使开发板重启打印服务也不会中断。sudo systemctl start cups sudo systemctl enable cups现在CUPS服务已经在后台跑起来了。理论上你现在就可以在开发板本机的浏览器里访问http://localhost:631来打开CUPS的管理网页。但是对于没有图形界面的“纯命令行”开发板或者你想从局域网里别的电脑比如你的Windows/Mac主力机来管理就需要进行下一步关键的配置。3. 核心配置让CUPS在局域网中“现身”默认情况下CUPS出于安全考虑只允许从本机localhost进行管理。我们要修改它的配置文件允许来自局域网的访问。这个配置文件通常位于/etc/cups/cupsd.conf。在修改之前我强烈建议你先备份一下原文件这是个好习惯。sudo cp /etc/cups/cupsd.conf /etc/cups/cupsd.conf.backup然后用你喜欢的文本编辑器打开它比如nanosudo nano /etc/cups/cupsd.conf打开文件后你会看到很多配置项。别慌我们只需要关注和修改几个关键的地方。你可以用CtrlW搜索功能来快速定位。首先找到监听地址的部分。搜索Listen。默认可能只有Listen localhost:631或Listen /run/cups/cups.sock。我们需要让CUPS监听所有网络接口这样局域网内的其他设备才能访问。修改或添加如下行Listen *:631这行配置告诉CUPS在所有网络接口的631端口上监听连接。631是CUPS的标准端口。其次找到访问控制的部分。这是配置的重点决定了谁能访问管理页面。搜索Location /这个标签定义了根目录的访问权限。通常你会看到类似下面的内容Location / Order allow,deny Allow localhost /Location我们需要把Allow localhost修改为允许我们局域网网段的IP。假设你的开发板IP是192.168.1.100局域网网段是192.168.1.0/24那么可以改成Location / Order allow,deny Allow 192.168.1.0/24 /Location或者如果你想更宽松一点允许整个局域网但要注意安全可以直接用Allow all。但我不建议在生产环境这么做。接着配置管理页面的访问权限。继续向下翻找到Location /admin和Location /admin/conf等段落。这些是管理后台的路径同样需要修改Allow指令。例如Location /admin Order allow,deny Allow 192.168.1.0/24 /Location最后启用Web管理界面。搜索WebInterface确保它的值是YesWebInterface Yes修改完成后按CtrlO保存再按CtrlX退出nano编辑器。现在需要重启CUPS服务来让配置生效sudo systemctl restart cups这时候你可以在局域网内的任何一台电脑的浏览器里输入http://[你的开发板IP地址]:631比如http://192.168.1.100:631就应该能看到CUPS的欢迎页面了。如果打不开请检查1. 开发板防火墙是否放行了631端口sudo ufw allow 6312. 开发板与你的电脑是否在同一个局域网可以互相ping通。4. 添加你的第一台打印机网页后台实战成功打开CUPS管理页面后点击顶部导航栏的Administration管理选项卡。第一次进入时它会要求你输入用户名和密码。这里需要输入的是开发板系统上具有sudo权限的用户名和密码比如树莓派默认的pi用户和它的密码。登录成功后我们开始添加打印机。点击Add Printer添加打印机按钮。第一步选择打印机连接方式。CUPS会扫描可用的打印机。你会看到几种类型Local Printers本地打印机通常指通过USB直接连接到开发板的打印机。如果你的打印机已经用USB线连好了并且开发板系统已经识别可以用lsusb命令查看它应该会出现在这里。Discovered Network Printers发现的网络打印机CUPS会自动发现局域网内支持IPPInternet Printing Protocol或BonjourmDNS协议的打印机。很多新型的无线打印机都支持。Other Network Printers其他网络打印机如果你的打印机有固定的IP地址比如办公室里的网络打印机你可以在这里手动指定支持AppSocket/HP JetDirect、LPD/LPR、IPP等协议。以最常见的USB本地打印机为例选中它点击Continue。第二步设置打印机名称、描述和位置。这里的信息可以随意填写主要是为了你自己好识别。比如名称Name可以填Office_HP_LaserJet描述Description填USB Connected HP LaserJet in Living Room位置Location填Home。勾选底部的Share This Printer共享此打印机这样它才能真正成为一个网络打印机。然后点击Continue。第三步也是最关键的一步选择打印机驱动。CUPS内置了海量的打印机驱动PPD文件。你可以在列表里寻找你的打印机品牌和型号。比如我的是一台老款的HP LaserJet P1106我就在列表里找到HP-HP LaserJet P1106。 如果列表里没有你的确切型号可以试试选择同一个系列的其他型号或者通用驱动比如HP LaserJet Series PCL 6或Generic PCL Laser Printer。很多时候是能用的。 如果实在找不到你就需要去打印机厂商的官网下载对应Linux的PPD驱动文件然后在这个页面选择Provide PPD File提供PPD文件上传你下载的文件。选好驱动后点击Add Printer。第四步设置默认打印选项。添加成功后CUPS会跳转到该打印机的设置页面。在这里你可以设置一些默认选项比如纸张大小默认为A4、打印质量、双面打印等。根据你的需求调整后点击Set Default Options设置默认选项。恭喜至此你的打印机已经成功添加到CUPS服务器了。你可以在Printers打印机选项卡下看到它。为了验证一切正常我们点击打印机名称进入其状态页然后点击Maintenance维护下的Print Test Page打印测试页。如果一切顺利你的打印机应该会“咔咔”地开始工作吐出一张印有CUPS标志和测试图案的纸张。那一刻的成就感绝对是命令行里的一行“OK”无法比拟的。5. 从客户端打印Windows、macOS和Linux怎么连现在服务器端配置好了局域网里的其他设备怎么用它来打印呢这比想象中简单。对于Linux/macOS客户端这些系统原生支持IPP协议。你几乎不需要额外安装任何东西。打开系统设置里的“打印机”或“打印与扫描”。点击“添加打印机”。系统通常会自动发现网络上的CUPS打印机。它可能会显示为IPP Printer或者[你的开发板主机名]。如果没自动发现选择“IP”方式添加协议选择IPP或Internet Printing Protocol (IPP)地址栏填写http://[你的开发板IP]:631/printers/[你的打印机名称]。注意这里的打印机名称就是你在CUPS网页里设置的那个如果有空格在URL里需要用%20代替或者直接用短名称。添加时系统可能会自动下载驱动也可能让你从列表中选择。选择和服务器端相同或兼容的驱动即可。对于Windows客户端Windows添加网络打印机也很方便。打开“设置” - “蓝牙和其他设备” - “打印机和扫描仪” - “添加设备”。如果没自动发现点击“手动添加”。选择“按地址添加打印机”。设备类型选择“Web服务设备”URL地址填写http://[你的开发板IP]:631/printers/[你的打印机名称]。点击“确定”Windows会尝试连接并安装驱动。它可能会从Windows Update拉取驱动也可能需要你手动从列表里选择型号。添加成功后在任何软件如记事本、Word、浏览器中点击打印选择这台网络打印机就可以像使用本地打印机一样使用了。所有的打印任务都会先发送到你的开发板CUPS服务器再由它排队处理发送给物理打印机。6. 命令行操控与状态监控高效管理之道虽然网页界面很方便但作为开发者掌握命令行工具能让你更高效特别是在写脚本或者远程管理的时候。CUPS提供了一套强大的命令行工具。最常用的就是lp和lpstat。查看打印机状态lpstat -p -d-p选项列出所有打印机的状态idle-空闲 printing-打印中 paused-暂停。-d选项显示当前系统默认的打印机是哪一个。设置默认打印机如果你的系统有多台打印机可以用lpoptions来设置默认打印机。lpoptions -d [你的打印机名称]例如lpoptions -d Office_HP_LaserJet通过命令行打印文件这是最直接的操作。假设你有一个PDF文件叫report.pdf。lp report.pdf这条命令会使用默认打印机打印该文件。如果你想指定打印机lp -d Office_HP_LaserJet report.pdflp命令还支持很多选项比如打印份数-n 2、打印页码范围-o page-ranges1-3等。查看和管理打印队列lpq这个命令会显示当前等待打印的任务队列包括任务ID、用户、文件大小、状态等信息。 如果你想取消某个打印任务首先用lpq找到任务ID比如是pi-12然后使用cancel pi-12我习惯在写完一个自动打印的脚本后用lpstat -r快速检查一下CUPS服务是否在运行scheduler is running然后用lpq看看任务有没有成功提交到队列。这些命令组合起来能让你对打印系统的运行情况了如指掌。7. 避坑指南我遇到的那些“坑”与解决方案在实际配置过程中不可能一帆风顺。下面是我总结的几个常见问题及其解决办法希望能帮你节省大量排查时间。坑1网页能打开但添加打印机时找不到USB设备。可能原因用户权限问题。CUPS服务默认以lp或cups用户运行它可能没有权限访问USB设备。解决方案将你的用户比如pi添加到lp和lpadmin组。sudo usermod -a -G lp,lpadmin [你的用户名]然后重启CUPS服务甚至重启开发板以确保组权限生效。重启后再在CUPS网页里刷新USB打印机应该就出现了。坑2打印任务提交成功但打印机毫无反应任务显示“已完成”或“已取消”。可能原因A驱动不匹配。这是最常见的问题。网页添加时选的驱动可能和你的打印机不完全兼容。解决回到CUPS管理页面找到这台打印机点击Modify Printer修改打印机在驱动选择步骤尝试换一个其他型号的驱动或者选择更通用的“Raw”驱动如果打印机支持PostScript或PCL可以尝试Generic PostScript Printer或Generic PCL Laser Printer。选择“Raw”驱动意味着CUPS不对文件做任何处理直接发送给打印机这要求你的应用程序如LibreOffice能生成打印机识别的数据。可能原因B打印机连接不稳定特别是USB。检查USB线是否插紧尝试换一个USB口。坑3从Windows客户端连接时提示“驱动程序无法使用”或连接失败。可能原因Windows无法自动找到合适的驱动或者CUPS服务器没有正确共享驱动。解决方案在Windows端手动添加打印机时当系统提示安装驱动不要让它自动搜索选择“从磁盘安装”然后手动指定一个你知道兼容的驱动比如你之前为这台打印机在Windows本地安装过的驱动inf文件。另一种方法是在CUPS服务器网页上确保打印机的Shared选项是勾选的并且尝试在CUPS的cupsd.conf中启用BrowseWebIF Yes选项如果存在这有助于广播打印机信息。坑4打印中文或特殊字符出现乱码。可能原因字体缺失或编码问题。这在打印纯文本文件.txt时尤其常见。解决方案尝试打印一个PDF或图片文件来测试如果这些文件正常那问题很可能出在文本编码上。对于文本打印可以尝试先将文本文件转换成PDF再打印。或者在CUPS的打印机选项里看看是否有与字符集Charset相关的设置确保其设置为UTF-8等兼容编码。配置CUPS就像搭积木每一步都有明确的逻辑。大部分问题都能通过日志找到线索。CUPS的主日志文件在/var/log/cups/error_log当你遇到疑难杂症时用sudo tail -f /var/log/cups/error_log命令实时查看日志同时进行打印操作观察输出的错误信息这是最有效的调试手段。

更多文章