То, как проверить, является принтером на / офлайн с CUPS?

У нас есть некоторое поле окон в сети и общие принтеры на них.

Я добавил их через веб-интерфейс 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.

1
задан 6 April 2017 в 17:22

2 ответа

Используйте 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

система говорит нам, что принтер принимает, что запросы, например, "Хороший идут".

1
ответ дан 7 December 2019 в 15:38

мое решение: в моих программах, записанных в 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 );
}

С необходимым включает
недостаток: явное название принтера находится в моей программе. (У меня есть только один компьютер и один принтер, никакая сеть и такие вещи.)

0
ответ дан 7 December 2019 в 15:38

Другие вопросы по тегам:

Похожие вопросы: