如何在发送PJL命令后从打印机接收Windows上的响应?
我试图用WireShark监视网络打印机,并直接读取打印机套接字,但没有工作。
发布于 2017-01-06 14:52:10
在windows上,只有使用用具的网络打印机才有可能。普通型号没有双向打印机驱动程序。所以我已经在虚拟机器上安装了linux。
我在linux上使用了双向USB驱动程序(同样的驱动程序在mint,*buntu发行版上),并使用下面的bash脚本从cmd.txt导出一个pjl命令。
但我还是不知道什么时候该读PJL回应。使用fuser命令识别/dev/usb/lp0繁忙状态不起作用,所以我尝试在循环中读取dd并检查read的大小。它可以工作,但有时必须在得到响应之前发送PJL几次。
#!/bin/bash
PRINTER=/dev/usb/lp0
ESCAPE=$(echo -e "\e")
FF=$(echo -e "\x0C")
char=
IFS=""
SSKIP=0
echo "" > a.txt
echo "" > b.txt
echo "" > temp.txt
while read p; do
echo -e "#######BEGIN$p-\r\n" >> a.txt
echo $p
while true
do
#WAIT FOR NOT BUSY
while true
do
fuser -s $PRINTER
if [ $? -ne 0 ]
then
break
fi
done
#send PJL to printer
echo -e "\e%-12345X@PJL\r\n@PJL INQUIRE $p \r\n\e%-12345X" > $PRINTER
#TRY TO READ IMMEDIATELY
char=$(dd if=$PRINTER of=temp.txt 2>&1)
#send escape after read
echo -e "\e" > "$PRINTER"
#CHECK THAT dd READ ANY BYTES
echo "$char" | grep "bytes copied" > /dev/null
if [ $? -ne 0 ]
then
printf "."
else
echo "$char" | grep "^0 bytes copied" > /dev/null
if [ $? -ne 0 ]
then
cat temp.txt >> b.txt
echo "" > temp.txt
break
else
printf "."
fi
fi
char=""
done
echo
echo -e "#######END$p-\r\n" >> a.txt
done <cmd.txt
https://stackoverflow.com/questions/41416870
复制相似问题