目标\问题
目标是通过克服错误消息来打印 CUPS 测试页:
“无法找到打印机“BrotherPrinter”。”
哪些测试可以确认错误消息的根本原因?是否有类似 ping 的测试可以从 cups 执行,以确认它可以“看到”网络上的打印机?
背景
帖子底部提供的错误消息的屏幕截图
CUPS 安装在 Raspberry Pi 3B+ 上的 Raspbian Buster (OSMC) 上 Raspberry pi 未通过 USB 连接到打印机
安装/设置 CUPS
sudo apt install cups
sudo usermod -a -G lpadmin osmc
sudo cupsctl --remote-any
sudo systemctl restart cups
观察结果
得到测试结果
osmc@osmc:~$getent hosts BrotherPrinter
不返回任何内容
osmc@osmc:~$getent hosts BrotherPrinter.local
返回:
192.168.8.101 BrotherPrinter.local
Brother HL2280DW 配置为 CUPS。 CUPS 退货:
当前连接:lpd://BrotherPrinter/BINARY_P1
BrotherPrinter.local ping 返回良好:
ping BrotherPrinter.local
PING BrotherPrinter.local (192.168.8.101): 56 data bytes
64 bytes from 192.168.8.101: seq=0 ttl=255 time=3.895 ms
答案1
CUPS 表示无法找到“BrotherPrinter”,但该ping
命令能够从“BrotherPrinter.local”获得响应。
那么,也许“BrotherPrinter”和“BrotherPrinter.local”被认为是两个不同的东西?
测试1:主机名解析
使用以下两条命令进行测试:
getent hosts BrotherPrinter
getent hosts BrotherPrinter.local
如果您得到不同的答案,则问题出在主机名解析上。
您可以通过将 CUPS 的打印机连接 URL 更改为 来解决此问题lpd://BrotherPrinter.local/BINARY_P1
。
或者,如果您希望系统上的所有程序都尝试使用 mDNS 解析不带域部分的所有主机名,您可以添加mdns4
到.hosts:
/etc/nsswitch.conf
(getent hosts
通过执行与配置的常规程序完全相同的操作来测试主机名解析,这可能涉及也可能不涉及连接 DNS 服务器。类似于nslookup
或 的命令dig
是专门的 DNS 测试工具,它将显式联系 DNS 服务器。)
.local
是保留供 mDNS(多播 DNS)使用的特殊域后缀。如果文件hosts:
中的行/etc/nsswitch.conf
包含mdns_minimal
或mdns4_minimal
但不包含mdns
或,则仅当使用后缀mdns4
时,mDNS 才会用于解析主机名。.local
不带后缀的名称.local
是从常规 DNS 服务器查询的。
如果您询问路由器或互联网服务提供商的常规 DNS 服务器,它很可能会返回权威数据,告诉您.local
在全球互联网中绝对不存在这样的域 - 因为.local
域名应该被解析在本地网段中使用多播 DNS,而不是联系任何公共 DNS 服务器。
测试 2:lpd:// 连接
如果两个名称都BrotherPrinter
解析BrotherPrinter.local
为相同的正确 IP 地址(根据您的ping
命令为 192.168.8.101),则问题出在其他地方。下一步是测试您选择使用的实际打印协议的连接性。此处,您已使用lpd://
类型连接 URL 配置了 CUPS,这意味着 CUPS 将尝试使用 TCP 端口 #515 连接到打印机。
您可以使用任何可以与指定端口建立 TCP 连接的程序对此进行测试,并指示基本 TCP 连接是否已成功建立。像telnet
或 netcat ( ) 这样的命令nc
经常用于此类测试。
为了消除主机名解析的额外变量,您可以首先使用打印机的 IP 地址进行测试:
telnet 192.168.8.101 515
或者
nc -v 192.168.8.101 515
如果telnet
命令报告“已建立连接”或nc
显示类似“连接到 192.168.8.101 端口 515 (tcp) 成功!”的信息,则您将知道打印机在连接到 LPD 协议的 TCP 端口时正在响应。这两个命令都会保持与打印机的连接,直到您按Ctrl+C断开连接。
如果命令立即退出并出现类似 的错误消息Connection refused
,则打印机不接受 LPD 协议连接。也许它不支持该打印协议,或者打印机配置中已禁用支持。
如果命令挂起一段时间,最后退出并显示Connection timed out
错误消息,那么最常见的原因是防火墙阻止了从系统到打印机的 TCP 数据包,或从打印机到系统的 TCP 响应数据包,或两者兼而有之。 。 (防火墙通常不会发送导致连接立即终止并显示Connection refused
错误消息的错误响应:它们只是停止数据包并让连接超时。)