Задать вопрос
@Quqas

Кто-нибудь глубоко разбирается в системе печати?

В апплете "Управление печатью" серверы\локально\ вкладка Принтеры имеем таблицу.

Нас интересует столбец "Состояние очереди", указывает что и как с принтером. Оно же дублируется в заголовке окна "открыть очередь печати".

Собственно вопрос: как принудительно взбодрить [непонятно кого именно], чтобы этот статус выяснился и обновился?

- Точно знаю что рестарт спуллера помогает плохо - все принтеры скидываются в "Готов" и постепенно (опять же неясно почему не сразу и не одновременно) меняют состояние на истинное положение.
- Ещё знаю что если Приостановить печать на конкретном принтере - его "Состояние очереди" ни изменится никогда чтобы не происходило в реальности пока не сделать Возобновить печать.
- Ещё выяснил что в реальности "Состояние очереди" это опрос портов принтера. и если там не включено "двухсторонний обмен" и вовсе ничего не опрашивается.

А мне требуется как можно более оперативное выяснение "Состояние очереди" и в идеале задержка отправки заданий пока реальное состояние не будет выяснено.

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

p.s. по вдумчивым неоднократным наблюдениям - если ничего не менять по дефолту изменение "Состояние очереди" реагирует на изменение в реальности от нескольких секунд до нескольких минут - совершенно рандомно. т.е. возможно где-то спрятан некий цикл с неясным тайм-аутом когда опрашивать порт. Вот найти бы его и изменить тайм-аут. Или лучше принудительно запустить опрос "по свистку".
  • Вопрос задан
  • 315 просмотров
Подписаться 2 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
Начну с того, что развиваю два андроид приложения ps402d (служба печати) и виртуальный принтер (
https://play.google.com/store/apps/details?id=ru.a...). Глубоко это в теме или нет решать Вам.

Сетевые принтеры можно разделить на те, что с IPP и более простые 9100. ( остальные варианты можно отбросить)
через директ можете считать, что статус узнать нельзя. Как вы пишите, тут нужен двух сторонний обмен данными, но вот формат такого ответа не стандартизирован. Может как один так и 3 байта. И другие придумки вендоров.

А вот IPP вещь приятная и задокументированная по RFC.

Теперь на счет оперативности статусов. Не дергают принтеры постоянно !!!!
Первый уровень пассивное прослушивание mDNS. При необходимости явный запрос сетевого ресолва запомненного ранее использованного принтера.
Из днс ответа делаются два вывода : принтер онлайн / принтер офллайн.

Следующий уровень.
Пользователь определился на какой принтер будет печатать. Можно тут уже запустить паралельный тред с опросом состояния принтера (трекинг). Из такого ответа уже получается полноценный статус принтера:
простаиваю печатаю, кончается тонер, открыта крышка, подавился бумагой.
Но такое постоянное замучивание принтера имхо излишне.

Часто перед самой печатью, принтеру посылается команда "проверь задание" (Validate-job).
Но опять же по моему, тут хватило бы просто запросить статус принтера (один раз вместо постояного потока)

Отсылается задание на печать.
Дальше логичнее трекать его состояние работы, но можно и через смену состояний принтера. (занят - простой)

На этом статусы принтера спулеру печати больше не интересны.

Пойманую ошибку автоматом ресетить тоже нет никакого резона, ее наоборот надо пользователю показать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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