如何从命令行以及通过 CUPS 打印?

如何从命令行以及通过 CUPS 打印?

我有一台打印机,用于两个用途:

  • 常规文档的打印(Word、网页等)
  • 从命令行直接打印(由 完成echo "text" > /dev/usb/lp0

在以前的 Ubuntu 版本中,这一切都运行良好。然而,最近我们升级到 11.10 并遇到了一个问题。首先,打印机不再添加到 /dev/usb。所以我无法回显到此路径,也无法从命令行进行打印。

经过一番折腾,我终于找到了解决方法。解决方法是编辑/etc/modprobe.d/blacklist-cup-usblp.conf。该文件内容如下:

# cups talks to the raw USB devices, so we need to blacklist usblp to avoid
# grabbing them
blacklist usblp

注释掉这个黑名单后,设备在 /dev/usb 中正确显示为 lp0。我对 lp0 的权限有疑问,但 Luis Felipe Barrera Mora 的回答解决了这个问题。

但是,我现在有一个主要问题需要解决。在我评论黑名单之后,打印机在打印 Word 文档时停止工作。这是合乎逻辑的,因为我禁用了 CUPS 需要的某些功能。所以基本上我现在只能选择启用常规 CUPS 打印而不启用命令行打印,或者启用命令行打印而不启用 CUPS 打印。

更新

为了完整起见:我实际上同时连接了两台打印机。一台用于使用 CUPS 和命令行进行打印。另一台 - Epson 收据打印机 - 仅用于命令行打印。我花了很多天尝试使用 CUPS 运行它,但这是不可能的。然而,这意味着该lpr命令不会解决问题,因为我无法让第二台打印机在 CUPS 下运行。我真的需要能够同时访问/etc/dev/lp0(或类似路径)和使用 CUPS 进行打印。

答案1

我有同样的问题,如果您总是向文件 lp0 添加权限,则必须编辑打印机规则:

$ gksudo gedit /lib/udev/rules.d/70-printers.rules

添加[, MODE="0666"]

该文件包含:

ACTION=="add", ... KERNELL="lp*" ... , MODE="0666"

答案2

为什么不使用 lpr 从命令行打印?例如:

echo "text" > /tmp/someFileName
lpr -P YourPrinter /tmp/someFileName

这是一种解决方法,但应该是一种无需更改某些权限即可完成您所需操作的简单方法......

答案3

打开 Web 浏览器来http://localhost:631/配置 CUPS。您应该能够通过 来从命令行进行打印echo "text" | lpr。使用lpstat -t查看 CUPS 的所有状态信息、lpstat -d查看系统的默认打印目标、了解man lpstat更多信息man lpr以及指定哪台打印机。

所有打印都应通过 CUPS 进行 - 它管理队列、打印机……

答案4

我遇到了类似的问题。我选择做的是确保只有收据打印机通过 USB 连接(通用打印机将通过网络接口连接)。这样我就可以删除黑名单,直接打印到设备,并使用 CUPS 作为网络打印机。

这其实并不是最佳选择。如果能够通过 USB 连接所有设备,然后选择我们不想让 usblp 抓取的设备,那就太好了。然而,与此同时,这似乎是最好的选择。这可能不是你想听到的,但这是我发现的唯一方法。

现在,对于一般读者来说,收据打印机通常不通过 CUPS 连接的原因是,在零售环境中,速度至关重要,而并发性不是关键因素。您不需要打印机管理、队列管理等。您真正需要的是,当它打印时,它会立即打印。不是几秒钟,而是马上。每隔几秒钟,您就可以减少工作流程,而排队的每个人都不用等待。乘以队伍长度,您就会看到问题。因此,每一步的性能都至关重要,而且由于您通常只有一台收据打印机,而且它通常只为销售点应用程序打印,因此 CUPS 的成本远远高于它所提供的。

这并不是说没有可以通过 CUPS 进行设置的环境。餐厅的厨房里往往有类似的打印机,而且那里的并发问题很严重,所以你会在那里使用 CUPS。然而,它并不总是最好的工具,零售收据打印机并不遵循 CUPS 所遵循的相同假设。

相关内容