2017-01-01 386 views
0

如何在发送PJL命令后从打印机接收Windows响应?PJL状态回读命令

我试图用WireShark间谍网络打印机,并直接读取打印机套接字,但没有任何工作。

+0

我已发现两件事情: 1.打印机驱动器必须支持双向双向通信 2.有工具PCL用具经由网络回读PJL:[链接](http://www.pclparaphernalia.eu /index.html) – tosiek

回答

0

在Windows上,只能使用Paraphernalia的网络打印机。常见型号没有双向打印机驱动程序。所以我已经在virtualmachine上安装了linux。

我使用的双向USB驱动程序在Linux(在同一驱动程序是薄荷,* buntu发行),并从下方的这个bash脚本cmd.txt execeute一个PJL命令。

但我仍然无法识别何时阅读PJL回应。使用定影器命令识别/dev/usb/lp0繁忙状态不起作用,所以我尝试读取与dd的循环并检查回读大小。它的作品,但有时必须发送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%[email protected]\r\[email protected] 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 
+0

好吧,看完后你可以发送ESCAPE和下一个PJL回读工作在第一时间。 echo - “\ e”>“$ PRINTER” – tosiek