首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法通过MacOS塞拉利昂的杯子打印

问无法通过MacOS塞拉利昂的杯子打印
EN

Unix & Linux用户
提问于 2016-10-21 06:33:30
回答 2查看 2.7K关注 0票数 3

我们有一个CUPS服务器运行在Ubuntu14.04上,配置了大约10台HP打印机。我们将Windows、Linux和Mac客户端完美地打印到服务器上。

完美无缺,直到最近一些Mac升级到了塞拉。现在,如果用户试图通过服务器打印,客户端的行为就像cups一样正常。作业通过服务器进行处理,作业日志显示打印的作业是否正常。然而,打印机什么也没有出来。Mac客户端可以使用AirPrint直接打印到打印机。

我们有一个旧版本的cups,所以我们用最新的cups构建了一个新的16.04服务器,同样的结果。我们可以从9100端口上的打印服务器直接打印到打印机,以便该部分正常工作。

假设问题不在于cups,而在于MacOS 12.12,这是否安全?有人有什么疑难解答吗?

EN

回答 2

Unix & Linux用户

发布于 2017-02-01 17:12:28

MacOS机器使用自己的cups服务器。对于现代HP激光打印机,cups可以生成PostScript输出,但对目标打印机有一些特殊设置。linux机器上的cups服务器解析PostScript输入并使用自己的设置重新生成输出。在linux上,调用filter脚本/usr/lib/cups/filter/ HP来为大多数HP激光打印机生成输出。问题是来自PostScript的MacOS输出,这似乎在linux下的cups中被忽略。使用空文件调用hpps筛选脚本并生成空页。打印机会忽略这一点。我们找到了解决这个问题的两个解决办法:

1)将来自压缩为gzip的MacOS的输出发送到linux服务器。cups服务器解压缩输出并将其输送到hpps过滤器。过滤器将源文件连同他自己的页眉和页脚发送到打印机。如果没有特殊设置(例如横幅),来自过滤器的输出与MacOS输出是完全相同的。若要达到此目的,请添加

代码语言:javascript
复制
    ?compression=gzip

到MacOS cups服务器中的cups URI。调用https://localhost:631您的浏览器(启用终端中的接口,并使用“杯式WebInterface=yes”)。选择“修改打印机”,验证并选择IPP或IPPS打印协议。目标URI包含前一个URI。在上面附加一行,例如:

代码语言:javascript
复制
    ipps://<ubuntu-cups-server>/printers/<printername>?compression=gzip

保存描述和模型设置并保存。

2)在linux服务器上安装一个与HP打印机具有相同目标URI的原始打印机。但是选择原料作为打印机的制造者和模型。例如,如果您的打印机名为“hp1”,则添加“hp1_raw”作为第二台打印机。在MacOS中,使用原始打印机URI作为目标。

代码语言:javascript
复制
    ipps://<ubuntu-cups-server>/printers/hp1_raw

风险仍然很小。如果有人在linux上向原始队列发送一个非PostScript文件,打印机将将此文件打印为文本。通过打印一个PDF文件,你可以得到许多润滑纸。

票数 1
EN

Unix & Linux用户

发布于 2017-03-23 14:02:24

来自hpps包的hplip过滤器已损坏。应用修补程序:

代码语言:javascript
复制
--- /usr/lib/cups/filter/hpps.shipped       2017-01-13 17:23:49.000000000 +0100
+++ /usr/lib/cups/filter/hpps       2017-03-23 14:51:09.904355996 +0100
@@ -144,6 +144,9 @@

 try:
     job_id, username, title, copies, options = args[0:5]
+    if len(args) > 5:
+        input_fd = os.open(args[5], os.O_RDONLY)
+
     job_id = int(job_id)
 except IndexError:
     bug("Invalid command line: invalid arguments.")
@@ -376,7 +379,7 @@

 while True:
     try:
-        data = os.read(0, 4096)
+        data = os.read(input_fd, 4096)
     except IOError:
         bug('Unable to read from standart input')
         sys.exit(CUPS_FILTER_FAILED)
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/317859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档