群晖安装打印服务器,驱动HP P1106札记(一)—— 群晖配置
一、需求背景
今年小朋友开始上学,老师习惯从钉钉或者微信布置作业,几乎每天都需要打印。现在打印机接在电脑上,每次都要开电脑,就想着做一个打印服务器,不再依赖于电脑,手机、iPad各类终端都可以发起打印。
前后折腾了好几天,踩坑的过程真的是一言难尽,总结下来主要有几个坑:
1)群晖的版本问题:群晖的dsm版本不一样,对命令的支持就不一样。网上很多资料也有巨大的误导性。
2)docker被墙:网上也有各种解决办法,但是,但是在群晖里都不太好用,一方面是很多源都失效了,另一方面群晖有很多奇奇怪怪的特殊设置。
3)群晖打印服务器配置:网上资料很多很多,但不是版本过时,就是信息有误,还有很多博主是搬运工,信息不准确容易误导人。
4)打印机的Linux驱动:驱动非常不好找,HP还自己搞了个叫HPLIP的鬼,这个HPLIP更难找,网上资料也少。
二、硬件配置说明
NAS:群晖NAS 220+ ,DSM版本:7.2.2-72806 Update 4
打印机:HP LaserJet Pro P1106(没有无线网卡版本),打印机通过USB线插在NAS220+的后面
特别提示:理论上,本文的方法是适用HP及其他打印机的,尤其是CUPS的一系列配置。
三、群晖配置
群晖的配置,主要涉及:1)群晖自带的cups、avahi、dbus服务,2)docker安装cups。
先简要说明这三个服务是干嘛用的:
CUPS:Linux下的打印队列与作业调度服务,包括:驱动打印机、配置驱动、开打印机共享、提供远程打印服务等。
Avahi:Linux下的局域网内设备广播服务(譬如打印机),告诉网络中的其他设备(电脑、手机之类)我提供打印机服务。
DBus:Linux 下的消息总线服务,负责在 CUPS/Avahi之间传递事件与指令,实现解耦通信。
这里不解释什么ipp、mdns、wsdd协议之类,说起来确实有点复杂。
1、群晖的服务配置
停用自带的CUPS、启用avahi、dbus服务,需要先开群晖的telnet或者ssh端口。
特别提示:群晖自带的CUPS一定要停,因为他默认占用631端口,会与后面的docker里的cups端口重叠,导致Docker创建容器失败。
1)启用群晖的ssh端口
群晖:控制面板-终端机和SNMP-终端机- 启用SSH功能,端口默认22,我改成220(可以随意),打开ssh,后面用netterm之类ssh软件去登录群晖后台进行配置。
netterm的下载(NetTerm(远程登录电脑软件)V5.4.6.2 最新版)和使用,包括常见命令的使用,就不展开了。
如下图所示。

