linux服务器添加EPSON TM-81III打印机操作记录

发布于 2025-02-11  168 次阅读


一、前提

我服务器是ubuntu,想要利用cups添加内网打印机,来实现远程调用内网打印机

那么大致流程

1.epson tm-81iii连接局域网

2.把打印机服务端口映射到外网,例如我的打印机是192.168.77.201:9100,就需要将这个ip的端口映射到外网

3.服务器安装cups

4.服务器安装epson打印机驱动并连接打印机

5.通过网页和代码远程调用打印机

在这里不不过介绍前三步,网上都有教程,重点讲下第四步和第五步

二、服务器安装驱动和打印机

这里我找了官网的售后要来了打印机驱动以及安装教程,文件在下面,ubuntu安装教程安装即可,如果是centos之类的,如果在编译过程中报错,自行百度补齐gcc、g++之类的软件

安装过程就是build.sh,install.sh,这个驱动应该也不只限于tm-81iii这一款,其他epson小票打印机驱动应该也可以直接用,具体自测

我运行安装的过程如下图

这里安装完驱动之后,如果是本地服务器,可以访问服务器ip:631端口进行管理和添加打印机

但是我的是网络服务器,没办法直接访问服务器内网ip加端口,访问会报错,就只能通过命令行添加打印机

提示我用内网ip进行访问

于是我用命令添加的打印机,先用命令检查驱动以及确认驱动名字 lpinfo -m

然后用命令行添加打印机

sudo lpadmin -p TM81III_Printer -E -v socket://jimukefu.xxxx.org:9100 -m EPSON/tm-ba-thermal-rastertotmtr-203.ppd
这里我因为是外网动态域名,就用xxxx代替,实际不是这个,然后后面的 -m 则是刚才查到的打印机驱动名

安装完成之后就可以进行打印测试页了,可以用命令,也可以用web管理后台

但是这里还有一个问题,我打印测试页之后发现没有切纸,但是我网页后台又进不去打印机设置页,要内网访问

用命令行先查看打印机支持设置的选项

[root@hcss-ecs-3e95 Thermal Receipt]# lpoptions -p TM81III_Printer -l
PageSize/Media Size: *RP80x200 RP80x2000 RP58x200 RP58x2000 Custom.WIDTHxHEIGHT
Resolution/Resolution: *203x203dpi
TmxPaperReduction/Paper Reduction: Off Top *Bottom Both
TmxBuzzerAndDrawer/Buzzer/ Cash Drawer: *NotUsed InternalBuzzer ExternalBuzzer OpenDrawer1 OpenDrawer2
TmxPaperCut/Paper Cut: *NoCut CutPerJob CutPerPage

将切纸设置为cutperjob

[root@hcss-ecs-3e95 Thermal Receipt]# lpoptions -p TM81III_Printer -o "TmxPaperCut=CutPerJob"
[root@hcss-ecs-3e95 Thermal Receipt]# lpoptions -p TM81III_Printer -l
PageSize/Media Size: *RP80x200 RP80x2000 RP58x200 RP58x2000 Custom.WIDTHxHEIGHT
Resolution/Resolution: *203x203dpi
TmxPaperReduction/Paper Reduction: Off Top *Bottom Both
TmxBuzzerAndDrawer/Buzzer/ Cash Drawer: *NotUsed InternalBuzzer ExternalBuzzer OpenDrawer1 OpenDrawer2
TmxPaperCut/Paper Cut: NoCut *CutPerJob CutPerPage

或者通过xshell隧道进行访问127.0.0.1:631 cups的管理后台,但是感觉不稳定不好用

或者有个比较简单的办法,直接用脚本或者代码nc命令进行打印,具体如下

#!/bin/bash
# 网络打印机的IP地址和端口
IP="192.168.75.201"
PORT="9100"

# 提示用户输入文本
echo "请输入要打印的文字:"
read user_input  # 读取用户输入

# 将用户输入的文本转换为GB18030编码(确保中文不乱码)
encoded_input=$(echo "$user_input" | iconv -f UTF-8 -t GB18030)

# 初始化打印机
echo -e '\x1B\x40' | nc $IP $PORT

# 打印用户输入的文本
echo -e "$encoded_input"  | nc $IP $PORT

# 换行两次
echo -e "\n\n\n\n" | nc $IP $PORT

# 切割纸张
echo -e '\x1D\x56\x00' | nc $IP $PORT

echo "打印完成!"

公交车司机终于在众人的指责中将座位让给了老太太