解决Android搜不到CUPS网络打印机

问题

字面意思,在Android上选择打印时,网络打印机若隐若现,或者根本搜不到

手动添加的解决方法一点都不优雅

开始之前

首先请确保:

  • 已安装CUPS并添加打印机(记得安装驱动)
  • 已安装avahi

使用如下命令检测打印服务:

$ avahi-browse -rt _ipp._tcp
+    br0 IPv4 Lenovo M1520D Pro @ quq233                    Internet Printer     local
=    br0 IPv4 Lenovo M1520D Pro @ quq233                    Internet Printer     local
   hostname = [quq233.local]
   address = [192.168.1.114]
   port = [631]
   txt = ["printer-type=0x809056" "Copies=T" "Duplex=T" "mopria-certified=1.3" "URF=V1.4,CP1,W8,PQ4,RS600,DM1,FN3" "TLS=1.2" "UUID=8391fb6d-e4e9-39ea-4d43-742f9f551b46" "pdl=application/pdf,application/postscript,image/jpeg,image/png,image/pwg-raster,image/urf" "product=(M1520D Pro)" "priority=0" "note=\228\185\166\230\136\191" "adminurl=https://quq233.local.:631/printers/Lenovo_M1520D_Pro" "ty=Lenovo M1520D Pro, 1.51" "rp=printers/Lenovo_M1520D_Pro" "qtotal=1" "txtvers=1"]

注意到,默认的adminurl竟然是https

解决方案

1.配置自定义 Avahi 服务文件

默认情况下,在 CUPS 开启 BrowseLocalProtocols dnssd 配置时,CUPS 会通过 D-Bus 接口向 Avahi 发送注册请求,由 Avahi 向局域网广播 IPP 打印服务;而Avahi启动时会自动加载 /etc/avahi/services/ 目录下的静态 XML 服务定义,直接向网络发布指定广播数据,绕过了CUPS

sudo bash -c 'cat << "EOF" > /etc/avahi/services/lenovo_printer.service
<?xml version="1.0" standalone="no"?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">Lenovo M1520D Pro</name>

  <service>
    <type>_ipp._tcp</type>
    <subtype>_universal._sub._ipp._tcp</subtype>
    <subtype>_mopria._sub._ipp._tcp</subtype>
    <port>631</port>
    <host-name>quq233.local</host-name>
    <txt-record>txtvers=1</txt-record>
    <txt-record>qtotal=1</txt-record>
    <txt-record>rp=printers/Lenovo_M1520D_Pro</txt-record>
    <txt-record>ty=Lenovo M1520D Pro</txt-record>
    <txt-record>adminurl=http://192.168.1.114:631/printers/Lenovo_M1520D_Pro</txt-record>
    <txt-record>pdl=application/pdf,image/jpeg,image/pwg-raster,image/urf</txt-record>
    <txt-record>URF=V1.4,CP1,W8,PQ4,RS600,DM1,FN3</txt-record>
    <txt-record>mopria-certified=1.3</txt-record>
    <txt-record>TLS=1.0</txt-record>
  </service>

  <service>
    <type>_http._tcp</type>
    <port>631</port>
    <txt-record>path=/printers/Lenovo_M1520D_Pro</txt-record>
  </service>
</service-group>
EOF'

2.禁用cups自带的dnssd广播,防止冲突

若保持 /etc/cups/cupsd.conf 中的 BrowseLocalProtocols dnssd 开启,CUPS 会继续发布旧有广播,与静态 XML 冲突。将该参数修改为 none,可彻底关闭 CUPS 的 D-Bus 广播请求,由 Avahi 独占输出干净的静态服务配置。

因此,编辑/etc/cups/cupsd.conf,将BrowseLocalProtocols dnssd改为BrowseLocalProtocols none

3.然后重启avahi和cups,再次探测

$ sudo systemctl restart cups avahi-daemon
$ sudo systemctl status avahi-daemon
● avahi-daemon.service - Avahi mDNS/DNS-SD Stack
     Loaded: loaded (/usr/lib/systemd/system/avahi-daemon.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-08-10 22:03:27 CST; 3s ago
 Invocation: cae8406b96f14cc09cdaed0ee9a8a1e6
TriggeredBy: ● avahi-daemon.socket
   Main PID: 216108 (avahi-daemon)
     Status: "avahi-daemon 0.8 starting up."
      Tasks: 2:: (limit: 70246)
     Memory: 1.4M (peak: 1.9M)
        CPU: 12ms
     CGroup: /system.slice/avahi-daemon.service
             ├─::216108 "avahi-daemon: running [quq233.local]"
             └─::216109 "avahi-daemon: chroot helper"

Aug 10 22:03:27 quq233 avahi-daemon[216108]: Successfully called chroot().
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Successfully dropped remaining capabilities.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Loading service file /services/lenovo_printer.service.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Joining mDNS multicast group on interface br0.IPv4 with address 192.168.1.114.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: New relevant interface br0.IPv4 for mDNS.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Network interface enumeration completed.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Registering new address record for 2001:db8::100 on br0.*.
Aug 10 22:03:27 quq233 avahi-daemon[216108]: Registering new address record for 192.168.1.114 on br0.IPv4.
Aug 10 22:03:28 quq233 avahi-daemon[216108]: Server startup complete. Host name is quq233.local. Local service cookie is 909708984.
Aug 10 22:03:29 quq233 avahi-daemon[216108]: Service "Lenovo M1520D Pro" (/services/lenovo_printer.service) successfully established.
$ avahi-browse -rt _ipp._tcp
+    br0 IPv4 Lenovo M1520D Pro                             Internet Printer     local
=    br0 IPv4 Lenovo M1520D Pro                             Internet Printer     local
   hostname = [quq233.local]
   address = [192.168.1.114]
   port = [631]
   txt = ["TLS=1.0" "mopria-certified=1.3" "URF=V1.4,CP1,W8,PQ4,RS600,DM1,FN3" "pdl=application/pdf,image/jpeg,image/pwg-raster,image/urf" "adminurl=http://192.168.1.114:631/printers/Lenovo_M1520D_Pro" "ty=Lenovo M1520D Pro" "rp=printers/Lenovo_M1520D_Pro" "qtotal=1" "txtvers=1"]

发现已经变成http了,Android也可以正常访问

还有另一个解决方案

其实可以直接在CUPS中修改地址为http,编辑/etc/cups/cupsd.conf中的以下内容

# Disable TLS encryption defaults for local queries
DefaultEncryption Never

# Tell CUPS to advertise using standard HTTP
BrowseWebIF Yes

# Re-enable CUPS automatic mDNS broadcasting
BrowseLocalProtocols dnssd

然后重启服务,sudo systemctl restart cups avahi-daemon

虽然直接修改 cupsd.conf 也能生效,但 Linux 系统管理员通常更倾向于使用 Avahi 静态 XML 配置文件,原因如下:

  1. 子类型(Subtype)可控性高(_mopria / _universal CUPS 原生的 mDNS 自动广播机制在部分 Linux 发行版或特定 CUPS 版本中,无法稳定且完整地注入 Android 专属的 Mopria 标签(_mopria._sub._ipp._tcp)。通过静态 XML 文件,可以精准控制广播中包含的子类型元数据。
  2. 版本更新抗覆盖(持久性) 包管理器(如 aptpacman)在升级系统组件时,有可能将 /etc/cups/cupsd.conf 恢复为默认的安全配置;而放置在 /etc/avahi/services/ 目录下的自定义配置文件则不会在软件更新时被系统覆盖。

暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