我需要构建一个简单的基于Web的打印机服务器,它将文件打印到任何给定的打印机IP地址
使用lp或lpr如何通过IP地址将文件直接打印到网络打印机?注意:打印机不会在本地设置CUPS,因为它需要能够打印到任何IP地址。
我尝试过:
lp -d 10.11.234.75 /path/to/file
lpr -P 10.11.234.75 /path/to/file
两者都说:'打印机或类不存在。'
答案 0 :(得分:11)
试试这个:
cat you_file.prn | netcat -w 1 printer_ip 9100
答案 1 :(得分:3)
你想做什么可能不可行。如果这些IP地址末端的打印机只是随机打印机,那么您构建的服务器需要知道使用哪个驱动程序才能打印到它们。如果您事先没有以任何方式安装它们,那么它将无法正常工作。
如果您只想与其他Internet打印协议(IPP)服务器通信,那么它是可能的,尽管不一定优雅。我不知道IPP客户端的任何其他Linux实现而不是CUPS,并且CUPS要求您提前安装打印机。这可以很容易地完成(如here所述)。与IPP服务器一样,添加普通打印机(但需要知道使用哪个驱动程序)的代码相同。或者,您可能能够找到另一个IPP实现(或写一个 - 发送文档应该相当简单),这不需要安装打印机。
这是将IPP打印机添加到CUPS的代码:
lpadmin -E -p <printer-name> -v http://<ip_address>:631/<dir>/<printer> -L <location> -E
<printer-name>
和<location>
可以是您喜欢的任何内容,并且您需要打印机的完整网络路径。
添加普通打印机:
lpadmin -E -p <printer-name> -v <device-uri> -m <model> -L <location> -E
这是相同的,除了您需要提供<model>
,这是打印机的驱动程序。如果您不想加密,请先废弃第一个-E
。
如果您想要之后删除打印机,请使用:
lpadmin -x <printer-name>
答案 2 :(得分:1)
我找到了一个名为tcpsend.c的旧程序,用于将文件发送到IP地址的打印机。使用gcc -o tcpsend tcpsend.c
构建$ ./tcpsend
use: tcpsend [-t timeout] host port [files]
-t timeout - try connecting for timeout seconds
答案 3 :(得分:1)
如果使用bash,则:
cat /path/to/file > /dev/tcp/10.11.234.75/9100
答案 4 :(得分:0)
我成功使用了带有主机名和端口的lp
。
echo foobar | lp -h 10.10.13.37:9100 -
如果不指定端口,我会得到
lp:错误-没有默认目的地
如果要打印PDF,可以先使用pdf2ps
pdf2ps file.pdf - | lp -h 10.10.13.37:9100 -
参数-
用作标准输入或输出的别名,使我们可以将后记的输出直接传递到lp
的标准输入中。