У нас есть некоторое поле окон в сети и общие принтеры на них.
Я добавил их через веб-интерфейс CUPS, и все они работают как очарование, мы можем распечатать им php:
exec('lp -d vasosamsung file.pdf');
Круто. Я записал a Printer
класс, что делает некоторую проверку перед заданием печати, мог запуститься.
Первой вещью, что я проверяю, является принтер, существует:
lpstat -p vasosamsung
Если это не, говорит, место назначения недопустимо, то да, движение. И здесь прибывает хитрая часть.
Если ответ неактивен, или печать, все прекрасно, давайте отправим задание.
НО!
Проблема - это, говорит, принтер неактивен, потому что на моей машине принтер добавил к списку принтеров, но печально это в режиме офлайн. Это - то, что я хочу поймать. Больше проблем возникает.
Хорошо, я могу иметь дело с ним, задания находятся в очереди, даже если сам принтер отключен (вытащил из машины).
Настоящая проблема, что, когда я удалил целую вещь принтера из своих "Принтеров и Устройств" щелчком правой кнопкой и удаляю устройство, CUPS говорит, это неактивно. Я перезапустил CUPS service cups restart
, и получите статистику:
printer vasosamsung is idle. enabled since Thu 06 Apr 2017 03:34:26 PM CEST
Это не верно. Теперь на моей машине существует теперь принтер как это. Худшая вещь, если я, отправляет документ ему, это говорит:
string(40) "request id is vasosamsung-71 (1 file(s))"
и задание находится на веб-интерфейсе:
vasosamsung-71 Unknown Withheld 1933k 1 held since
Четверг 6 апреля 15:59:43 2017
Мой вопрос: существует ли путь ti, получают phisicaly состояние принтера? Офлайн, печатая и т.д.... не от CUPS?
Если это не возможно, я могу добраться так или иначе, принтер, находится в списке устройств на целевой машине, по крайней мере?
Править
Hehe, когда я выключил свою машину, принтер, неактивен также :)
Я предполагаю, это вызвано тем, что принтер вазо-Samsung навеселе, и это не phiscal устройство, теперь я вижу, но мои вопросы все еще alives.
Используйте lpstat
с -t
параметр:
$ lpstat -t
scheduler is running
system default destination: DCP-7065DN
device for DCP-7065DN: usb://Brother/DCP-7065DN?serial=<REDACTED>
DCP-7065DN accepting requests since Tue 19 Nov 2019 04:29:56 PM MST
printer DCP-7065DN is idle. enabled since Tue 19 Nov 2019 04:29:56 PM MST
система говорит нам, что принтер принимает, что запросы, например, "Хороший идут".
мое решение: в моих программах, записанных в C, я включаю функцию (или процедура в Алголе, моем первом языке, в 1964...)
#define BUFFERLEN 1024
int isprtready( void )
{ char cmd[BUFFERLEN], buffer[BUFFERLEN], usbstat[]="lsusb > ",
enabled[]="Hewlett-Packard LaserJet 2420", filename[]="prtreadyXXXXXX";
int handle, len;
handle = mkstemp( filename );
strcpy( cmd, usbstat );
strcat( cmd, filename );
system( cmd );
len = read( handle, buffer, BUFFERLEN );
buffer[len] = '\0';
close( handle );
unlink( filename );
return ( strstr( buffer, enabled ) != (char*)NULL );
}
С необходимым включает
недостаток: явное название принтера находится в моей программе. (У меня есть только один компьютер и один принтер, никакая сеть и такие вещи.)