我有一台2014年的HP_LaserJet_Professional_M1136黑白打印机(它没有wifi,也没有什么智能配置),我还有一台自己在2017年组装的Debian小服务器。通常,我习惯于将小服务器跟打印机等设备靠近一起放置,这样在局域网内我就只需要连接到这台服务器就能控制一些常用的外设了。


首先是安装Cups,安装之前需要update一下。
# apt-get update
# apt-get install cups
接下来,启动Cups服务。
service cups start
为了安全起见,cups服务默认只能本地用户localhost访问的,Cups在浏览器中提供了一个gui的控制页面,本地环境下可以直接使用http://localhost:631进入管理页面;但是我们需要远程控制,还需要多做一步,修改/etc/cups/cupsd.conf
配置文件以允许局域网内远程访问。最简单的方法是使用下面的命令:
cupsctl --remote-admin --remote-any --share-printers
它将更新/etc/cups/cupsd.conf
文件并为您重新启动Cups服务,在同一文件夹中保存以前配置的备份。
稍微复杂的方式是自己修改配置文件,我所要做的就是添加Allow all
以访问服务器和管理页面,配置现在看起来像下边这样:
# Restrict access to the admin pages...
<Location /admin>
Order allow,deny
Allow all
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
</Location>
如果只允许本地网络上的特定计算机访问管理页面和配置文件,可以按照如下方式编辑配置:
<Location /admin>
Order allow,deny
Allow from 10.10.10.5
</Location>
或者对于整个10.10.10子网,
<Location /admin>
Order allow, deny
Allow from 10.10.10.*
</Location>
至此,就可以远程访问CUPS的GUI web界面了。然后我们需要添加打印机并进行分享。

我的打印机已经通过USB连接到小服务器了,所以会看到如下的界面,勾选对应型号就好了:


接下来就是选择对应的驱动,最后选择Add Printer就好了。

但是你觉得一切真的这么顺利吗?并非如此,CUPS默认不会有这么多HP Printer的驱动,如果随意选择一个不匹配的驱动(Model),很有可能会遇到如下”输入码无效“问题而添加不了打印机:

输入码无效,这个问题我一开始怀疑是服务器上的驱动不匹配,但是在Google和百度一顿瞎逼乱搜之后我反而忽视了这一点。有说什么要开smb1.0的,也有说要用老版本界面的”添加打印机“功能的,但是没有一个能解决问题。我甚至还在本地windows环境下载了一个HP 1136的驱动,安装一半提示请插入USB接口(我得承认当时我脑已残)。所以还是回到最开始,要想在服务器上安装合适的打印机驱动,首先得找到这个驱动。

不要尝试去查找ppd文件,HP针对linux的驱动包服务叫做hplip,所以你需要在添加打印机之前,先要安装hplip:
# apt-get update
# apt-get install hplip
安装了hplip这个服务之后,就能在Models里面找到对应的HP 1136驱动了,大喜过望,然而仍旧提示”输入码无效“而无法添加,我想是不是旧一点的驱动可以解决这个问题,于是改为使用HP 1132的驱动,这下果然就能成功添加打印机了。我随手选了个文件打印,结果打印机没有任何反应,看来还是没有搞定。
回到CUPS的GUI网页,查看Jobs的状态发现提示”Filter failed“:

又是一番胡逼瞎搜,出现这个问题的原因是HPLIP 专有插件版本不匹配导致的问题,解决方法是安装hp-plugin:
sudo hp-plugin
安装好后重新启动cups服务,至此共享打印机终于添加成功了。
参考资料:
CUPS 在和使用 HPLIP 驱动程序的打印机配合使用时报错 “Filter Failed“
Cups is not printing with “Filter Failed” message — how to get more info?
如何使用Web界面远程管理CUPS?
How to set up a print server on a Raspberry Pi
cups共享linux打印机_使用Linux共享打印机