在linux上通过usb发送原始数据

Posted

技术标签:

【中文标题】在linux上通过usb发送原始数据【英文标题】:sending raw data through usb on linux 【发布时间】:2010-08-19 21:55:04 【问题描述】:

我正在 Zebra TLP-2844 打印机上打印一些标签,并且通过将 EPL 指令发送到共享 USB 打印机,在 Windows 上做得很好,如下所示:

输入 Label.prn > \my-pc\zebra

它似乎也可以与串行端口一起使用

输入 Label.prn > COM1

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

猫标签.prn | /dev/bus/usb/005/002

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

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

有什么猜测吗?

【问题讨论】:

【参考方案1】:

你执行的命令

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 上的打印机没有可用的驱动程序,我正在尝试像“原始数据”一样发送它来看看会发生什么! 我认为你必须是 #root 才能做到这一点。 解决了!将数据直接发送到设备似乎是不可能的,但是当使用 CUPS 通用文本打印机驱动程序设置打印机并使用 lpr 时,它可以完美运行!非常感谢! 在连接linux的利盟激光打印机上,其实可以“cat file > /dev/usb/lp0”。该文件应为 ps、pdf、jpg、html(请参阅文档了解本机支持的文件,即不需要驱动程序)。【参考方案2】:

如果其他人试图访问原始 USB 打印机端口;通过将您的用户添加到组“lp”来规避“权限被拒绝”问题,如下所示:

$ sudo usermod -aG lp USERNAME

其中 USERNAME 是您的用户名。

【讨论】:

【参考方案3】:

对不起,我的英语。

我在这里测试过,我的打印机 TLP2844 通过 USB 连接,在我的嵌入式 arm9 板上使用 linux。

我输入了命令提示符:

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

和... TEST 打印出来的

【讨论】:

【参考方案4】:
    您应该更改 /dev/usb/lp0 设备的访问模式:sudo chmod a+w /dev/usb/lp0 然后您可以使用复制命令打印标签: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 来构建它。不幸的是,没有英文描述,只有俄文,但如果你需要的话,我可以很快写出来。

【讨论】:

以上是关于在linux上通过usb发送原始数据的主要内容,如果未能解决你的问题,请参考以下文章

linux 如何写发送一个数据到usb的应用

GNU/Linux - Python3 - PySerial:如何通过 USB 连接发送数据?

如何通过 USB 将数据从 Windows 发送到嵌入式 Linux

如何通过 USB 使用 C# 将原始 IPL 发送到 intermec pm4i 打印机

52单片机通过usb 串口发送数据给linux,minicom来接收

如何通过usb向打印机发送打印数据,求一个usb例子