配置和连接CUPS服务的过程中,楼主遇到了很多意想不到的问题。
特别鸣谢 @何同学 的友情帮助,在互联网中关于CUPS问题解决方案零碎的情况下,何同学孜孜不倦地成功探索出了优雅、可行的解决方案!!!
打印机网络服务设置(若只需要连接可以忽视)
- 打印机通过USB接口连接到Linux主机上
- 在打印机官网上找到对应型号,选择好适用的系统版本,按照指引安装好LPR和CUPS驱动程序(都要装)
- 以Brother HL-2260D在Linux rpm上的安装为例
- 下载地址:
https://support.brother.com/g/b/downloadlist.aspx?c=cn&lang=zh&prod=hl2260d_cn&os=10013
,在操作系统中选择对应系统 - 安装方法:
sudo rpm -ivh <文件名>.rpm
- 如果安装出错想要卸载,
sudo rpm -e <包名>
,包名不带.rpm
- CentOS下载rmp,如果是Ubuntu下载pkg
- 如果在安装LPR驱动时,报错
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
, 需要安装缺失的库文件。sudo yum install glibc.i686
或sudo apt-get install libc6:i386
- 安装好后,访问
http://localhost:631
即可访问管理页面 - 在管理页面添加打印机,如果驱动正确安装了,打印机型号选择列表里面应该会出现对应型号,选择它,CUPS就会加载所选型号的驱动。这时候应该就可以用了,尝试打印一下测试页吧!
- 如果需要其它设备也可以连接到WEB管理页面,需要额外设置
运行这条命令: vi /etc/cups/cupsd.conf
将文件配置成下面这样,<your-desktop-client-ip-or-subnet>填写需要允许的网段
# Restrict access to the server...
<Location />
Order allow,deny
Allow 127.0.0.2
Allow <your-desktop-client-ip-or-subnet>
</Location>
运行service cups restart
- 如果外部设备无法正常访问,请在firewalld中开启TCP的631端口
sudo firewall-cmd --add-port=631/tcp --permanent
sudo firewall-cmd --reload
- WEB页面
http://localhost:631
进入Printers,找到Device Name,点击进入后复制整个URL
如果你的Linux主机用的是ARM处理器(例如树莓派)
Brother打印机的Linux驱动仅适用于x86架构,如果你的主机是ARM处理器,则需要安装ARM驱动,方法如下:
sudo apt update
sudo apt install foomatic-db
sudo systemctl restart cups
上面的foomatic-db是apt源上的一个打印机驱动包,里面包含了各种常见型号的驱动,如果没有你用的型号,请尝试:
- 选择近似型号的驱动,看看能不能用,比如HL-7080D是HL-2260D带扫描仪的升级型号,打印模块是一样的,HL-2260D就可以使用HL-7080D的打印驱动
- 上国际互联网查找你想要的驱动,关键词“XXX printer Arm driver”,XXX是打印机型号
客户端连接网络打印机设置
- Windows 10
- 首先安装对应型号的驱动程序
- 不需要下载“全套驱动程序和软件包” ,只需要下载“打印机驱动程序”,运行后自动解压缩即可。
- Win+i 进入设置- 设备-打印机-刷新-添加打印机-我的设备不在列表-按名称选择共享打印机-粘贴刚刚输入的URL
http://<server_ip>:631/printers/<device_name>
- <server_ip>是打印机服务器IP
- <device_name>需要进入WEB管理页面自行查看
- 下一步-选择设备产商和具体型号后即可正常使用
- 如果没有显示,选择Generic也可
- macOS 14.3
- 不需要安装驱动,macOS会调用Linux上的CUPS驱动
- 桌面上点击左上角苹果图标-系统设置-打印机与扫描仪-添加打印机…-点击地球按钮(IP )
- 填写基本同Windows差不多,只不过分开选择
- 地址填写
<server_ip>:631/
- 不带
http://
- 不带
- 协议选择IPP
- 队列填写
printers/<device_name>
- 这项填写很关键 ,如果不填写或者填写错误,会出现通信失败的情况
- <device_name>需要进入WEB管理页面自行查看
- 名称自定义
- 位置选填
- 选择“普通PostScript打印机”,确认即可
- 地址填写
- 填写基本同Windows差不多,只不过分开选择
Mac “神秘代码12345@PJX 12345”问题
现象1:在macOS端安装CUPS驱动后,连接Linux CUPS网络打印机服务,一旦打开系统打印对话窗(即让大家选择打印属性的页面,如页码等选项),打印机就会自动启动,打印出一张纸,左上角有“12345@PJX 12345”字样,第三方打印对话窗(如Edge)则没有这个问题
现象2:在macOS端安装CUPS驱动后,连接Linux CUPS网络打印机服务,提交打印任务后,打印机无响应,只会在macOS打开系统打印对话窗时自动打印出左上角有“12345@PJX 12345”的纸张
问题成因
楼主探索了很久,最后 @何同学 通过与Windows添加网络打印机过程的区别,结合网络帖子,终于找到了成因。其实是macOS中的CUPS驱动和Linux主机上的驱动重叠,导致异常。
解决方案
很简单,上文macOS连接中提到过,“不需要安装驱动”和“选择“普通PostScript打印机”。这样CUPS驱动不会重叠,神秘代码不会出现,macOS也可以正常打印了。
美中不足
macOS 选择“普通PostScript打印机” 后,虽然没有神秘代码,也可以正常打印,但是打印时长显著增加,大约需要12s的响应时间,之后才会开始打印。