Как добавить фальшивый, фиктивный, нулевой принтер в CUPS?

12

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

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

Денилсон Са Майя
источник
это не правильно "lpadmin -p lp0 -E -v / dev / null -m raw"
Ашика Уманга Умагилия
1
Смотрите также создание фиктивного принтера .
Уилфред Хьюз

Ответы:

11

Одним из решений является установка 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.
Денилсон Са Майя
источник
9

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

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

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

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

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

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

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

В вашем cupsd.conf:

FileDevice yes

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

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

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

who |lp -d nowhere
Эндрю Рассел
источник
Сейчас я просто смотрю на распечатку: мелкие детали, яркие цвета, которые просто прыгают со страницы на меня. ... эй waitaminute ....
Эндрю Рассел
Спасибо. Мне понадобился фиктивный принтер на моей виртуальной машине, чтобы сделать скриншот с некоторыми инструкциями. :)
njallam
7

Вы можете создать принтер для вывода с /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
Уилфред Хьюз
источник
Как это убрать?
Ричард
@Richard Использовать lpadmin -x myprinterили веб-интерфейс.
Торкель Бьёрнсон-Ланген
2

Одним из лучших решений является использование 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
Сахиль Арора
источник
1

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

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

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

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

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

    отказ от услуги
        тип = ВНУТРЕННИЙ
        id = discard-stream
        socket_type = stream
        протокол = tcp
        пользователь = root
        ждать = нет
        отключить = нет
        ФЛАГИ = IPv6 IPv4 
Запустите, rcxinetd reloadчтобы перечитать файлы конфигурации и активировать новый discardсервис. Или используйте, rcxinetd startесли xinetd еще не был активен.

CUPS принтер

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

Голар Рамблар
источник