2)配置群晖后台服务
停cups、开avahi、dbus,默认情况下,这几个服务群晖系统都是开的。
a)先查询 cups服务状态(我这里显示已经mask,是因为我已经做过后续操作)
root@nas220:~# systemctl list-unit-files --type=service|grep cups cups-lpd@.service masked cups-service-handler.service masked cups.service masked cupsd.service masked
b)禁用 cups服务
#禁用cups相关服务,先stop,在disable,再mask(确保万一) systemctl stop cups.service systemctl stop cups-lpd@service systemctl stop cupsd.service systemctl disable cups.service systemctl disable cups-lpd@service systemctl disable cupsd.service systemctl mask cups.service systemctl mask cups-lpd@service systemctl mask cupsd.service
c)顺带说下一些其他操作,譬如,恢复服务,重启服务,查看服务状态,查看服务依赖关系,查看服务日志
#恢复cups相关服务(万一操作出错,可以改回来) systemctl unmask cups.service systemctl unmask cups-lpd@service systemctl unmask cupsd.service systemctl enable cups.service systemctl enable cups-lpd@service systemctl enable cupsd.service systemctl start cups.service systemctl start cups-lpd@service systemctl start cupsd.service systemctl start avahi.service systemctl start dbus.service
# 查看avahi服务状态,可以看到
avahi使用的配置,指向/usr/lib/systemd/system/avahi.service
avahi状态是active,后台进程是avahi-daemon,进程id为25262
另外,有些linux版本,avahi服务名字叫avahi-daemon
root@nas220:~# systemctl status avahi
● avahi.service - Avahi daemon
Loaded: loaded (/usr/lib/systemd/system/avahi.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2025-10-28 21:55:36 CST; 2 days ago
Main PID: 25262 (avahi-daemon)
Memory: 540.0K
CGroup: /system.slice/avahi.service
└─25262 avahi-daemon: running [nas220.local]
Oct 30 23:07:37 nas220 systemd[1]: Started Avahi daemon.
Oct 30 23:07:37 nas220 systemd[1]: Started Avahi daemon.
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
# 查看avahi日志
root@nas220:~# journalctl -fu avahi
-- Logs begin at Thu 2025-10-30 03:00:09 CST. --
Oct 30 23:07:37 nas220 systemd[1]: Started Avahi daemon.
Oct 30 23:07:37 nas220 systemd[1]: Started Avahi daemon.
这些操作都完成后,正常状态下,打印机插在群晖上并通电,界面上是看不到打印机的,如下图。

2、在群晖的docker中安装cups容器
包括两个关键步骤:1)配置docker仓库地址,2)下载 镜像文件,3)安装容器并启动docker
1)配置docker仓库的下载地址
特别提示:网上各种解决docker墙的教程,基本上都是替换mirror地址的方法,但这些镜像地址隔一段时间就会失效,我这里推荐的地址,也不排除后面会被墙。
a)查看群晖的docker使用的配置文件
这一部分网上也有一堆教程,但是,但是,因为群晖的版本差异性,很多教程是不适用的,这里重点讲方法,大家按照方法去找,再怎么升级版本也不会有问题。
#查看 Docker 在群晖上守护进程 root@nas220:# systemctl list-units --type=service --state=running|grep ContainerManager pkg-ContainerManager-dockerd.service loaded active running Docker Application Container Engine pkg-ContainerManager-event-watcherd.service loaded active running Docker event watch service pkg-ContainerManager-termd.service loaded active running Daemon for container terminal session #pkg-ContainerManager-dockerd.service 负责把docker cli的指令传给pkgctl-ContainerManager #pkg-ContainerManager-event-watcherd 事件/日志收集服务
#pkg-ContainerManager-termd 容器终端服务
#查看pkg-ContainerManager-dockerd.service读取那个配置文件 root@nas220:# systemctl cat pkg-ContainerManager-dockerd.service | grep -E 'ExecStart|dockerd.*config-file' ExecStart=/var/packages/ContainerManager/target/usr/bin/dockerd --config-file /var/packages/ContainerManager/etc/dockerd.json #读取docker配置文件,注意配置文件在目录 /var/packages/ContainerManager/etc下 root@nas220:# vi /var/packages/ContainerManager/etc/dockerd.json "data-root":"/var/packages/ContainerManager/var/docker", "log-driver":"db", "max-concurrent-downloads":3, "max-download-attempts":5, "registry-mirrors":["https://docker.1ms.run","https://docker.xuanyuan.me","https://docker.m.daocloud.io"], "seccomp-profile":"unconfined", "storage-driver":"btrfs"} #查看配置是否生效 root@nas220:# docker info | grep -A2 -i registry WARNING: No kernel memory TCP limit support WARNING: No cpu cfs quota support WARNING: No cpu cfs period support WARNING: No blkio throttle.read_bps_device support WARNING: No blkio throttle.write_bps_device support WARNING: No blkio throttle.read_iops_device support WARNING: No blkio throttle.write_iops_device support Registry Mirrors: https://docker.1ms.run/ https://docker-0.unsee.tech/ https://registry.cyou/ Live Restore Enabled: false #刷新配置到服务 root@nas220:~# systemctl daemon-reload #重启容器管理器 root@nas220:~# systemctl restart pkgctl-ContainerManager #重启ContainerManager 守护进程(这一步可以不做,做上一步的时候会自动重启pkg-ContainerManager-dockerd) root@nas220:# systemctl restart pkg-ContainerManager-dockerd #查看容器启动日志 root@nas220:# journalctl -fu pkg-ContainerManager-dockerd -- Logs begin at Fri 2025-10-31 03:00:24 CST. -- Oct 31 15:00:53 nas220 dockerd[9781]: time="2025-10-31T15:00:53.572609106+08:00" level=info msg="Daemon has completed initialization" Oct 31 15:00:54 nas220 docker[9781]: time="2025-10-31T15:00:54.404117212+08:00" level=info msg="API listen on /var/run/docker.sock" Oct 31 15:00:54 nas220 dockerd[9781]: time="2025-10-31T15:00:54.404117212+08:00" level=info msg="API listen on /var/run/docker.sock" Oct 31 15:00:54 nas220 systemd[1]: Started Docker Application Container Engine. Oct 31 15:00:59 nas220 docker[9781]: time="2025-10-31T15:00:59.846499735+08:00" level=warning msg="path in container /dev/usb/lp0 already exists in privileged mode" container=03effb96b7fac0f010fdb201d1c6b53e34fe34fbeb343d0d259e788547612363 Oct 31 15:00:59 nas220 dockerd[9781]: time="2025-10-31T15:00:59.846499735+08:00" level=warning msg="path in container /dev/usb/lp0 already exists in privileged mode" container=03effb96b7fac0f010fdb201d1c6b53e34fe34fbeb343d0d259e788547612363 Oct 31 15:01:02 nas220 dockerd[9781]: time="2025-10-31T15:01:02.610082860+08:00" level=info msg="loading plugin \"io.containerd.internal.v1.shutdown\"..." runtime=io.containerd.runc.v2 type=io.containerd.internal.v1 Oct 31 15:01:02 nas220 dockerd[9781]: time="2025-10-31T15:01:02.610210705+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.pause\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1 Oct 31 15:01:02 nas220 dockerd[9781]: time="2025-10-31T15:01:02.610262653+08:00" level=info msg="loading plugin \"io.containerd.event.v1.publisher\"..." runtime=io.containerd.runc.v2 type=io.containerd.event.v1 Oct 31 15:01:02 nas220 dockerd[9781]: time="2025-10-31T15:01:02.610305985+08:00" level=info msg="loading plugin \"io.containerd.ttrpc.v1.task\"..." runtime=io.containerd.runc.v2 type=io.containerd.ttrpc.v1
特别提示:
1)pkg-ContainerManager-dockerd服务的配置文件是:/var/packages/ContainerManager/etc/dockerd.json。
其中 "registry-mirrors":["https://docker.1ms.run","https://registry.cyou","https://docker-0.unsee.tech"] 是mirror地址的配置,这三个地址是目前还能用的mirror地址,可以用浏览器来打开验证。
2)群晖界面中的 镜像地址配置 存放在另一个文件:/var/packages/ContainerManager/etc/registry.json,但界面上不管如何配置,在界面上都会提示连接镜像仓库失败。
网上有说是dns污染,但是在curl 测试都是通过的。
#验证docker镜像服务地址
root@nas220:# curl -I https://docker.1ms.run/v2/
HTTP/2 401 content-type: application/json; charset=utf-8 content-length: 84 date: Fri, 31 Oct 2025 06:21:17 GMT access-control-allow-headers: Origin, Content-Type, Accept, Authorization access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS access-control-allow-origin: * docker-distribution-api-version: registry/2.0 www-authenticate: Bearer realm="https://docker.1ms.run/openapi/v1/auth/token", service="docker.1ms.run" x-cache-status: BYPASS x-ws-request-id: *****_PS-SHA-******_12259-***** x-via: 2.0 PS-SHA-***** [BYPASS] server: nginx
2)下载镜像文件 olbat/cupsd
因为界面上连接镜像仓库失败,就用命令行来操作,如下:
#下载镜像文件 root@nas220:# docker pull olbat/cupsd:latest latest: Pulling from olbat/cupsd 513c5a3cc2ee: Pull complete f7367200a3fe: Pull complete 265357e4964c: Pull complete 13628d785040: Pull complete Digest: sha256:bb0b0c26af82f63c6e69795f165cb0d5805581c9bb4d61924e7bf8568e4f9855 Status: Downloaded newer image for olbat/cupsd:latest docker.io/olbat/cupsd:latest #查看镜像大小 root@nas220:# docker images REPOSITORY TAG IMAGE ID CREATED SIZE olbat/cupsd latest e40d387fc6f9 4 days ago 613MB
特别提示:前面有关修改docker.json那些操作,也可以直接跳过,通过指定镜像服务下载地址的方式,来下载镜像文件,如下:
root@nas220:# docker pull docker.1ms.run/library/nginx:latest latest: Pulling from library/nginx 38513bd72563: Pull complete a0a6ab141558: Pull complete 0e86847a3920: Pull complete 1bace2083289: Pull complete 89df300a082a: Pull complete 35fb9ffa6621: Pull complete 5545b08f9d26: Pull complete Digest: sha256:f547e3d0d5d02f7009737b284abc87d808e4252b42dceea361811e9fc606287f Status: Downloaded newer image for docker.1ms.run/library/nginx:latest docker.1ms.run/library/nginx:latest root@nas220:# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.1ms.run/library/nginx latest 9d0e6f6199dc 2 days ago 152MB olbat/cupsd latest e40d387fc6f9 4 days ago 613MB
3)创建olbat/cupsd容器(基于前面下载的镜像)
#创建配置文件目录 root@nas220:# mkdir -p /volume1/docker/cups/logs /volume1/docker/cups/avahi /volume1/docker/cups/config
# 创建容器
# 注意这里指定了631端口,因此前面的停群晖宿主机的CUPSD动作必须先完成,否则会报端口冲突,最终导致启动失败。 root@nas220:# docker run -d --name=cups --net=host --privileged=true \ > -e TZ="Asia/Shanghai" -e HOST_OS="Synology" \ > -p 631:631/tcp -p 631:631/udp \ > -v /volume1/docker/cups/config:/config \ > -v /dev:/dev \ > -v /volume1/docker/cups/logs:/var/log \ > -v /volume1/docker/cups/avahi:/etc/avahi/services \ > -v /var/run/dbus:/var/run/dbus \ > --restart unless-stopped \ > olbat/cupsd WARNING: Published ports are discarded when using host network mode cc564b6945109a932f9e21409d9b8369dfc74d429ff2e36c60c4563ef1cb4bc5
#切换到容器环境 root@nas220:# docker exec -it cups /bin/bash
# 查看容器内文件目录,容器内连vi都没有。。。 root@nas220:/# ls -l total 16 lrwxrwxrwx 1 root root 7 Aug 10 20:30 bin -> usr/bin drwxr-xr-x 1 root root 0 Aug 10 20:30 boot drwx------ 1 root root 0 Oct 31 15:40 config drwxr-xr-x 14 root root 13820 Oct 31 14:23 dev drwxr-xr-x 1 root root 2138 Oct 31 15:40 etc drwxr-xr-x 1 root root 10 Oct 27 10:04 home lrwxrwxrwx 1 root root 7 Aug 10 20:30 lib -> usr/lib lrwxrwxrwx 1 root root 9 Aug 10 20:30 lib64 -> usr/lib64 drwxr-xr-x 1 root root 0 Oct 20 08:00 media drwxr-xr-x 1 root root 0 Oct 20 08:00 mnt drwxr-xr-x 1 root root 0 Oct 20 08:00 opt dr-xr-xr-x 377 root root 0 Oct 31 15:40 proc drwx------ 1 root root 38 Oct 27 10:03 root drwxr-xr-x 1 root root 118 Oct 31 15:40 run lrwxrwxrwx 1 root root 8 Aug 10 20:30 sbin -> usr/sbin drwxr-xr-x 1 root root 0 Oct 20 08:00 srv dr-xr-xr-x 12 root root 0 Oct 18 15:45 sys drwxrwxrwt 1 root root 0 Oct 27 10:04 tmp drwxr-xr-x 1 root root 94 Oct 27 10:03 usr drwxr-xr-x 1 root root 90 Oct 27 10:03 var #安装vim root@CUPS:/$ apt update && apt install -y vim Hit:1 http://deb.debian.org/debian testing InRelease Hit:2 http://deb.debian.org/debian testing-updates InRelease Hit:3 http://deb.debian.org/debian-security testing-security InRelease 43 packages can be upgraded. Run 'apt list --upgradable' to see them. vim is already the newest version (2:9.1.1230-2).
#修改PS1提示符成 用户/容器名CUPS
root@CUPS:~$ echo 'PS1="\[\e[1;33m\]\u@\[\e[1;35m\]CUPS\[\e[1;36m\]:\w\[\e[0m\]\$ "' >> ~/.bashrc && source ~/.bashrc
在群晖的图形界面上,可以看到创建的容器正在运行:

