linux下使用小票打印php
打印機: Xprinter XP-58IIH
指令支持: ESC/POS
接口: USB, 藍牙html
Linux系統: Centos7node
藍牙配對很快, 配對好後就是鏈接狀態. 但很快變爲斷開, 且鏈接灰顯, 沒法點擊.
USB鏈接後, 設備下添加找不到該打印機.python
命令能夠訪問.
# 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 0x070Blinux
# ls /dev/usb/
hiddev0 lp0
這裏找到的lp0就是打印機了.git
# 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 +0800github
# echo "Hello" > /dev/usb/lp0
嘗試打印.
# echo "$(date)" > /dev/usb/lp0數據庫
$ echo "Hello" > /dev/usb/lp0
bash: /dev/usb/lp: Permission deniedbash
$ 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/lp0electron
將用戶添加到 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 --color=always | 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)命令行的全部信息,具體取決於用戶對選項的選擇。
參見:http://www.javashuo.com/article/p-agymusdu-p.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
==========