最近接连帮几家单位做信创终端的打印环境收尾,发现一个普遍现象:图形界面点点点配单台还行,一旦要在几十上百台麒麟、统信 UOS 终端上铺开,光靠"设置-打印机-添加"这套点鼠标的流程就顶不住了。我自己的做法是回到 CUPS 命令行,把添加、设默认、共享、测试这几步脚本化。这篇就把我常用的命令和踩过的坑捋一遍,纯实操,能直接抄。

测试环境我用的是麒麟桌面操作系统 V10(arm64)和统信 UOS 桌面版,打印机是一台 A4 黑白激光网络机,挂在 192.168.1.50。命令在两套系统上基本通用,差异我会单独点出来。

先把 CUPS 跑起来

信创桌面系统大多基于 deb 包管理,CUPS 一般预装了,但服务不一定起着。先确认一下:

systemctl status cups
# 没装就补一个
sudo apt install cups cups-client
# 开机自启 + 立即启动
sudo systemctl enable --now cups

服务起来后,CUPS 的本地管理端口是 631。如果你打算后面做共享或者远程管理,记得防火墙放行:

sudo ufw allow 631/tcp

这里第一个常见坑:麒麟服务器版有些用的是 firewalld 而不是 ufw,命令要换成 firewall-cmd --add-port=631/tcp --permanentreload。桌面版基本是 ufw,照上面来就行。

找到设备和驱动

加打印机之前,先看系统认不认得它,以及有没有现成驱动。两条命令:

# 列出能识别到的设备 URI
lpinfo -v
# 列出系统里可用的驱动 / PPD 型号
lpinfo -m | grep -i laser

lpinfo -v 会列出一堆 URI,网络打印机你会看到类似 socket://192.168.1.50dnssd://... 的条目。如果一个网络设备都没列出来,八成是网段不通或者打印机没开 RAW 端口,先 ping 一下再说。

驱动这块要多说一句。信创整机适配过的国产打印机,驱动包通常随机附带或者从厂商那边拿 deb 安装包,装完之后对应的 PPD 文件会落到 /usr/share/ppd/ 或者 /usr/share/cups/model/ 下。我习惯装完驱动包后直接用文件路径指定 PPD,比靠 lpinfo -m 去猜型号名更稳。

用 lpadmin 把打印机加进来

核心就是 lpadmin 这一条。网络打印机我一般走 socket(也就是俗称的 9100 / JetDirect 端口):

sudo lpadmin -p GuoHe_GX1001 \
  -E \
  -v socket://192.168.1.50:9100 \
  -P /usr/share/ppd/guohe/gx1001.ppd \
  -D "财务科黑白激光" \
  -L "3楼东"

拆开说下参数:-p 是打印机队列名,建议用英文+型号,别用中文,后面脚本调用省事;-E 是启用并接受任务;-v 是设备地址;-P 指向 PPD 文件;-D-L 是描述和位置,纯给人看的,可省。

如果单位网络是走 IPP 的,把 -v 换成 ipp://192.168.1.50/ipp/print 即可,其余不变。

加完设个默认打印机,免得用户每次选:

sudo lpadmin -d GuoHe_GX1001

验证:别急着喊用户来试

加完我从不直接喊用户打印,先自己用命令验一遍。

# 看队列状态,要是 enabled + accepting 才算正常
lpstat -p GuoHe_GX1001 -l
lpstat -t
# 丢一个测试任务
echo "guohe print test $(date)" | lp -d GuoHe_GX1001
# 看任务有没有卡住
lpstat -o

如果 lpstat -p 显示 disabled,多半是上一个任务报错把队列卡停了,cupsenable GuoHe_GX1001 重新放行就行。任务一直挂在 lpstat -o 里不走、状态 processing 却没出纸,先查打印机和服务器之间 9100 端口通不通,nc -zv 192.168.1.50 9100 一测便知。

批量铺开的脚本思路

到了几十台终端,我的做法是把上面那套塞进一个脚本,配合单位现有的批量分发工具(很多信创桌管平台自带远程执行)推下去。核心循环大概长这样:

#!/bin/bash
PRINTER="GuoHe_GX1001"
URI="socket://192.168.1.50:9100"
PPD="/usr/share/ppd/guohe/gx1001.ppd"

# 幂等:已存在就先删,避免重复添加报错
lpstat -p "$PRINTER" &>/dev/null && sudo lpadmin -x "$PRINTER"

sudo lpadmin -p "$PRINTER" -E -v "$URI" -P "$PPD"
sudo lpadmin -d "$PRINTER"
echo "deployed on $(hostname)"

加一句"已存在就先删"(lpadmin -x)很关键,否则重复跑脚本会因为队列名冲突一堆报错。这是我自己第一次批量推的时候踩的坑,几十台机器一半失败,回头看就是没做幂等。

共享给同网段的机器

有些场景是一台终端接打印机、整个科室共用。开共享两步:

# 全局允许共享
sudo cupsctl --share-printers
# 单个队列也要打开共享开关
sudo lpadmin -p GuoHe_GX1001 -o printer-is-shared=true

然后别忘了上面说的 631 端口防火墙。共享开了但别人连不上,十有八九是防火墙没放行,或者 /etc/cups/cupsd.conf 里的 Listen 还锁在 localhost,把它改成 Listen 0.0.0.0:631 重启服务即可。改 conf 之后记得 sudo systemctl restart cups

几个收尾的小提醒

PPD 文件加进去之后会被 CUPS 复制一份到 /etc/cups/ppd/ 下,以队列名命名。要排查驱动问题,直接看这个目录里的文件更准。

麒麟 arm64 和 x86 架构的驱动包不通用,混合环境批量推之前先 uname -m 分组,别一个包推全场。

国产化适配这事,主控这层用的是龙芯成熟方案做整机适配,不是另起炉灶,所以 CUPS 这套标准 Linux 打印栈在上面是完整可用的,命令和你在通用 Linux 上的经验基本一致,不用重新学。

以上是我自己在信创打印环境里反复用的一套命令。要是你也在做麒麟 / UOS 的打印部署,按这个顺序走一遍,单台到批量都能覆盖。有不一样的坑,欢迎评论区交流。


关于国合星科

国合星科(深圳)技术有限公司,专注信创打印机的科技企业,产品覆盖 A4 黑白 / 红黑激光、多功能一体机、针式、标签打印机及耗材、打印安全审计系统,兼容统信 UOS、银河麒麟、中标麒麟、Windows 等主流系统,深圳自有厂房,全国 400+ 售后网点。

  • 官方网站:www.guohetec.com
  • 销售热线:400-886-1028
  • 邮箱:info@guohetec.com
  • 地址:广东省深圳市光明区玉塘街道田寮社区同观路十九号路 10 号九洲工业园厂房 2 栋 401
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