介绍个拿PI来做打印服务器的尝试。收藏之余请点个 吧。

家里翻出一张老树莓派的板子(Model B+ V1.1 没有WIFI),家里原来的老打印机(HP1020,没有网口,只有USB)在吃灰.

想着把两个老家伙放一起组一个无线打印机吧。没想到遇到一堆的坑,断断续续搞了一个周末,算是OK了。目前可以实现家里全系列的设备无线打印:Windows 电脑、 Ubuntu电脑、Andorid 手机、平板,Apple 手机、平板。

网上教程多少有帮助,但都有这样那样的坑,具体执行时需要及时鉴别。为了不辜负自己趟的这些坑,还是总结记录一下

姥姥(老树莓派+老打印机)是啥样子。https://www.zhihu.com/question/1907100066197529388/answer/1912112218251703033?share_code=tDCp27zwmm5k&utm_psn=1912499494878150892

注意,以下操作需要有些linux配置相关的经验,不适合小白选手。总得来说,自己搭建的这种服务稳定性一般,每个月都要重启一两次机器才行。要是不想费这个事,也可以上网去买一个打印小盒子,大概百多块钱吧。


Step0: 准备(从简)

  • 树莓派OS–建议直接用官方的pi-imger 工具烧写(记得一定先把ssh给配置了啊,不然后面很蛋疼)。老板子要用老一点的OS(Bullseye 32-bit Lite不带桌面就够了)。最开始下的bookworm, PI没问题,但是CUPS版本比较新,出了一堆的问题,不胜其烦–浪费了一天。
  • 安装好以后,ssh进去PI,用 sudo raspi-config 配置一下,主要是locale和时区。
  • 更新本地源,apt-update/upgrade不赘述。
  • 一定配成静态IP地址

step1: CUPS 服务器安装配置

以下ssh登录到pi进行:

安装必要的package — 蛮长时间,大半个小时朝上。

sudo apt-get install cups hplip printer-driver-hpcups samba
sudo apt-get install hplip-gui #如果不需要在pi上接显示器本地配置,可不装。
sudo apt-get install build-essential vim ufw # 后面编译、本地编辑、本地配置

配置CUPS

先配置一下 sudo vim /etc/cups/cupsd.conf — 不然远端没办法打开CUPS UI。

这个配置很重要,网上很多教程有这样那样的小坑(关键是不同CUPS版本细节有不同,可能还和设备本身有关),要是有问题,最好读一下对应版本的文档。可以打开对应的帮助文件。

我遇到一个比较重要的设定是 DefaultEncryption Never #家庭使用不开加解密 — 否则IOS设备打印会报告这样那样的TLS相关问题。

本地其它配置

$ sudo usermod -a -G lpadmin USERNAME # add the USERNAME to the lpadmin group
$ sudo cupsctl --remote-any # ensure that CUPS is accessible across entire network
$ sudo ufw allow 631/tcp  # 防火墙需要开放端口
$ sudo systemctl restart cups # 重启cups服务才能生效
$ sudo vim /etc/samba/smb.conf # 如果需要windows发现服务,要配一下samba

Samba参考以下配置(sudo vim /etc/samba/smb.conf)

[printers]
   comment = All Printers
   browseable = yes 
   path = /var/spool/samba
   printable = yes
   guest ok = yes
   read only = yes
   create mask = 0700

[print$]
   comment = Printer Drivers
   path = /var/lib/samba/printers
   browseable = yes
   read only = yes
   guest ok = yes

别忘记重启samba: sudo /etc/init.d/smbd restart

安装打印机驱动

这一步坑最多网上面基于CUPS UI 操作的,在我这里都有稳定性问题。最后发现自己编译的驱动最稳定。

Download GitHub – koenkooi/foo2zjs: A linux printer driver for QPDL protocol – copy of http://foo2zjs.rkkda.com/

帮助文件,很详细了:github.com/koenkooi/foo

TL,DR 版本,下载驱动代码到pi上面后:

INSTALLATION -- ONLY for Ubuntu
------------

(Optional) Uninstall -- BETTER DO THIS
    $ sudo make uninstall
  
Compile:
    $ make
    
Install driver, foomatic XML files, PPD files, and extra files:
    $ sudo make install

(Optional) Install hotplug (for HP LJ 1000/1005/1018/1020/P100[5678]/P1505):
    $ sudo make install-hotplug

Now Unplug and re-plug the USB printer

If you use CUPS to manage your printers, you must restart cupsd:
    $ sudo make cups

Create printers (Debian)
    Connect with a web browser to:
	http://localhost:631
    And configure printer (HP example shown) to:
	HP LaserJet 2600n, Foomatic + foo2zjs (en)
    Then edit "Manage Printers->Configure Printer" to suit you,
    such as "Page Size" or "Color Mode".

Create printers (command line using CUPS)
    # lpadmin -p "NAME" -v "URI" -E -P file.ppd.gz
    i.e.
	# lpadmin -p hp1020 -v "usb://HP/LaserJet%201020" -E \
	    -P /usr/share/cups/model/HP-LaserJet_1020.ppd.gz
    Set the default:
	# lpadmin -d "NAME"

其实最后一步运行,已经把打印机安装成功了。注意lpadmin命令很强大,可以代替任何CUPS UI上的操作。


打印客户端安装设置

细节不在这里更了,需要详细参考请看我的文章(集中在这里维护):

Android 手机、平板

这一步需要科学上网,去google store 找名为printer share的 app, 这是我验证下来最简单,易用,精干(安装包10M大,活久见) 还免费的 APP– 界面很古早,但是我只要打印,其它无所谓。

APPLE 手机、平板

Apple的东西最那么特殊。研究了大半天,我需要在PI上面起一个AirPrint的服务(实际上似乎是把已经工作了的无线打印服务再“映射出一个AirPrint的服务?”)(AirPrint with CUPS)

Window电脑

Pi上面 Samba要提前配好,见前文

windows还是简单易用(我是Win10,没试过其它OS),直接搜索打印机安装就能找到hp1020安装了。

如果安装失败,也可以手动安装。

Ubuntu22.04 电脑

Ubuntu上先安装HPLIP(惠普官方驱动)和驱动(这里到没有编译,直接就OK)–后面再把远端打印机映射成本地打印机。

sudo apt update
sudo apt install hplip printer-driver-foo2zjs

最后是一些debug手段(PI上面运行的)

有很多debug工具可以使用。参考文章吧