无法向CUPS服务器添加IPP网络打印机,求API及连接方案
通过CUPS添加IPP网络打印机的解决方案
问题背景
需要通过HTTP调用(传入打印机主机名、端口)向CUPS服务器添加网络打印机,未在CUPS API文档中找到对应方法,当前使用Java的cups4j库连接CUPS服务器。
可用的CUPS API(IPP原生接口)
CUPS基于IPP(互联网打印协议)实现打印机管理,添加网络打印机需调用IPP的Create-Printer操作,对应HTTP请求规则如下:
- 请求端点:
http://{cups-host}:{cups-port}/printers(默认CUPS端口631) - 请求方法:POST
- 请求格式:符合IPP 2.0+规范的二进制/XML格式请求
- 核心参数:
printer-name:自定义打印机名称device-uri:打印机的连接地址,格式为ipp://{printer_host_name}:{port}/ipp/print(标准IPP设备URI)printer-info:打印机描述信息(可选)printer-location:打印机位置(可选)
- 注意:该操作需要CUPS管理员权限,请求需携带Basic认证信息。
不同的打印机连接方案
根据打印机支持的协议,可选择以下设备URI格式:
- IPP加密连接:
ipps://{printer_host_name}:{port}/ipp/print(适用于支持TLS加密的打印机) - RAW Socket连接:
socket://{printer_host_name}:{port}(适用于仅支持RAW打印的网络打印机,无需IPP协议) - LPD协议连接:
lpd://{printer_host_name}/{queue-name}(传统UNIX打印协议,部分老旧打印机支持) - AirPrint连接:
ipp://{printer_host_name}:{port}/printers/{printer-name}(针对支持AirPrint的苹果生态打印机)
cups4j库的实现方式
cups4j未直接封装添加打印机的API,但可通过手动构造IPP请求实现:
- 初始化
CupsClient并配置CUPS服务器地址与认证信息 - 创建
IppRequest实例,设置操作码为IppOperation.CREATE_PRINTER - 向请求中添加必要属性:
request.addAttribute(new IppAttribute("printer-name", IppTag.NAME, "MyNetworkPrinter")); request.addAttribute(new IppAttribute("device-uri", IppTag.URI, "ipp://192.168.1.100:631/ipp/print")); request.addAttribute(new IppAttribute("printer-info", IppTag.TEXT, "Office Network Printer")); - 发送请求到CUPS服务器的
/printers端点,处理响应结果
相关讨论中提到,需确保CUPS服务器配置允许远程管理员操作,且请求的属性符合CUPS的IPP规范要求。
内容的提问来源于stack exchange,提问作者Krishnan U
相关产品推荐
相关产品推荐

