Получить список установленных принтеров


8

Внутри скрипта я отправляю определенный файл для печати, используя lprкоманду на выбранном пользователем принтере.

Список принтеров, из которых пользователь выбирает тот, который использовать, я получаю, используя lpstat -aкоманду, а затем рассматривая все перед первым пробелом в качестве имени принтера.

Это работает, но сильно зависит от конкретного формата вывода lpstat -aкоманды. Я боюсь, что в будущем (или сейчас в других дистрибутивах), если формат вывода изменится, он сломает скрипт.

Итак, есть ли способ получить имена всех установленных принтеров более безопасным способом, чем тот, который я использую?

Ответы:


1

CUPS (частично) лицензируется по GPL, так что вы можете просто взять источник lpstat(1) и создать свою собственную маленькую (лицензированную по GPL) программу give-my-list-of-printers , которая никогда не изменит способ вывода данных. ,

(1) Это в cups-XX/cups/systemv/lpstat.c, я просто не понимаю , цифры там версий.


Это хорошее решение, но, к сожалению, «скрипт» на самом деле является Java-апплетом, я не могу изменить целевую систему или установить на нее новые вещи. Это связано с этим вопросом: stackoverflow.com/questions/13743738/… И я подумал, что вместо этого было полезно использовать lpr
Enoon

Хм, есть CUPS4J , который может или не может быть опцией ... он может "получать объекты принтеров с сервера CUPS, который можно использовать для печати и мониторинга заданий"
sr_

Это кажется интересным решением, спасибо!
Enoon

3

Мне также нужен список принтеров, и у меня была такая же проблема. Следуя приведенному выше предложению, я проверил источник lpstat.c. Я ожидал, что это будет suid, чтобы он мог читать "/etc/cups/printers.conf". Теперь я понимаю, что это не так.

Вместо этого он отправляет HTTP-запрос POST на localhost: 631, где выполняется cupsd. Запрос имеет форму Content-Type: application / ipp и такие вещи, как запрашиваемые атрибуты auth-info-required. Причина не быть более точной в том, что она использует нестандартную кодировку (см .: http://en.wikipedia.org/wiki/Internet_Printing_Protocol ) ... поэтому я подозреваю, что на самом деле анализ выходных данных lpstat -a на самом деле более чистый ,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.