到这里,群晖的配置基本结束,后面进入容器内的打印机配置。
cups服务在容器已经启动成功,且与宿主机共享avahi、dbus,就是cups服务由容器提供,打印机广播服务由宿主机提供,具体 如下:
# 查看容器中cups
root@CUPS:~$ service cups status cupsd is running.
# 查看容器中运行的服务状态 root@CUPS:~$ service --status-all [ + ] cups [ - ] cups-browsed [ - ] dbus [ - ] procps [ - ] saned [ - ] sudo [ - ] x11-common # 查看宿主机avahi服务 root@nas220:~# systemctl status avahi ● avahi.service - Avahi daemon Loaded: loaded (/usr/lib/systemd/system/avahi.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2025-10-28 21:55:36 CST; 2 days ago Main PID: 25262 (avahi-daemon) Memory: 720.0K CGroup: /system.slice/avahi.service └─25262 avahi-daemon: running [nas220.local] Oct 31 13:18:50 nas220 systemd[1]: Started Avahi daemon. Oct 31 13:18:50 nas220 systemd[1]: Started Avahi daemon. Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
# 查看宿主机dbus服务 root@nas220:~# systemctl status dbus ● dbus-system.service - D-Bus System Message Bus Loaded: loaded (/usr/lib/systemd/system/dbus-system.service; static; vendor preset: disabled) Active: active (running) since Sat 2025-10-18 13:30:15 CST; 1 weeks 6 days ago Main PID: 26276 (dbus-daemon) CGroup: /syno_dsm_internal.slice/dbus-system.service └─26276 /sbin/dbus-daemon --system --nopidfile Oct 31 16:01:07 nas220 dbus-daemon[26276]: [system] Activating service name='org.freedesktop.login1' requested by ':1.131' (uid=0 pid=3858 comm="apt in...cehelper) Oct 31 16:01:07 nas220 dbus-daemon[26276]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1...directory Oct 31 16:03:21 nas220 dbus-daemon[26276]: [system] Activating service name='org.freedesktop.login1' requested by ':1.132' (uid=0 pid=4725 comm="apt in...cehelper) Oct 31 16:03:21 nas220 dbus-daemon[26276]: [system] Activated service 'org.freedesktop.login1' failed: Failed to execute program org.freedesktop.login1...directory Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. Hint: Some lines were ellipsized, use -l to show in full.
四、小结
到这里群晖的配置就基本结束了,下一章是CUPS里打印机相关配置,特别说明以下几个关键点:
1、群晖自带的CUPS必须停,否则与容器的CUPS会冲突;
2、群晖自带的avahi、dbus不能停;
3、容器内的cups共享群晖宿主机提供的avahi、dbus服务,对外开启打印机广播服务。
(怎么共享的?依赖于容器的启动配置,下面这几个是关键。
-v /volume1/docker/cups/avahi:/etc/avahi/services // 共享avahi的配置目录
-v /var/run/dbus:/var/run/dbus //共享总线文件
--privileged=true //开放宿主机操作权限 )

浙公网安备 33010602011771号