На работе моя группа в настоящее время использует автономные сетевые принтеры. Мы также запускаем собственную автономную сеть Linux для некоторых членов группы. Все работает прекрасно. Руководство решило, что для всех будет более эффективно и устойчиво использовать принтеры с централизованным обслуживанием. Это дает нам ряд полезных функций, таких как возможность отправить задание на печать, а затем выбрать его на любом принтере, который мы хотим. Проблема в том, что печать будет привязана к центральной системе аутентификации, которую мы не используем.
Оказывается, что нам на самом деле не нужно использовать аутентификацию как таковую, нам просто нужно убедиться, что имя пользователя, под которым отправлено задание на печать, имеет правильное имя пользователя - в противном случае вы не сможете его забрать , Мы могли бы изменить все имена пользователей и домашние каталоги для всех наших пользователей, чтобы они соответствовали централизованно управляемым, но по понятным причинам мы предпочли бы этого не делать. Если мы сможем переназначить наши имена пользователей на централизованно управляемые для печати, тогда все должно просто работать.
В настоящее время мы используем чашки для наших нужд печати, и, насколько я могу судить, он не поддерживает никакую форму переназначения имени пользователя. Это правильно? Я знаю, что Samba поддерживает переназначение имени пользователя, но я не уверен, что он будет работать в этой конфигурации. Нам нужно:
Кто-нибудь может подсказать, как нам этого добиться?
Теперь я решил эту проблему. Я добавил настоящий принтер как обычно, а затем создал новый скрипт бэкэнда cups под названием / usr / lib / cups / backend / remap:
#!/bin/bash
if [ "$#" == "0" ]; then
echo "network remap \"Unknown\" \"Username remap backend\""
exit 0
fi
DEVICE_URI=$(echo ${DEVICE_URI} | sed -e "s/^remap/ipp/")
FINAL_CONTENT_TYPE="application/vnd.cups-postscript"
PPD="<path to real printer ppd>"
PRINTER="<real printer name>"
JOBNUM=$1
USER=$(ypmatch $2 usermap)
if [ "$?" == "1" ]; then
exit 1
fi
JOBTITLE=$3
COPIES=$4
shift
shift
shift
shift
cat | /usr/lib/cups/backend/ipp ${JOBNUM} ${USER} "${JOBTITLE}" ${COPIES} "$@"
exit $?
Затем я добавил новый фальшивый принтер, используя этот бэкэнд , Сценарий предполагает, что ваш фальшивый принтер и реальный принтер имеют одинаковое местоположение, но разные протоколы, например:
Он заменяет «remap» на «http» в переменной среды DEVICE_URI, обновляет некоторые другие переменные среды, ищет сопоставленного пользователя (в данном случае на основе пользовательская карта NIS) и запускает задание на реальном принтере, используя бэкэнд ipp, но с обновленным именем пользователя.
Бэкэнды кубков ожидают следующие аргументы:
Если $ 6 пусто, он ожидает ввода от STDIN.