在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发送原始数据的主要内容,如果未能解决你的问题,请参考以下文章
GNU/Linux - Python3 - PySerial:如何通过 USB 连接发送数据?
如何通过 USB 将数据从 Windows 发送到嵌入式 Linux
如何通过 USB 使用 C# 将原始 IPL 发送到 intermec pm4i 打印机