本帖最后由 小王同学 于 2025-12-9 19:18 编辑
理论上此教程只要是存在usb打印机空闲卸载usb功能的打印机均有效,不仅仅局限于佳能MG3600系列打印机,有相关情况的可以自行测试,最好能反馈一下是否有效。
说一下我打印机远程打印出现的症状。 打印机通过usb连接路由器开启USB打印机服务器后可以正常打印,但是过一段时间后,具体时间未测试,但不超过24小时。此时会打印失败,重启路由器可以恢复正常,但是问题一直没有解决,后来发现重启USB打印机服务器进程之后也可以连接,最后开始用自带的网络打印功能。 如果有人是这种情况的话可以按照此方法解决一下。以下是我路由器的USB打印服务器插件。红框内是设备ID。
在 OpenWRT 中,kmod-usb-printer 是USB 打印机核心内核模块,负责让系统识别 USB 接口的打印机(包括佳能 MG3600),MG3600 需重启打印服务问题,大概率和该模块的加载、绑定或兼容性有关。
一、先确认模块是否正确安装 / 加载
1. 检查安装状态(SSH 执行)
运行
opkg list-installed | grep kmod-usb-printer
若输出空:说明未安装,执行 opkg update && opkg install kmod-usb-printer 安装;
若输出 kmod-usb-printer - x.x.x-x:说明已安装,继续下一步。
2. 检查模块加载状态
运行
lsmod | grep usblp
kmod-usb-printer 对应的内核模块名是 usblp,正常应输出:
plaintext
usblp 20480 0
usbcore 245760 10 usblp,usbserial,...(其他USB模块)
若无输出:手动加载模块 insmod usblp,并设置开机自加载(见下文);
若加载但打印仍异常:说明模块与 MG3600 的 USB 协议不兼容(MG3600 可能用了非标准 USB 打印协议)。
二、核心修复:解决模块与 MG3600 的兼容问题
1. 禁用模块自动卸载 + 强制绑定端口
MG3600 可能因模块 “空闲自动卸载” 或 “USB 端口动态切换” 导致失联,需固定绑定:
运行
# 1. 禁止内核自动卸载usblp模块
echo "options usblp autosuspend=-1" > /etc/modprobe.d/usblp.conf
# 如果提醒-ash: can't create /etc/modprobe.d/usblp.conf: nonexistent directory则需要先创建目录,避免文件写入失败,具体命令为:mkdir -p /etc/modprobe.d
# 2. 找到MG3600的USB设备ID(替换为你的设备ID)
lsusb # 输出示例:Bus 001 Device 003: ID 04a9:178e Canon, Inc. MG3600 series
# 记住 ID 部分:04a9:178e(你的可能不同)
# ID可以在USB打印服务里看到 具体见图片红框所示。
# 3. 强制将模块绑定到MG3600的USB端口
echo "04a9 178e" > /sys/bus/usb/drivers/usblp/new_id
# 一般而言到这一步基本上已经没有问题了。可以重启一下测试,如果不行则继续。
# 本人在这一步就结束了,然后重启了路由器,截止发帖已经20多小时,打印机一直在线,远程打印不受影响。
2. 设置模块开机自加载(避免重启后失效)
# 有usb打印服务器的固件基本上大多都有自启动规则,看情况添加。
编辑 /etc/modules.d/usb-printer 文件(无则新建):
运行
vi /etc/modules.d/usb-printer
添加内容:
usblp
保存后执行 modules-load usblp 生效,重启路由器后模块会自动加载。
3. 调整 CUPS 服务依赖(让 CUPS 等模块加载完成再启动)
# 此脚本看情况添加
MG3600 需要模块完全加载后 CUPS 才能识别,修改 CUPS 启动脚本:
运行
# 编辑CUPS启动配置
vi /etc/init.d/cups
找到 start() 函数开头,添加延迟和模块检查:
start() { # 等待usblp模块加载完成 while ! lsmod | grep -q usblp; do sleep 2 done sleep 5 # 额外延迟5秒,确保MG3600 USB设备就绪 # 原有启动代码(如 procd_open_instance 等)保留 ... } |
保存后重启 CUPS:/etc/init.d/cups restart。
以下部分未测试,如果到这一步还不能解决可以继续下去试一试。如果可以,请在评论区反馈效果。
三、进阶:替换兼容的模块版本(若上述无效)
部分 OpenWRT 版本的 kmod-usb-printer 对佳能 MG3600 支持不佳,可尝试:
卸载当前模块:opkg remove kmod-usb-printer;
下载对应 OpenWRT 版本的旧版 / 测试版 kmod-usb-printer(可从 OpenWRT 官网 /packages/history 找);
手动安装:opkg install /tmp/kmod-usb-printer-x.x.x-x.ipk(先上传 ipk 到 /tmp 目录)。
四、验证效果
重启路由器:reboot;
重启后检查模块加载:lsmod | grep usblp;
直接打印测试(无需重启 CUPS)
|