Много аккуратных дополнительных свойств здесь!
Метод KISS:
date >>filename; cat >>filename
CUPS (частично) GPL-лицензируется, таким образом, Вы могли просто захватить источник lpstat
(1) и создайте свой собственный мало (GPL-лицензированный) give-my-list-of-printers-program, который никогда не будет изменять способ, которым он производит данные.
(1) Это находится в cups-XX/cups/systemv/lpstat.c
, Я просто не понимаю числа версий там.
Я также нуждаюсь в списке принтеров и имел то же беспокойство. После вышеупомянутого предложения я проверил источник lpstat.c. Я ожидал, что это будет suid, таким образом, это могло считать "/etc/cups/printers.conf". Я теперь понимаю, что это не делает этого.
Вместо этого это отправляет запрос POST HTTP к localhost:631, куда cupsd работает. Запрос имеет Тип контента формы: application/ipp и вещи такие требуемые авторами от-информации согласно-просьбе-атрибуты. Причина не быть более конкретным состоит в том, что это использует нестандартное кодирование (см.: http://en.wikipedia.org/wiki/Internet_Printing_Protocol)..., таким образом, я подозреваю на самом деле парсинг вывода lpstat-a, на самом деле инструмент для очистки.
С момента первоначального вопроса прошло шесть лет, я использую Cups 2.2.7. И еще 'lpstat -a' возвращает имя принтера в первом слове. Поэтому я думаю, что можно с уверенностью предположить, что это и впредь будет правильным способом получения списка установленных принтеров.