在Linux上通过USB发送原始数据

8
我正在使用Zebra TLP-2844打印机打印一些标签,在Windows上将EPL指令发送到共享的USB打印机,如下所示:

type Label.prn > \my-pc\zebra

这似乎也适用于串口,使用以下命令:

type Label.prn > COM1

现在我尝试在Linux上做同样的事情,但是它变得非常困难!我的第一个猜测是:

cat Label.prn | /dev/bus/usb/005/002

因为我的打印机在总线005,设备002上(使用lsusb命令检查),但它根本不起作用,因为我得到了以下内容:

bash: /dev/bus/usb/005/002: 权限被拒绝

有什么建议吗?

4个回答

5

您执行的命令

cat Label.prn | /dev/bus/usb/005/002

将尝试运行/dev/bus/usb/005/002,但它不可执行,因此会出现"权限被拒绝"的错误。

正确的命令应该类似于Windows操作系统中的命令。

cat Label.prn > /dev/bus/usb/005/002

不过,我不确定在Linux下是否可以像那样向打印机写任何东西。如果打印机已经正确设置,您也可以尝试以下方法:

lpr Label.prn

没成功 =/ 我忘了提到Linux上没有可用的打印机驱动程序,我正在尝试发送“原始数据”以查看会发生什么! - Lucas d. Prim
我认为你必须是#根用户才能做到那一点。 - karlphillip
3
解决了!似乎无法直接将数据发送到设备,但是当使用CUPS通用文本打印机驱动程序设置打印机并使用lpr时,它完美地工作了!非常感谢! - Lucas d. Prim
2
在连接到 Linux 的 Lexmark 激光打印机上,您实际上可以使用命令“cat file > /dev/usb/lp0”进行打印。文件应该是 ps、pdf、jpg、html 格式的(请参阅文档以了解本地支持的文件格式,这意味着不需要驱动程序)。 - vjangus

5

如果有人想要访问原始的USB打印机端口,"权限被拒绝"的问题可以通过将您的用户添加到"lp"组来解决,方法如下:

$ sudo usermod -aG lp USERNAME

其中USERNAME是您的用户名。


3

很抱歉我的英文不好。

我在这里测试了一下,我的打印机TLP2844通过USB连接到了我的带有Linux系统的嵌入式Arm9板上。

我在命令提示符中输入:

printf "OD\r\nN\r\nD5\r\nS2\r\nZT\r\nQ128, 24\r\nq400\r\nA15,10,0,2,1,1,N,\"TESTE\"\r\nP1\r\nFE\r\n" > /dev/lp0

然后...打印出了TEST


3
  1. 您应该更改 /dev/usb/lp0 设备的访问模式:sudo chmod a+w /dev/usb/lp0
  2. 然后,您可以使用复制命令打印标签:cp test.zpl /dev/usb/lp0

此外,您也可以在 Sublime Text 中创建自己的构建系统:

{
    "cmd": ["cp", "$file", "/dev/usb/lp0"],
    "encoding": "utf8"
}

并在编辑标签完成后立即按Ctrl+B键将文件发送到打印机。或者,您可以尝试使用我的工具通过TCP/IP向打印机发送zpl标签:https://github.com/kashamalasha/AutoIt_ZebraTester。它是用AutoIt脚本语言编写的,因此您需要安装AutoIt才能构建它。不幸的是,只有俄语描述,没有英语描述,但如果您需要,我很快就可以写出来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接