Ubuntu搭建共享打印机

有台老的hp打印机,型号是HP_LaserJet_Professional_M1136_MFP,不支持WiFi,通常使用时是抱着电脑插USB再打印,而且因为型号太老,新Mac找不到合适的驱动,只能Windows支持,于是打印文件还需要将文件拷贝到云盘上,再在Windows上从云盘上下载文件,再连打印机进行打印。于是准备将打印机连ubuntu服务器,然后配置成共享打印机,局域网的任何电脑都可以直接连接并打印。

步骤如下:

安装和配置cups

sudo apt install cups
sudo usermod -a -G lpadmin $USER
sudo cupsctl --remote-any --remote-admin --share-printers --user-cancel-any

安装Unix通用的打印服务程序cups,然后将当前用户添加入lpadmin用户组里,ubuntu上安装好cups后,默认就会有专门给打印用的lpadmin用户组。再通过cupsctl控制,开启web服务。

cups默认监听的是631端口,提供的是基于http的打印服务,或叫IPP协议,而cupsctl只是一个工具可以通过连接 631端口传输cups运行配置,实际相当于对/etc/cups/cupsd.conf的修改,最终要生效还是需要重启服务:

sudo /etc/init.d/cups restart

不过,发现cupsctl并不好用,还是直接修改/etc/cups/cupsd.conf来得方便。默认进入web管理界面只能localhost,否则会报Bad Request错,就算通过cupsctl设置了--remote-admin也不管用,日志看就是报client-error-not-found错误。网上查了下,发现是cupsd会检查请求头的Server是否为localhost,cupsd.conf需要添加如下:

ServerAlias *

打开管理界面后,发现一些按钮点击后会从http跳到https,否则就报Upgrade request的错误,网上又查了一下,cupsd.conf需要添加:

DefaultEncryption IfRequested

另外默认是监听本地sock文件,也需要修改,还有日志级别,改低点好查bug,所以前几行的cupsd.conf配置如下:

#LogLevel warn
LogLevel debug
PageLogFormat
MaxLogSize 1m
# Allow remote access
#Port 631
#Listen /run/cups/cups.sock
Listen *:631
ServerAlias *
DefaultEncryption IfRequested
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
WebInterface Yes

这样就可以真正进入cups的管理web界面了:

解决驱动找不到的问题

在Add Printer,一路填写之后,最后会发现因为我的打印机太老,找不到对应的型号,我尝试选择一下也是HP LaserJet MFP系列的,但不是M1136的,发现无法打印测试页。界面显示如果找不到就需要自己上传ppd文件。

ppd文件是一个打印机的描述文件,描述了打印功有哪些功能特点,其实也不算是驱动软件。去HP官方,并没有找到相应的ppd文件可下载。网上找到解决方案是安装如下程序,会自带将识别的打印机型号的ppd下载到本地:

sudo apt install hplip
sudo hp-setup

终端输出果然有一个过程是从网上下载drv:///hpcups.drv/hp-laserjet_professional_m1136_mfp.ppd,然后保存在了 /etc/cups/ppd/HP_LaserJet_Professional_M1136_MFP.ppd

尽管后面好像是因为跟cups冲突,hp-setup没能正常执行完,但该装的都装上了,添加打印机时对应的型号选项也有了,而且cupsd可以打印测试页了:

能打印测试页,服务端的打印机就算装好了,如下命令可以查看打印机状态:

$ lpstat -p -d
printer HP_LaserJet_Professional_M1136_MFP is idle.  enabled since Wed 29 Nov 2023 02:23:36 PM CST
system default destination: HP_LaserJet_Professional_M1136_MFP

接着就可以实现,简单一个命令,就可以把服务器上的任何文本打印到纸上了,比如将终端的启动代码打印出来:

lp ~/.bashrc

共享打印机

在配置网络共享之前,需要先了解一下通信的协议,这在 cups的help里有详细罗列:

Internet Printing Protocol (IPP)

使用最为广泛,基于http,scheme可以是http://或ipp://或ipps://,端口是631。

AppSocket Protocol(或者叫 JetDirect Protocol)

是最简单、最快、最可靠的协议,通过9100端口, scheme使用socket://。

Line Printer Daemon (LDP) Protocol

比如老的协议,不推荐使用,端口为515,scheme为ldp://。

我这里当然是使用IPP协议了,在Windows上添加网络打印机非常清晰,直接使用url如下即可:

http://192.168.1.4:631/printers/HP_LaserJet_Professional_M1136_MFP

此url实际就是web管理界面上:Printers -> Queue Name 点击进去之后的url。

而在Mac上添加网络打印机配置有点搞人,感觉是为了方便用户填写,搞了个复杂的表单,但实际让人容易踩坑:

相当于是把scheme://address/path,三个部分给拆开了,不是开启debug日志根本发现不了这一规律,通过反复尝试,然后查看/var/log/cups/access_log日志,才知道原来这里的Queue其实是url的path部分。

发表于 2023年11月29日 16:12   评论:0   阅读:873  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo