linux直接打印到未安装的网络打印机

时间:2015-05-08 18:07:29

标签: linux printing

我需要构建一个简单的基于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

两者都说:'打印机或类不存在。'

5 个答案:

答案 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

tcpsend.c source code

答案 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

将其转换为PostScript。
pdf2ps file.pdf - | lp -h 10.10.13.37:9100 -

参数-用作标准输入或输出的别名,使我们可以将后记的输出直接传递到lp的标准输入中。