动态

详情 返回 返回

羣暉安裝打印服務器,驅動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 最新版)和使用,包括常見命令的使用,就不展開了。 

如下圖所示。

8d8d4a10-5891-435e-9316-63f5aa70253e

 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.

 

這些操作都完成後,正常狀態下,打印機插在羣暉上並通電,界面上是看不到打印機的,如下圖。

企業微信截圖_17618814679919

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

 

在羣暉的圖形界面上,可以看到創建的容器正在運行:

c07007e0-cccc-4d79-a496-de894652ffe8

 

到這裏,羣暉的配置基本結束,後面進入容器內的打印機配置。

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 //開放宿主機操作權限 )

Add a new 评论

Some HTML is okay.