Команды чтения статуса PJL
Как получить ответ на Windows от принтера после отправки команды PJL?
Я пытался шпионить за сетевым принтером с помощью WireShark и напрямую читать разъем принтера, но ничего не получалось.
1 ответ
На Windows возможна только с сетевыми принтерами с атрибутикой. Для распространенных моделей нет драйверов для двунаправленных принтеров. Итак, я установил Linux на виртуальной машине.
Я использовал двунаправленный драйвер USB для Linux (те же драйверы для Mint, * Buntu Distro) и выполнил команду pjl из cmd.txt с помощью этого скрипта bash ниже.
Но я все еще не могу понять, когда читать ответ PJL. Использование команды fuser для распознавания /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%-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