После долгого сеанса отладки я наконец-то решил эту проблему. В случае, если другие люди столкнутся с такими же трудностями, вот что я узнал о бэкэндах CUPS под Mac OS X Yosemite:
Backends - это исполняемые файлы (в моем случае это скрипт оболочки) в /usr/libexec/cups/backend/ каталог. Информация о задании на печать передается в эти программы через аргументы командной строки ( $1 = Работа-идентификатор, $2 = Пользователь, $3 = Название, $4 = копия, $5 = опция, $6 = файл) и переменные окружения ( например $DEVICE_URI ).
Бэкэнды выполняются как пользователь _lp, группа _lp, с разрешениями, дополнительно ограниченными sandboxd. Текущий каталог при запуске бэкэнда является корневым каталогом /, но бэкэнд не имеет разрешения на чтение этого каталога. Каталоги, которые можно прочитать, включают /usr/libexec/cups/backend/, /etc/ и их подкаталоги. Только очень ограниченный (или вообще нет?) Доступ к домашнему каталогу пользователя _lp (в /var/spool/cups ) разрешено.
Мой бэкэнд требует использования ssh. Чтобы это работало, ssh должен иметь доступ к закрытому ключу, необходимому для входа на удаленный сервер, и known_hosts файл, который идентифицирует удаленный сервер. Требуемый ключ может быть помещен в /usr/libexec/cups/backend/ или подкаталог, он должен быть доступен для чтения только пользователю _lp, Кажется, что ssh при запуске из бэкэнда CUPS не имеет доступа к /var/spool/cups/.ssh/даже если этот каталог существует; Таким образом known_hosts файл должен храниться в /etc/, как /etc/ssh_known_hosts, (Обратите внимание, что страница справочника ssh неправильно утверждает, что это должно быть /etc/ssh/ssh_known_hosts.)
Редактировать: На MacOS X 10.11 (El Capitan) ssh теперь использует
задокументированное местоположение /etc/ssh/ssh_known_hosts для известных
файл hosts. Я должен был переместить мой файл в /etc/ssh/ сделать фильтр принтера
работать после обновления ОС.
Чтобы отладить такие проблемы, используя cupsctl --debug-logging неоценимо: после выполнения этой команды все, что записано в stderr в бэкэнде CUPS, появляется в /var/log/cups/error_log, Регистрация может быть снова отключена с помощью cupsctl --no-debug-logging, Кроме того, всякий раз, когда sandboxd отказывает в попытке доступа к файлу, sandboxd[426] ([15998]): sh(15998) deny file-read-data / можно найти в /var/log/system.log,