Сервер печати на Linux (Common UNIX Printing System)
Доброго времени, читатели моего блога и гости. Сегодня хочу сделать небольшую заметку о системе печати Linux, чтобы ввести в курс дела и подготовить вас к следующей статье о сервере печати SAMBA.
Итак, исторически в Linux было 2 системы печати LPRng и BSD LPD. Данные системы постепенно устаревают и на смену им приходит система печати CUPS, которая разработана как замена вышеуказанных систем и возможности которой гораздо шире. При использовании GUI интерфейса GNOME, KDE или другого, управление принтерами с помощью CUPS осуществляется не сложнее, чем в Windows. В статье я же сделаю упор на работу в консольном режиме и GUI инструменты рассматривать практически не буду (клавиши Ctrl+P (печать в GUI) есть на всех клавиатурах и работают одинаково как в Windows, так и в Linux ). Отмечу только, что при использовании графической оболочки, запускаются те же команды, что мы рассмотрим далее.
Как система печати Linux обрабатывает файлы
Все мы знаем, что когда печать работает без перебоев, то отправив на печать какой-либо файл о нем можно забыть, пока листы не выйдут на принтере. Но если печать “поломалась”, то необходимо понимать принцип работы, чтобы исправить проблему.
В Linux только пользователь root имеет возможность прямого доступа к устройствам (в нашем случае – к принтеру), остальным пользователям операционная система не дает возможности обращаться напрямую к физическим устройствам, чтобы избежать появления конфликтных ситуаций. Вместо этого, утилиты обращаются к фоновым системным процессам, которые ставят задания в очередь на печать. Кроме всего прочего, данные процессы выполняют преобразование содержимого исходных файлов, подготавливая его к выводу на определенный принтер. Для этого используются язык принтера и протоколы обмена, на основании которых настраивается разрешение печати, формируются страницы, если необходимо, убираются/добавляются колонтитулы, нумеруются страницы.
Система печати Linux находится под контролем демона cupsd, который обладает всеми необходимыми привилегиями, чтобы обращаться к принтерам от имени пользователя. Данный демон автоматически загружается при запуске Linux и настраивает систему для корректной работы печати. Все необходимые параметры демон берет из каталога /etc/cups.
В Linux, где установлен CUPS, для печати используются два основных метода. В основе первого лежат команды lpr и lp (в более новых версиях CUPS). Которые в качестве аргумента принимают имя печатаемого файла и отправляют его на печать на принтер по умолчанию. Данные команды являются “мостиком” ко второму способу печати. В основе второго способа лежат обращения к системным вызовам CUPS. Приложения, использующие данный метод могут не только посылать cupsd информацию, но и получать от демона информацию, о возможностях принтера. В ответ на такой запрос, CUPS возвращает приложению файл в формате PPD (PostScript Printer Definition – описание принтера PostScript). Данные файлы описывают возможности, которыми обладают принтеры (размер страницы, разрешение, ориентация и т.п.). Файлы PPD являются ключевыми компонентами в пакете драйверов для принтеров. Для принтеров, которые не поддерживают язык PostScript, предоставляются PPD-файлы, описывающие возможности через GhostScript.
Совершенно не важно, поддерживает приложение CUPS или нет – после того, как демон cupsd примет задание печати, он поместит его в каталог буфера печати – спулер (обычно – /var/spool/cups) вместе с файлом, описывающим данное задание. Далее cupsd сортирует список заданий и отправляет на принтер одно за другим.
Управление печатью в Linux
Система печати в Linux довольно сложна и настройка обычно происходит либо очень просто (потому что CUPS все сам обнаружит и настроит), либо очень сложно (к примеру попробуйте быстро заставить работать принтер Canon LBP-810 с Linux). Работа печати в Linux основана на нескольких различных пакетах. Основной – это пакет cups, содержащий демон печати. В большинстве дистрибутивов имеется пакет cups в репозитории. Право выбора, каким образом устанавливать ПО в Linux оставляю вам. Я установил так: apt-get install cups. Данный пакет отлично подхватывает все необходимые зависимости.
Давайте немного разберемся, что же такое PostScript, а что такое GhostScript? Как показывает практика, приложения Linux и UNIX в большинстве случаев генерируют на выходе файлы двух форматов:
Простой текст
Программы могут отправлять на принтер файлы в простом текстовом формате исходя из предположения, что в качестве принтера используется типичное устройство постраничной печати.
PostScript
Язык Adobe PostScript – это один из многих языков принтеров. Большинство приложений, использующих сложное форматирование на выходе всегда создают файл формата PostScript.
К сожалению, современные принтеры не все поддерживают язык PostScript (особенно бюджетные модели для дома и малого бизнеса). В связи с этим, файл, полученный от приложения, должен пройти обработку GhostScript. GhostScript – это интерпретатор PostScript, который может размещаться в компьютере, а не в принтере.
Следует заметить, что GhostScript рассматривает все принтеры, как графические устройства. Таким образом, при выводе на печать обычного текстового документа GhostScript преобразует текст в растровый рисунок и отправляет этот рисунок принтеру. Это означает, что GhostScript не может использовать шрифты, встроенные в принтер. Это так же означает, что печать документов через GhostScript иногда выполняется более медленно, чем печать тех же документов на драйверах Windows. Хотя в большинстве случаев эта разница практически не заметна, бывают и большие задержки.
Стандартная установка CUPS поддерживает довольно узкий спектр принтеров (хотя, это довольно спорный момент ). Обычно, это модели с поддержкой PostScript и принтеры компаний HP и Epson. Если принтер автоматически не определился, то необходимо посетить сайт производителя принтера для получения пакета драйверов и инструкций об установке принтера в системе Linux.
Подключение и настройка принтеров в Linux
Прежде всего, подключение и настройка заключается в настройке аппаратных средств. То есть необходимо убедиться, что принтер физически соединен с компьютером и убедиться в исправности принтера и соединительных проводов. Проще всего настроить печать в Linux через принтер который совместим с Linux. Лучший признак совместимости с Linux – это наличие поддержки языка PostScript в принтере. Иногда, производители любят заявлять о поддержке PostScript ложно. Под словом “Ложно” необходимо понимать то, что поддержка PostScript реализована не в самом принтере, а в драйверах, поставляемых к принтеру, которые скорее всего рассчитаны на ОС Windows. Примеров можно привести кучу: принтеры компании Canon серии LBP, модели 810, 1120, принтеры компании HP серии LJ 10xx. Чтобы убедиться в поддержке принтера Linux, можно сходить сюда: http://www.linuxfoundation.org/collaborate/workgroups/openprinting/database/databaseintro. На данном сайте можно так же скачать файлы PPD для вашего принтера.
Для подключения принтеров существует несколько интерфейсов, таких как: USB, Ethernet, LPT и COM (последний безбожно устарел). Данным интерфейсам соответствуют устройства LPT – /dev/lp*, COM – /dev/ttyS* (вместо звездочек, естественно – цифра, обозначающая номер порта, к которому подключено устройство), для взаимодействия с USB используется дерево каталогов /proc/bus/usb, для Ethernet, естественно – IP.
Прежде чем настроить службы печати в Linux, необходимо убедиться, что соединение с принтером действительно установлено. Наверное, лучше всего это проверить из операционной системы windows, если она у вас установлена 2ой системой. Если нет такой возможности, то давайте попробуем обнаружить наш принетр средствами Linux. Если принтер подключен к LPT, либо COM, то можно выполнить команду для LPT: cat /etc/fstab > | /dev/lp0 или для com: cat /etc/fstab > | /dev/ttyS0. При этом, на устройстве в лучшем случае должно напечататься содержимое файла, в худшем – мигнуть индикаторы состояния. Если используется порт USB, то можно проверить подключение устройства с помощью команды lsusb, вывод которой должен содержать маркировку принтера. Для Ethetnet соединения, думаю достаточно проверить доступность IP принтера командой ping.
Настройка безопасности CUPS
В отличии от старых систем LPD, управлять системой печати CUPS удобнее через Web. Однако, по умолчанию, настройка доступа к web интерфейсу может быть настроена не корректно. Некоторые дистрибутивы предоставляют свои инструменты управления CUPS. Все настройки CUPS хранятся в файле /etc/cups/cupsd.conf. Данный файл смоделирован по образу файла Веб сервера Apache. Данному веб серверу я обязательно посвящу обзор. Файл конфигурации cupsd.conf начинается с ряда глобальных параметров директив, которые оформлены в виде пар имя – значение. Для примера, чтобы изменить имя сервера, отправляемое другим системам, необходимо ввести директиву:
SeverName my.ptintserver.local
Данная строка определяет имя сервера как my.printserver.local. Файл конфигурации обладает огромным количеством директив, описание которых выходит далеко за рамки данной статьи. К сожалению, на русском языке я так и не нашел полного описания конфигурационного файла. Могу сказать одно – полный пакет документации можно будет почитать на английском прямо из настроенного веб интерфейса. А так же, документация по конфигурационному файлу доступна тут. Приведу Вам начало своего конфигурационного файла, содержащего глобальные директивы:
Print-server:~# cat /etc/cups/cupsd.conf # указание имени сервера ServerName print-server.domain.local # указание уровня логирования LogLevel warning SystemGroup lpadmin # Разрешить доступ к серверу Port 631 Listen /var/run/cups/cups.sock Listen 192.168.56.3:631 # Включение/выключение функции обзора. Browsing Off #BrowseOrder allow,deny #BrowseAllow all #BrowseAddress @LOCAL # указание типа аутентификации DefaultAuthType Basic <Location /> Allow @LOCAL # Доступ к консоли управления только из локальной сети. Order deny,allow </Location> <Location /admin> # Доступ к администрированию только с определенной машины Allow From 127.0.0.1 Allow From 192.168.56.10 Order deny,allow </Location> <Location /admin/conf> # Доступ к изменению конфига только с аутентификацией, указанной в DefaultAuthType AuthType Default Order deny,allow </Location>
Давайте разберем каждый параметр.Как уже упоминалось выше, ServerName указывает имя сервера печати. LogLevel указывает подробность журналирования (по умолчанию при установке параметр равен info, если возникли какие-то проблемы с CUPS, а в протоколе нет ничего информативного, можно поднять уровень до максимального — debug2), Port указывает на каком порту будет доступен веб-интерфейс, Listen позволяет указать на каком IP адресе будет доступен веб-интерфейс, а так же прослушиваемый сокет.
Параметры, начинающиеся на Browsing требуют отдельного разговора, они задают настройки “просмотра”. В данном случае, под термином просмотр необходимо понимать возможность CUPS обнаруживать принтеры в сети. Данная возможность поддерживается на уровне протокола IPP. Обнаружение происходит посредством широковещательных рассылок, что при большом количестве серверов CUPS или при частом отключении/подключении принтеров может порождать дополнительную нагрузку на сеть. Так же, включение просмотра влечет за собой определенное бремя безопасности. Например, систему настроенную на автоматический поиск легко обмануть, предоставив поддельную информацию о принтерах, а при наличии недочетов в коде CUPS это может привести к негативным последствиям. Давайте разберем указанные параметры:
BrowseAllow и BrowseDeny
Указывают CUPS на стороне клиента адреса, от которых может приниматься или отвергаться, соответственно, информация о принтерах. Формат директив соответствует директивам Allow и Deny. В качестве аргумента для данной директивы может быть как отдельный IP, так и подсеть в формате 10.0.0.0/24 или 10.0.0.0/255.255.255.0 или 10.0.0.0-10.0.0.255, так и значение @LOCAL – обозначающее локальную сеть, а так же имена хостов. Возможно использование нескольких данных директив.
Browsing
Указывает CUPS предоставлять свои серверы в общий доступ, либо нет. Значения может принимать On или Off соответственно.
BrowseAddress
Аналогична BrowseAllow. за исключением того, что она задает КОМУ посылать пакеты, а не от кого принимать.
Далее в конфигурационном файле указана директива DefaultAuthTape, которая указывает механизм аутентификации, который будет использоваться для организации доступа по умолчанию. Basic – указывает использовать логины/пароли от локальной системы. None – указывает не использовать аутентификацию. При указании параметра Digest все пароли будут передаваться в зашифрованном виде, но тогда необходимо создать пользователей CUPS с помощью команды lppasswd, пользователи будут добавлены в файл /etc/cups/passwd.md5.
Существует так же директива AuthClass, которая не присутствует в моем конфигурационном файле. Данная директива определяет, какие группы пользователей могут иметь доступ к подсистеме. Может принимать значения: Anonymous, User, System, Group. Параметр Anonymous указывает, что аутентификация производиться не должна. Параметр User говорит, что любой пользователь системы, корректно указавший имя/пароль может иметь доступ. System – говорит, что доступ к подсистеме могут получить только пользователи – члены системной группы cups. Group указывает возможность пользоваться подсистемой только членам группы, которая должна быть указана в последующей директиве AuthGroupName.
Директива Order определяет порядок предоставления доступа к CUPS по умолчанию. Значение Deny,Allow определяет – отвергать попытки доступа, если право на доступ не указано явно. Если директива имеет значение Allow,Deny, то доступ будет предоставлен, если явно не запрещен.
В конфиге можно заметить, что после DefaultAuthType идут параметры, сгруппированные в разделы <Location /…>. Такие директивы определяют доступ к определенным функциям сервера.
На этом настройку доступа к веб-интерфейсу CUPS считаю законченным. Остальные действия удобней выполнять через браузер. Для доступа к управлению необходимо ввести в веб-браузере строку http://ip.ad.dr.ess:631, в результате, должен появиться интерфейс управления CUPS. Если этого не произошло, попробуйте перечитать статью и проверить Ваши настройки еще раз. Перед манипуляциями с веб-интерфейсом я бы посоветовал сделать копию работающего конфига, потому что после внесения каких-либо изменений в настройки, конфигурационный файл переписывается параметрами веб-интерфейса. В результате, все вышеуказанные настройки сбиваются. Как говориться – удобство в угоду безопасности. Поэтому, я советую – настроив доступ к веб-морде, произвести настройки принтеров в Веб-интерфейсе, проверить работоспособность, а после проверки – восстановить настройки безопасности.
Особенности использования Веб интерфейса
Долго о Веб-интерфейсе описывать не буду. Последняя версия CUPS 1.4 практически полностью русифицирована. Управление принтерами через веб-морду не сложнее процесса установки принтера в операционной системе Windows. Единственный нюанс в Linux – это то, что фактически, “принтер” есть очередь печати. То есть фактически мы посылаем документ в определенную очередь печати с определенными настройками. Очередь привязана к конкретному принтеру-устройству. Таким образом, к одному принтеру может быть привязано несколько очередей с разными настройками. Это как в Windows установить несколько “принтеров” с разными версиями драйвера, но привязанными к одному физическому устройству.
Кроме веб-интерфейса, существуют так же консольные команды управления CUPS.
Параметры принтеров CUPS хранит в файле /etc/cups/printers.conf. В данный файл руками лезть не стоит. Он заполняется при настройке в веб интерфейсе. Пример файла:
Print-server:~# cat /etc/cups/printers.conf # Printer configuration file for CUPS v1.4.4 # Written by cupsd # DO NOT EDIT THIS FILE WHEN CUPSD IS RUNNING <DefaultPrinter it_216> Info Printer Location IT MakeModel HP LaserJet Series PCL 4/5 DeviceURI socket://10.0.0.216 State Idle StateTime 1303721460 Reason toner-low-report Reason toner-empty-warning Type 12372 Filter application/vnd.cups-raw 0 - Filter application/vnd.cups-raster 50 rastertohp Accepting Yes Shared Yes JobSheets none none QuotaPeriod 0 PageLimit 0 KLimit 0 OpPolicy default ErrorPolicy stop-printer Attribute marker-colors \#000000 Attribute marker-levels 0 Attribute marker-names Black Cartridge HP Q7551A Attribute marker-types tonerCartridge Attribute marker-change-time 1303721460 </Printer>
Описание каждого установленного принтера (соответствующий PPD-файл) находится в каталоге /etc/cups/ppd/<имя_принтера>.ppd.
Управление демоном CUPS ничем не отличается от управления любой другой службой. То есть запуск, остановка, перезапуск можно выполнить командами:
Print-server:~# /etc/init.d/cups start Starting Common Unix Printing System: cupsd. Print-server:~# /etc/init.d/cups restart Restarting Common Unix Printing System: cupsd. Print-server:~# /etc/init.d/cups stop
Хочу еще отметить такой нюанс. CUPS разрабатывался как замена системе печати LPD. В LPD источником информации о имеющихся принтерах очередях печати был файл /etc/printcap. CUPS обратно совместим с данной системой печати и если мы посмотрим на файл printcap, то увидим, что:
Print-server:~# ls -la /etc/ | grep print lrwxrwxrwx 1 root root 22 Мар 15 18:41 printcap -> /var/run/cups/printcap
файл printcap является символьной ссылкой на /var/run/cups/printcap. Т.о. CUPS сама следит за корректностью данного файла и тем самым обеспечивает обратную совместимость с LPD.
Устранение неполадок в системе печати
Не всегда удается настроить принтер с первого раза и иногда настройка становится чрезвычайно сложной, убивающей веры в свои силы. Постараюсь описать некоторые шаги по устранению проблем с печатью:
- Постарайтесь проверить работоспособность принтера на другой ОС. Естественно, если он не заработает в другой ОС, то проблема скорее всего в аппаратной части.
- Проверьте все физические соединения. Питание, информационный провод. Проверьте включен ли принтер и имеется ли бумага в лотке, а так же нет ли сигнализации об ошибках на принтере.
- Если принтер подключается по USB, LPT, COM, то посмотрите выводы команд lsusb, dmesg на наличие записей о принтере. Если принтер с Ethernet-интерфейсом, проверьте связь с ним командой ping.
- Если все вышеперечисленные проверки завершились успехом – тщательно проверьте настройки CUPS.
- Проверьте в Веб-интерфейсе, не остановлена ли очередь печати принтера.
- Если в статусе принтера написано waiting for job copmlete, то что-то мешает CUPS очистить очередь печати принтера (например отсутствие физического соединения с принтером или нехватка прав доступа).
- Если при печати на бумаге выводится всякий мусор, то скорее всего выбраны неверные параметры/модель принтера.
- Так же, для поиска неисправности необходимо просмотреть логи принтера в каталоге /var/log/cups/
- Ну и как всегда, вам в помощь яндэкс и гугл.
Файлы и каталоги CUPS
В статье я уже приводил некоторые каталоги и файлы CUPS. В большинстве случаев, ручное редактирование каких-либо файлов CUPS, кроме /etc/cups/cupsd.conf, требуется довольно редко. Но для общего развития я расскажу о расположении файлов. Итак, как уже говорилось, для хранения настроек CUPS использует каталог /etc/cups/. Основной файл, имеющий для нас интерес – это cupsd.conf, который хранит глобальные настройки, так же существует printers.conf, хранящий настройки принтеров очередей печати. Подкаталог ppd содержит файлы PPD для локальных принтеров. Файл passwd.md5 хранит зашифрованные пароли пользователей CUPS.
Большой объем данных лежит в /usr/share/cups/, в котором хранятся служебные файлы. Особый интерес представляет каталог /usr/share/cups/model/ (который в последней версии CUPS был перемещен в /usr/share/ppd/), который хранит описания для принтеров. При каждом старте сервер сканирует каталог /usr/share/cups/model на предмет появления новых описаний принтеров (PPD-файлов).
В процессе работы CUPS использует каталог /var/spool/cups/ для хранения описаний заданий печати и самих файлов заданий. Владельцем данного каталога должен быть пользователь root и группа lp. Права доступа определены, как 0710 (rwx–x—).
Так же используется каталог /var/run/cups/ для хранения информации о работе демона, такой как сокет, файл printcap и др.
Резюме
На этом закончу статью. Очень расплывчатая получилась информация, более подробно можно изучить CUPS на сайте http://www.cups.org в официальной документации. Считаю, что цель статьй – получить представление о работе CUPS достигнута. Мы поняли, как организовать доступ к веб-морде CUPS, а так же усвоили, где лежат файлы CUPS и для чего нужны, как управлять службой и устранять возможные неполадки. Какие-то более узкие решения на основе CUPS буду публиковать в следующих статьях. Надеюсь статья Вам будет полезна. Жду комментариев.
С Уважением, Mc.Sim!
Статься (как и сайт) хороша, но как мне показалось, плохо раскрыта тема установки принтеров с GhostScript (через GUI настраиваются, а из консоли как?), тема непосредственно сервера и взаимодействия с ним.
Спасибо за комментарий.
По поводу консоли – согласен. Будет время – обязательно дополню.
А вот по поводу
немного не понял.
Раскрыть тему принт-сервера и взаимодействия с этим принт-сервером. Т.е. помимо непосредственной настройки принтера и CUPS ещЁ и доп. функции и вкусности добавить, типа сканера сетевого. А взаимодействие это добавление сетевого принтера (желательно бы тоже консольными способами).
Сетевым сканером заведует немного другая система (не CUPS). Вроде как SANE называется. О ней точно не скоро напишу
Сейчас основной упор на САМБА, потом в приоритете netfilter и iptables.
Про сетевую печать писал вот тут.
То что сканированием занимается не CUPS я в курсе, прст логично было бы на принт сервере иметь и сканер, IMHO.
Согласен Логично.
Но мешать все в одной статье – получиться каша.
Это скорее тема какого-нить хауту
Так что приходите еще – обязательно будут новые статьи
Конечно, принцип Unix Надеюсь, что Вы напишите статейку о “сервере сканирования”
P.S. Я от сюда уходить пока не собираюсь
доброго времени суток. Столкнулся с проблемой что удалять работу и админить могу только с топределенного ip адреса. Решил добавить еще, зашел в файл конфигурации cupsd.conf , добавил ip адреса, результата всеравно нету( Подскажите пожалуйста , какие файлы надо еще редактировать чтобы доступ появился, оч не удобно с 1 машины делать. Спасибо заранее. С Уведомлением
Доброго времени, Игорь.
Покажите Ваш конфигурационный файл?
Здравствуйте.
Мне нужен совет автора.
Есть операционная система,переделанный CentOS 6.1.
В нём существует защищенная система печати.После стартной отправки документа на печать,появляется окошко с настройкой меток на документах и изображениях, ставятся метки даты и прочие.Где может находиться подхват этого?Если удалить систему печати,то печать не происходит.
Здравствуйте.
Что есть “защищенная” система печати в Вашем случае?
Так же, откуда Вы отправляете документ на печать? Покажите скриншот окна с настройкой меток.
На одном из компьютеров cups отваливается буквально каждый раз после печати. Можно ли каким-то образом настроить автоматический перезапуск службы? Спасибо
Я думаю, что лучше будет разобраться в причинах отказов…
А если есть желание, то можно воспользоваться планировщиком cron.
Подскажите, можно ли как-нибудь в Линуксе через CUPS API, то есть программно из приложения получить текущее состояние принтера (готов/неготов, есть бумага/нет бумаги и т.д.). Функция cupsGetOption(“printer-state”, …) не подходит, т.к. возвращает состояние очереди спулера, а не собственно принтера. Принтер настроен и нормально печатает по локальной сети с разных машин (все с Линуксом), но узнать его (а не очереди, очередь всегда готова к приему) состояние никак не получается. С уважением
Если принтер с портом Ethernet, то, мне кажется, лучший вариант – это SNMP, чем CUPS API.
Проблема в том, что принтер подключен не к общей сети, а к одной из машин сети через отдельный Ether-интерфейс, то есть это отдельная сеть. Доступ по SNMP с этой машины к принту это не проблема, а вот со всех остальных достаточно непросто, учитывая что маршрутизация на машине с подключенным принтом, как и на всех остальных, исключена (запрещена). CUPS позволяет использовать принтера при любой конфигурации сетей, а SNMP только используя прямой доступ.
Из того, что я смог найти – это только тот самый cupsGetOption.
Среди прочего, он может получать много чего
The num_options and options members of the cups_dest_t structure provide basic attributes about the destination in addition to the user default options and values for that destination. The following names are predefined for various destination attributes:
"auth-info-required": The type of authentication required for printing to this destination: "none", "username,password", "domain,username,password", or "negotiate" (Kerberos).
"printer-info": The human-readable description of the destination such as "My Laser Printer".
"printer-is-accepting-jobs": "true" if the destination is accepting new jobs, "false" otherwise.
"printer-is-shared": "true" if the destination is being shared with other computers, "false" otherwise.
"printer-location": The human-readable location of the destination such as "Lab 4".
"printer-make-and-model": The human-readable make and model of the destination such as "ExampleCorp LaserPrinter 4000 Series".
"printer-state": "3" if the destination is idle, "4" if the destination is printing a job, and "5" if the destination is stopped.
"printer-state-change-time": The UNIX time when the destination entered the current state.
"printer-state-reasons": Additional comma-delimited state keywords for the destination such as "media-tray-empty-error" and "toner-low-warning".
"printer-type": The cups_ptype_t value associated with the destination.
"printer-uri-supported": The URI associated with the destination; if not set, this destination was discovered but is not yet setup as a local printer.
При условии, что принтер ему об этом расскажет )
Как еще один из вариантов – опрашивать принтер локально по SNMP и складывать эту статистику на веб сервер, например.
И уже по веб – эту статистику забирать.
А винда умеет печатать на ip адрес (ip порт). Линукс так умеет?
В целом ответ – умеет.
Встречный вопрос – про какой протокол сетевой печати мы говорим?