根据我当前的配置,可以在 Windows 上安装打印机,但向导不会提示输入凭据,并且无法进行打印。尽管在 url 中提供凭据( http://some_user:password@serverip:port/printers/myprinter
),Windows 始终使用本地帐户名,并且似乎没有尝试基本身份验证(如链接帖子中所述)。
Denying user "local_windows_user" access to printer "myprinter"...
Print-Job client-error-not-authorized: Not allowed to print.
[Client x] Returning IPP client-error-not-authorized for Print-Job
我的配置中是否缺少某些内容,以便 Windows 客户端不会强制提示输入密码?即使在 Windows 中配置端口并指定凭据也不会改变结果。是否可以让 CUPS 仅查看 url 进行身份验证作为解决方法?
我已尝试在当前允许的位置上使用基本身份验证,但这导致安装失败,而不是到目前为止出现提示。
允许 some_user 通过 Web 界面使用 myprinter 进行打印。当提示凭据时,连接将升级为 https。测试并DefaultEncryption Never
没有改变结果。
cupsd.conf
Listen localhost:631
Listen serverip:port
Browsing On
BrowseLocalProtocols dnssd
DefaultAuthType Basic
<Location />
Order allow,deny
</Location>
# Restrict access to the admin pages...
<Location /admin>
AuthType Default
Order allow,deny
Require user @SYSTEM
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
AuthType Default
Require user @SYSTEM
Order allow,deny
</Location>
# Restrict access to log files...
<Location /admin/log>
AuthType Default
Require user @SYSTEM
Order allow,deny
</Location>
# Set the default printer/job policies...
<Policy default>
# Job/subscription privacy...
JobPrivateAccess default
JobPrivateValues default
SubscriptionPrivateAccess default
SubscriptionPrivateValues default
<Limit Get-Printer-Attributes>
#AuthType Default
Order allow, deny
</Limit>
<Limit Create-Job Print-Job Print-URI Validate-Job>
Order deny, allow
AuthType Basic
</Limit>
[ommitted]
版本
Server: Fedora 37 Server
Cups Version: cups-2.4.2-5.fc37
Windows Version: Windows 10 Pro 21H2 (tested, not working), Windows 10 Pro 22H2 (tested, not working)
笔记
在普通 Linux Mint 21.1 Live 上进行了测试。所有打印机都会自动检测并在打印时提示输入密码。在服务器上,用户登录为some_user
。
当需要基本身份验证时Get-Printer-Attributes
Windows 将显示一般错误“无法连接..验证打印机名称等...”
杯子日志:
POST /printers/myprinter HTTP/1.1
cupsdSetBusyState: newbusy="Active clients", busy="Active clients"
[Client 6] Read: status=200, state=6
[Client 6] No authentication data provided.
[Client 6] 2.0 Get-Printer-Attributes 6
Get-Printer-Attributes ipp://some_user:password@serverip:port/printers/myprinter
cupsdIsAuthorized: username=""
[Client 6] Returning HTTP not authorized for Get-Printer-Attributes (ipp://some_user:password@serverip:port/printers/myprinter
[Client 6] cupsdSendHeader: code=426, type="text/html", auth_type=1
[Client 6] HTTP_STATE_WAITING Closing for error 32 (Broken pipe)
[Client 6] Closing connection.
cupsdSetBusyState: newbusy="Not busy", busy="Active clients"
在浏览器中访问该 URL 时,我收到警告:“您即将使用用户名登录...,但该页面不需要身份验证”。如果继续,我会进入重定向页面,该页面会在约 1 秒后重新加载,然后系统会提示我输入凭据。也许基本身份验证提示之前的 html 响应是导致 Windows 崩溃的原因。
当尝试使用基本身份验证将 URL 添加到通用网络服务器时
在这种情况下,Windows(和浏览器)将立即提示输入密码。
答案1
http 连接的问题已解决,https 不确定。我相信自签名证书与 IP 地址的结合会导致问题。或许可以将其添加到受信任的根证书中,但 Windows 似乎并不满足于此。如果我能相信文档(可能已经过时),它仍然依赖于 Internet Explorer。因此,如果在此处打开且没有错误,则还应该连接打印机。
基本上,使用Require [user or group]
和AuthType Basic
会导致 CUPS 立即提示输入凭据,但仅此还不够,因为 CUPS 会尝试将连接升级到 https(返回 html 页面而不是提示)。
在常规部分中添加DefaultEncryption IfRequested
将阻止该行为,并且 Windows 会拾取提示。