在OpenWrt路由器上配置有线HP打印机

前言

作为学生,时常有打印的需求。而我的打印机不支持无线打印,每次打印都要打开电脑显然很麻烦。在房间网关更换为带usb接口的路由器后,便打算配置无线打印服务器。

必要条件

  • 一台HP打印机。(我的是Hewlett-Packard Deskjet 1050)
  • 一台带usb接口OpenWrt路由器。
  • 一台电脑(最好有Linux环境)。
  • 聪明的大脑。
  • 灵巧的小手。
  • 巧妙的上网方法。

编译OpenWrt

由于OpenWrt项目从LEDE17开始就不再提供预编译的CUPS软件,到现在的最新版(21.02.3)甚至没有内置在官方源码里,所以我们需要自行编译CUPS。

如果你不想编译,请直接跳到使用二进制包编译的好处是可以把CUPS内置在固件镜像内,而且可以调整别的内容。

(以下内容参照OpenWrt官方wiki)

配置编译环境

本人是在Red Hat Enterprise Linux 9上编译的(Fedora/CentOS等同理),配置编译环境只用执行以下命令即可:

sudo dnf --setopt install_weak_deps=False --skip-broken install \
bash-completion bzip2 gcc gcc-c++ git make ncurses-devel patch \
rsync tar unzip wget which diffutils python2 python3 perl-base \
perl-Data-Dumper perl-File-Compare perl-File-Copy perl-FindBin \
perl-Thread-Queue

其他发行版的环境配置命令也可以在OpenWrt Wiki找到。

注意:如果你使用Windows Subsystem for Linux编译,请删去PATH里的Windows路径

获取源代码

使用git把OpenWrt的源代码克隆下来:

git clone https://git.openwrt.org/openwrt/openwrt.git

checkout到一个稳定版(这里选择21.02.3)

cd openwrt/
git checkout v21.02.3
# 你也可以用 git tag 看看其他可用的版本

获取软件包列表

./scripts/feeds update -a
./scripts/feeds install -a

看看有没有CUPS软件包可用

make menuconfig
# 记得把终端窗口放大一点

打开菜单之后,按下 / ,输入libcups寻找源码仓库内是否含CUPS:

如果找到了(就如下图),那么恭喜你,你不用配置第三方源。

否则,请往下看。

在寻找完成之后,不要改动任何选项,选择Exit再按下直至回到命令行。

添加CUPS源码仓库

在源码目录内,运行以下命令以添加CUPS仓库:

echo "src-git cups https://github.com/TheMMcOfficial/lede-cups.git" >> feeds.conf.default

然后更新仓库列表

./scripts/feeds update -a
./scripts/feeds install -a

(如果你打开这个仓库,你会发现最后更新在2018年。请不要担心,这不意味着编译出的CUPS不可用)

更改配置

如果你的设备不在OpenWrt的官方支持列表里,请直接跳到使用二进制包

打开OpenWrt的下载仓库,定位到你的设备的目录

路由器的后台管理界面是一个不错的参考来源

然后向下,定位到config.buildinfo,复制链接

回到终端,输入以下命令以使用你设备的配置

rm -f .config ; wget <你复制的链接> -O .config
make menuconfig

在菜单里Target Profile处选择你的设备

选择我的设备

最后,在菜单首页选中

  • Network(ing) -> Printing -> cups (不需要选中附加组件,且有可能编译失败)
  • Library -> libcups

如果你想要把包内置在固件里的话,把包选择成 [*] ,否则,请选择成 [M]

按下保存并退出,就可以编译了。

开始编译

make -j $(nproc) defconfig download clean world

这可能会占满你电脑的资源并花费几个小时的时间。你可以在这期间休息一下。

安装CUPS

编译好之后,你应该能在以下目录找到文件

  • 编译好的固件:bin/targets/<设备平台>/<设备硬件>
  • 编译好的包:bin/targets/<设备平台>/<设备硬件>/packages

比如我使用联想新路由Mini,是Realtek MIPS平台,采用MT7620固件,那么我能在bin/targets/ramips/mt7620找到固件。

  • 如果你上面配置CUPS选择了[*],请刷入固件
  • 如果你上面选择了[M],请安装包。(温馨提示:用ls *cups*可以找到名称里包含cups的文件)此时固件的刷入是可选的。

使用二进制包

当然,你也可以不编译,使用别人现成的包。

你可以在以下地方下载编译好的CUPS包:

[musl libc版本] [uClibc libc版本]

鉴别musluClibc

ssh进入你设备的后台,运行以下命令

 ls /lib/*uClibc* -l || ls /lib/*musl* -l

如果你看见了类似于以下的回复,你使用的是musl

ls: /lib/*uclibc*: No such file or directory
lrwxrwxrwx  1 root root      7 Apr 16 12:59 /lib/ld-musl-mipsel-sf.so.1 -> libc.so

如果你看见了类似于以下的回复,你使用的是uClibc

-rwxr-xr-x. 1 root root  21520 Apr  3  2009 /lib/ld-uClibc-0.9.30.1.so
lrwxrwxrwx. 1 root root     21 Apr  3  2009 /lib/ld-uClibc.so.0 -> ld-uClibc-0.9.30.1.so
-rwxr-xr-x. 1 root root 182840 Apr  3  2009 /lib/libuClibc++-0.2.2.so
-rw-r--r--. 1 root root 863992 Apr  3  2009 /lib/libuClibc++.a
lrwxrwxrwx. 1 root root     16 Apr  3  2009 /lib/libuClibc++.so -> libuClibc++.so.0
lrwxrwxrwx. 1 root root     20 Apr  3  2009 /lib/libuClibc++.so.0 -> libuClibc++-0.2.2.so
-rw-r--r--. 1 root root 294744 Apr  3  2009 /lib/libuClibc-0.9.30.1.so

选择合适的架构,然后上传安装。

配置打印机

好了之后(建议重启一下),打开浏览器,输入网址

http://<路由器的ip地址>:631/

进入CUPS管理界面。

点击Administration(应该会需要你输入root账户及密码),进入CUPS管理后台

点击按钮添加打印机。

记得勾选Share This Printer。

此时需要你选择一个驱动,不要惊慌。打开惠普Linux制图与打印,选择最新版本,下载tar.gz文件

解压,进入ppd/hpcups目录

定位到你的打印机(如果打印机的ppd文件不在这里面,请在hplip包的其他地方找找。),解压出ppd文件

并上传到CUPS管理界面。

Z

最后选择默认设置

就配置好你的打印机了。

最后你应该能在支持CUPS的系统设置里查找到你的打印机,不要忘记在本地设备上配置驱动哦!

后记

配置CUPS的初衷是更方便地打印。可惜到毕业之后才配置好,深感哀伤。总而言之,希望这篇文章能对你提供帮助。