11

Я пишу часть программного обеспечения, которое поддерживает несколько принтеров. Чтобы проверить это, мне нужно добавить несколько принтеров на мой сервер CUPS. Как я могу это сделать?

Я хочу добавить несколько поддельных принтеров, которые будут отправлять задания напрямую в /dev /null. Таким образом, я могу просматривать список "выполненных работ" в интерфейсе CUPS и наблюдать, использует ли мое программное обеспечение правильный принтер для каждой работы.

5 ответов5

10

Одним из решений является установка cups-pdf. Он добавляет виртуальный принтер, который пишет файлы PDF. В Интернете есть несколько учебных пособий о том, как установить и настроить его; так как я использую Gentoo, я прочитал Gentoo-wiki, в котором также упоминается Sabayon wiki.

Виртуальный принтер cups-pdf имеет файл конфигурации в /etc/cups/cups-pdf.conf , и по умолчанию все файлы PDF записываются в /var/spool/cups-pdf/${USER} .

(Примечание: в Ubuntu он пишет в ~/PDF/)

Однако есть несколько ограничений:

  • Поскольку существует только один файл конфигурации, несколько принтеров PDF будут сохранены в одном каталоге.

  • Невозможно напечатать "сырые" данные (например, с помощью lpr -o raw). Даже отправка файла PDF в виде необработанного задания не будет работать. Необработанные задания на печать создадут пустой файл PDF с пустой страницей.

Даже с этими ограничениями, он отлично работает для моих нужд.


Сноска: если пользователь использует Gnome или печатает через приложение GTK+, то в диалоговом окне печати уже есть псевдопринтер "Печать в файл". Таким образом, почему пользователь все еще хочет добавить виртуальный принтер PDF? Вот несколько причин:

  • Это "Печать в файл" относится только к GTK+ и недоступно для приложений, не поддерживающих GTK+. (возможно, в KDE есть похожая функция, но я не уверен)
  • Это позволяет генерировать PDF из Flash-приложений, которые были предназначены для печати. Например, PocketMod.
  • Добавление виртуального принтера в CUPS позволяет тестировать печать с использованием сценариев оболочки или другого программного обеспечения, которое напрямую взаимодействует с CUPS. Это особенно полезно для разработчиков при тестировании их приложений.
  • Можно "поделиться" этим виртуальным принтером с локальной сетью. Не совсем полезно, но возможно.
  • Можно прикрепить команду постобработки, которая будет выполнена сразу после сохранения файла PDF.
8

Форум Кубков имеет более полный / точный ответ на этот вопрос.

Ответ заключается в том, что URI устройства должен быть установлен в файл:/dev/null

Итак, в моей настройке Ubuntu:

  • URI устройства: файл:/dev/null
  • Марка и модель: локальный принтер

Который работает для меня отлично.

Я снова искал форум кубков и нашел это:

Настройка принтера Null командной строки в форуме Кубки

В вашем cupsd.conf:

FileDevice yes

Настройка принтера

lpadmin -p nowhere -E -v file:/dev/null

Тестирование принтера

who |lp -d nowhere
6

Вы можете создать принтер, который выводит в /dev/null с помощью lpadmin:

$ sudo lpadmin -p myprinter -E -v file:///dev/null

Это будет записано в /etc/cups/printers.conf , но вы также можете просматривать принтеры с помощью lpstat:

$ sudo lpstat -s
myprinter accepting requests since Thu 22 Jan 2015 11:04:46 AM GMT
system default destination: myprinter
device for myprinter: ///dev/null

Обратите внимание, что вам может потребоваться включить FileDevice в /etc/cups/cupsd.conf на старых дистрибутивах Linux.

Чтобы сделать ваш новый принтер по умолчанию, используйте lpoptions:

$ sudo lpoptions -d myprinter
1

Одним из лучших решений является использование ippserver . Он поставляется с CUPSv2.2.2 и выше. Вы также можете получить проект отсюда: примеры реализации IPP .

Согласно описанию на странице руководства:

ippserver - это простой сервер протокола Интернет-печати (IPP), соответствующий спецификациям IPP Everywhere и расширения общей инфраструктуры IPP (INFRA). Он может использоваться в качестве автономного сервера печати и / или базового сервера инфраструктуры между стандартными клиентами IPP и прокси-серверами IPP, соответствующими спецификации INFRA.

Чтобы использовать его, все, что вам нужно сделать, это запустить ippserver "My cool printer" , и он создаст виртуальный принтер с именем My cool printer для вас. Он работает как веб-сервер и прослушивает определенные порты.

Если вам нужно несколько принтеров, вы можете запустить сервер на нескольких портах, используя ippserver "My other cool printer" -p 8888 .

Вы даже можете предоставить атрибуты принтера, используя файл атрибутов. Например, ваш принтер по умолчанию поддерживает печать высокого качества, вы можете добавить следующий атрибут в файл атрибутов:

ATTR enum print-quality-default high

и запустить сервер, используя:

ippserver "My high quality cool printer" -a attributes-file.txt

Рекомендации:

  1. Пример PWG IPP
  2. CUPS ipptoolfile man page
0

Взято с http://inai.de/linux/adm_virtualprinter:

Виртуальный принтер в CUPS

Чтобы создать принтер в CUPS, который отправляет данные в никуда (например, /dev/null), есть много способов. На этой странице используется метод socket:// .

Сначала настройте xinetd

Нам нужен сервис TCP Discard на порту 9. Xinetd имеет встроенный, так что мы можем просто использовать это. Убедитесь, что в конфигурационных файлах xinetd доступно следующее определение, обычно это /etc/xinetd.d/discard . Он должен содержать сервис, подобный следующему:

    тип отбрасывания службы = ВНУТРЕННИЙ ИД = тип потока отбрасывания сокета = тип протокола потока = пользователь tcp = ожидание root = нет отключения = нет FLAGS = IPv6 IPv4 
Запуск rcxinetd reload перечитать файлы конфигурации и активировать новую услугу discard Или используйте rcxinetd start если xinetd еще не был активен.

CUPS принтер

Теперь перейдите на веб-интерфейс CUPS и добавьте новый принтер. В качестве места назначения используйте socket://localhost:9/ , так как принтер выбирает что-то, что выглядит многообещающе, например «HP 2500C Foomatic/pcl3». Это все, что нужно сделать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .