Оживляем мертвую лошадь в лице старого принтера

14 Июн
2012

Задача


Существует терминальный сервер Windows 2008 x64, принт сервер CUPS с Ubuntu, к которому подключен раритетный принтер Cannon LBP1120, нужно подключить сетевой принтер на терминальном сервере.
Как оказалось драйверов для x64 архитектур на этот принтер не существует, а используя драйвера других устройств, различных PCL и Postscript завести на Windows 2008 x64 не удалось.
Пришлось думать над альтернативными способами, и он был найден, создать на принтсервере PDF принтер, а после печатать из PDF файла, но таким образом без автоматики очень не удобно работать.
В Cups-pdf в конфигах есть опция: PostProcessing, которая в теории может исполнять скрипты после создания PDF файлов.

Начнем


Опустим установку принтера на принт сервере и настройку CUPS, для каждого этот процесс индивидуален.
Устанавливаем cups-pdf:
apt-get install cups-pdf

Добавляем PDF принтер:
lpadmin -p PDFPrinter -v cups-pdf:/ -m "lsb/usr/cups-pdf/CUPS-PDF.ppd" -E

Создаем скрипт который будет печатать, документ на локально установленный принтер:
#! /bin/bash
if [ "$2" == "nobody" ]; then
/usr/bin/lp -d LBP1120 "$1"
fi

Где LBP1120 — это локальный принтер
Суть скрипта: проверить кто отправил на печать документ, если это анноним(в моем случае, тот самый терминальный сервер) то печатать PDF на принтере, если же нет, то документ отправлен с локальной машины: сохранить в PDF без печати.
Сохраняем скрипт, я сохранил в /usr/local/ptp.sh
Редактируем /etc/cups/cups-pdf.conf, находим строчку «#PostProcessing», разкомментируем и изменяем:
PostProcessing /bin/bash /usr/local/ptp.sh

Теперь терминальном сервере добавляем принтер, вводим URL:
192.168.1.21:631/printers/PDFPrinter

где 192.168.1.21 — это IP адрес принтсервера и 631 это порт CUPS
Windows спросит драйвер, и использовал PostScript Xerox Global Print Driver отсюда:
И казалось бы теперь все дожно работать, но не тут то было, скрипт просто не исполняется, я потратил целый день на чтение мануалов и исходников, чтобы понять что все дело в Apparmor, эту проблему мы сейчас и решим.
Открываем /etc/apparmor.d/usr.sbin.cupsd, сразу идем к блоку «/usr/lib/cups/backend/cups-pdf {«, вконце блока прописываем:
/bin/bash ixr,
/usr/local/ptp.sh r,
/usr/bin/lp ixr,

и перезапускаем его:
/etc/init.d/apparmor restart

Вот и все, оживление «мертвой лошади» произошло, теперь можно отложить покупку новой.
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх