linux下使用小票打印
linux下使用小票打印
打印机: Xprinter XP-58IIH
指令支持: ESC/POS
接口: USB, 蓝牙
Linux系统: Centos7
蓝牙配对很快, 配对好后就是连接状态. 但很快变为断开, 且连接灰显, 无法点击.
USB连接后, 设备下添加找不到该打印机.
命令可以访问.
# dmesg |grep usb 可以找到这个usb设备.
[27129.204196] usb 5-1: USB disconnect, device number 2
[27131.204164] usb 4-1: USB disconnect, device number 23
[27131.204810] usblp0: removed
[27131.661125] usb 4-1: new full-speed USB device number 24 using uhci_hcd
[27132.175092] usb 4-1: device not accepting address 24, error -71
[27132.885079] usb 4-1: new full-speed USB device number 26 using uhci_hcd
[27133.410080] usb 4-1: new full-speed USB device number 27 using uhci_hcd
[27146.910034] usb 4-1: new full-speed USB device number 28 using uhci_hcd
[27147.063419] usb 4-1: New USB device found, idVendor=0483, idProduct=070b
[27147.063428] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[27147.063433] usb 4-1: Product: USB Printing Support
[27147.063439] usb 4-1: Manufacturer: Printer-58
[27147.063443] usb 4-1: SerialNumber: ÿ
[27147.070697] usblp 4-1:1.0: usblp0: USB Bidirectional printer dev 28 if 0 alt 0 proto 2 vid 0x0483 pid 0x070B
# ls /dev/usb/
hiddev0 lp0
这里找到的lp0就是打印机了.
# stat /dev/usb/lp0 可以查看状态.
文件:"/dev/usb/lp0"
大小:0 块:0 IO 块:4096 字符特殊文件
设备:5h/5d Inode:362047 硬链接:1 设备类型:b4,0
权限:(0660/crw-rw----) Uid:( 0/ root) Gid:( 7/ lp)
环境:system_u:object_r:printer_device_t:s0
最近访问:2018-11-30 19:29:30.747413683 +0800
# echo "Hello" > /dev/usb/lp0
尝试打印.
# echo "$(date)" > /dev/usb/lp0
$ echo "Hello" > /dev/usb/lp0
bash: /dev/usb/lp: Permission denied
$ cat group |grep lp // 查看用户组信息
$ sudo cat gshadow
$ sudo gpasswd -a toma lp //将当前用户toma添加到用户组 lp 里
$ sudo cat gshadow
$ cat group |grep lp
$ echo "Hello" > /dev/usb/lp0
$ sudo echo "Hello" > /dev/usb/lp0
将用户添加到 lp 组,再试,若仍然有问题,重启后再试。
理论是不用安装驱动就可以通过这种方式打印,至少打印英文和数字。如下有使用脚本按格式打印的参考。
https://mike42.me/blog/2015-03-getting-a-usb-receipt-printer-working-on-linux
https://github.com/mike42/escpos-php
=============
https://mrchi.cc/p/ea7c782e774e508f88fb16023ed51c7e/
使用Python操作ESCPOS协议热敏打印机 2017-10-30
硬件:芯烨(Xprinter) XP-58IIQ USB接口热敏打印机,兼容ESC/POS打印协议;
软件:python-escpos==3.0a3,是一个alpha测试版本,接口在将来可能会变动。
pip install python-escpos
如果在树莓派上使用,需要先安装 libjpeg8-dev 包
sudo apt-get install libjpeg8-dev
把当前用户加入到lp组,使其能够访问打印机
sudo usermod -a -G lp pi
定义打印机实例
所有的打印机类都定义于escpos.printer文件中。
USB打印机
class escpos.printer.Usb(idVendor, idProduct, timeout=0, in_ep=130, out_ep=1, *args, **kwargs)
在创建打印机实例之前,你需要获取一些打印机的参数。
使用lsusb命令,在输出中得到VendorID和Product ID,它们的格式是xxxx:xxxx,位置在设备名之前。
$ lsusb
Bus 005 Device 011: ID 0483:070b STMicroelectronics
根据Vendor ID和Product ID,可以得到“EndPoint”地址。
# lsusb -vvv -d 0483:070b | grep bEndpointAddress
bEndpointAddress 0x81 EP 1 IN
bEndpointAddress 0x02 EP 2 OUT
$ lsusb -vvv -d 0483:070b | grep bEndpointAddress
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
bEndpointAddress 0x81 EP 1 IN
bEndpointAddress 0x02 EP 2 OUT
得到:“EndPoint”地址IN方向为0x81,OUT方向为0x02。
用这些参数可以新建一个Usb类实例。timeout参数表示等待USB接口超时时间,默认为0。
from escpos import printer
p = printer.Usb(0x1a2b, 0x1a2b, timeout=0, in_ep=0x81, out_ep=0x02)
该类使用pyusb和libusb与USB接口打印机通信,不适用于USB转串口适配器设备,只适用于原生USB驱动。
ESC/POS API详解
所有的打印机类都继承自escpos.escpos.Escpos,该Escpos抽象基类定义了打印时的各种方法。
先来个demo吧:
from escpos.printer import Usb
p = Usb(0x0483, 0x070b, 0, 0x81, 0x02)
p.hw('INIT')
p.textln('Hello, world!')
p.image('mafengwo.png')
p.set(align='center')
p.qr('https://i.senguo.cc', size=7,)
p.barcode('9787111436737', 'EAN13')
p.close()
====================
更快找到并识别USB设备的办法:
$ dmesg | tail
---------- //拔掉USB线:----------
[255085.496255] usb 4-1: USB disconnect, device number 7
[255085.496447] usblp1: removed
---------- //插回USB线:----------
[255106.739497] usb 4-1: new full-speed USB device number 8 using uhci_hcd
[255106.922452] usb 4-1: New USB device found, idVendor=0483, idProduct=070b, bcdDevice= 2.54
[255106.922455] usb 4-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[255106.922458] usb 4-1: Product: USB Printing Support
[255106.922459] usb 4-1: Manufacturer: Printer-58
[255106.922461] usb 4-1: SerialNumber: ÿ
[255106.929662] usblp 4-1:1.0: usblp1: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x0483 pid 0x070B
$
==============
方式二:需要安装cups服务,需要打印机的ppd文件。
ppd文件:数据库生成的PPD文件包含有关重要打印机功能,可用选项以及如何构建渲染器(通常为Ghostscript)命令行的所有信息,具体取决于用户对选项的选择。
参见:https://www.cnblogs.com/sztom/p/10686925.html
----------------------------
====================
https://github.com/klirichek/zj-58
Zj-58, Zj-80 and other receipt printers
CUPS filter for cheap thermal receipt printers as Zijiang ZJ-58, XPrinter XP-58, JZ-80 with cutter, Epson TM-T20, and may be any other printers understanding ESC/POS commands.
Originally it was reverse-engineered filter for Zijiang zj-58 with it's specific PPD, but later it is revealed that it actually works with many other cheap 58mm printers, like Xprinter XP-58.
https://github.com/klirichek/zj-58/blob/master/zj58.ppd
==========
linux下使用小票打印的更多相关文章
- 解决linux下按退格键出现 ^? 的问题
处理办法:使用stty命令修改. stty命令语法 stty是linux下改变和打印终端设置的常用命令. stty(选项)(参数) -a:以容易阅读的方式打印当前的所有配置: -g:以stty可读方式 ...
- Linux下追踪函数调用,打印栈帧
事情的起因是这样的,之前同事的代码有一个内存池出现了没有回收的情况.也就是是Pop出来的对象没有Push回去,情况很难复现,所以在Pop里的打印日志,跟踪是谁调用了它,我想在GDB调试里可以追踪调用的 ...
- Linux下通用打印系统CUPS使用教程
昨天研究了一下关于在Linux下实现打印操作的相关内容,整理记录如下: 1.什么是CUPS CUPS(Common UNIX Printing System,即通用Unix打印系统)是FedoraCo ...
- 在Linux下使用命令行打印文件
近期需要将数学笔记打印出来复习,才发现Linux KDE环境下的默认PDF软件Okular根本无法将我在GoodNotes B5大小的页面写下的内容自适应地放大到A4纸上,只能以页面的原始尺寸打印.然 ...
- (转载)linux下各个文件夹的作用
linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基 ...
- 例解 Linux 下 Make 命令
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一.管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题.本文我们将用一些实例来讨论 make ...
- Linux下的几个好用的命令与参数
将所有文件的编码,转换为UTF-8 find . ! -type d -exec enca -L zh_CN -x UTF-8 {} \; 将指定目录下所有文件权限设定为644 find . ! -t ...
- 【转】Linux下Fork与Exec使用
Linux下Fork与Exec使用 转自 Linux下Fork与Exec使用 一.引言 对于没有接触过Unix/Linux操作系统的人来说,fork是最难理解的概念之一:它执行一次却返回两个值.for ...
- linux 下 systemd-udevd 服务解析
最近在看linux下重定向的时候看到 的这个系统的服务,所以记下来备忘. 描述:systemd-udevd是监听内核发出的设备事件,并根据udev规则处理每个事件. 选项: --daemon 脱离控制 ...
随机推荐
- RabbitMQ进阶使用-延时队列的配置(Spring Boot)
依赖 MAVEN配置pom.xml <dependency> <groupId>org.springframework.boot</groupId> <art ...
- mysql 内置函数和sql server 内置函数的区别
以下函数均没有对参数做说明,使用的使用需要了解其参数内容 数据库 sql server mysql oracle 举例 获得当前系统时间 getdate() now() sysdate 注意不是函数 ...
- find 命令实战巧用
一.命令简介 find 命令的 -size 参数 单位b(不是byte而是block).c.w.k.M.G.默认是单位b ,也就是1block = 512byte = 0.5kb (文件系统ext4) ...
- LeetCode 43 字符串相乘
题目: 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式. 示例 1: 输入: num1 = "2", ...
- linux一些命令的介绍
http://www.runoob.com/linux/linux-command-manual.html 寻找文档操作命令wc -l时,发现一个好的介绍linux操作命令的网站.
- Problem(I) STL - 灵活的线性表
Description 数组和链表是我们熟知的两种线性结构,但是它们不够灵活(不能同时实现直接插入.删除和访问操作),给你若干种操作,你能通过一种灵活的容器,实现它们的功能吗? 操作1:Build a ...
- 强化学习10-Deep Q Learning-fix target
针对 Deep Q Learning 可能无法收敛的问题,这里提出了一种 fix target 的方法,就是冻结现实神经网络,延时更新参数. 这个方法的初衷是这样的: 1. 之前我们每个(批)记忆都 ...
- <Java><Multi-thread><Lock interface>
Overview 介绍java的lock interface. Motivation java拥有像synchronized这样的内置锁,那为什么还需要lock这样的外置锁呢? 首先,性能不是选择sy ...
- 『转』VC++ webbrowser函数使用范例
/*============================说明部分================================= 实现一下函数需包含头文件 #include <Winine ...
- xampp 忘记密码的处理方式.
网上看到一些方法: 大部分是第一种: 方法一 这个方法, 我使用的时候没有生效. -------------- 后来看到另外一种方法 . 直接替换user表的三个文件. 这个方法成功了. xam ...