我已经成功地让 Samba 和 CUPS 协同工作,为 Windows 客户端(自 95 以来的任何变体的 IA32 和 x64)提供良好、一致的打印界面,仅使用 Postscript 驱动程序。 smb.conf 的打印相关部分是:
[global]
load printers = yes
printing = cups
printcap name = cups
Run Code Online (Sandbox Code Playgroud)
后来这些分享:
[printers]
comment = All Printers
browseable = no
path = /var/spool/samba
printable = yes
guest ok = no
read only = yes
create mask = 0700
[print$]
comment = Printer Drivers
path = /var/lib/samba/printers
browseable = yes
read only = yes
guest ok = no
Run Code Online (Sandbox Code Playgroud)
这成功地枚举了所有 CUPS 打印机,并且客户端可以正常打印。
我遇到的问题是,Windows 客户端除了自己的作业之外几乎看不到队列中的任何作业,而且只在很短的时间内看到,大概是在作业假脱机到服务器时。这会产生连锁反应,如果有人想取消其中一项工作,他们要么关闭打印机电源(!),要么要求我这样做。
我的印象是, …
我们正在尝试组装一个免费软件堆栈来获取详细的打印作业统计信息,类似于Papercut Printlogger为原始打印队列所做的事情。我们一直在Debian GNU 不是 Unix (GNU)/ Linux中使用Pykota Tee for Cups (Tea4Cups)测试Apple Common Unix 打印系统(Cups) 。
在 Cups 中,惠普(HP)打印机控制语言(PCL) 打印作业文件包括 HP打印机作业语言(PJL) 标题,其中包含作业信息,例如份数、双面或单面、彩色或黑白等。HP 甚至在同一个文档中定义了 PCL 和 PJL。
在Microsoft (MS) Windows中,每个打印作业都作为两个文件排队:一个Spool (SPL) 文件,其中包含打印文件本身,无论使用哪种语言:Adobe Postscript (PS)、HP PCL、Epson 打印机标准代码(Esc/ P),无论如何;以及包含 PJL 信息的影子(SHD) 文件。
据我们所知,Cups 中的 Postscript 打印作业不包含与 PJL 或 SHD 等效的任何内容,无论是在 PS 文件本身还是在单独的文件中。
那么,在Cups中是否可以获取这样的打印作业信息呢?
我有一个 cups 服务器,上面配置了一台共享打印机。它可以毫无问题地打印测试页。
printername (Idle, Accepting Jobs, Shared)
Description: desc
Location:
Driver: Zebra ZPL Label Printer (grayscale, 2-sided printing)
Connection: socket://172.20.50.26
Defaults: job-sheets=none, none media=oe_w288h432_4x6in sides=one-sided
Run Code Online (Sandbox Code Playgroud)
这是 lpstat -t 的输出。它显示打印机空闲并接受请求
admin@SERVER:~$ lpstat -t
scheduler is running
no system default destination
device for printername: socket://172.20.50.26
printername accepting requests since Thu 26 Jan 2012 01:29:35 PM CET
printer printername is idle. enabled since Thu 26 Jan 2012 01:29:35 PM CET
Run Code Online (Sandbox Code Playgroud)
现在,当我想通过 LPR 命令向它发送打印作业时,它无法识别打印机
/usr/bin/lpr -P printername test.pdf
Run Code Online (Sandbox Code Playgroud)
结果
lpr: ttn_seg_zebra1: unknown printer …Run Code Online (Sandbox Code Playgroud) 如何使用命令行工具显示打印机信息,例如打印机描述或打印机位置?
lpstat -t列出打印机名称、类别和打印机设备,但不列出打印机描述或位置。有没有办法在不使用 http 或 GUI 界面的情况下获取这些信息?
我有一个定义了两个打印队列的 CUPS 服务器。一旦定义了这一点,同一子网上的所有 CUPS 客户端都可以自动看到两个打印队列,没问题。
现在我在一个单独的子网上有一组机器,可以通过路由器从第一个子网访问。
如何在第二台机器上启用 CUPS 浏览,以便他们可以看到第一台机器上定义的打印队列?
让我们调用服务器 ABC7。第一个子网是 ABC0/24。第二个子网是ABD0/24,两个网络上都有一个带臂的路由器。
这让我发疯。UPS 向我们的系统发送一个 1400x800 的运输标签 GIF 图像,该图像应该非常适合 4x6 页面。
不幸的是,我似乎无法正确使用命令行选项来实现它。
我们使用带有网络适配器的 Eltron/Zebra 2844,并使用 CUPS 从我们的 Ubuntu 8.04 服务器打印。我们使用了正确的驱动程序,并且测试页打印正确。
不管我怎么尝试,它都坚持打印 6 页的 UPS 标签,每页都有一点标签,或者太小了。
我尝试了无数不同的 lpr 设置,其中大多数都会产生垃圾。我得到的最接近的是这个:
lpr -P Eltron2844 -o natural-scaling=55 -o page-right=0 -o page-left=0 -o Landscape -o media="4x6" ./1ZY437560399620027.gif
但它会导致页面上的图像太小。它太短了大约一英寸,两边都有 1/2" 的边距。如果我将比例调高到 56,它会将图像分解成两页,然后将其压扁。
有任何想法吗?
我正在制作一张定制的 Debian CD 来安装带有我们软件的 Debian 网络服务器,它必须处理一台打印机,它可以是任何现有的打印机。如何添加所有打印机驱动程序,以及 CUPS 如何以正确的方式安装它?服务器将不会连接到 Internet。
我想到了一个包含 deb 文件的目录,在 apt/sources.list 中声明为主要来源,但是该文件夹中放置哪些文件?