Как отслеживать и копировать данные спула CUPS и копировать файлы для запуска сценария?

Широкая проблема: доступ к данным спула чашек от имени обычного пользователя.

В магазине, на кассе, есть программа, которая формирует счета в формате PDF, которые кассир распечатывает для покупателей. У меня нет доступа к базе данных, в которой создаются эти PDF-файлы. Однако я написал сценарий синтаксического анализа (с использованием pdftotext и awk) для преобразования их в .csv, который затем можно использовать для сопоставления по каждому типу доставки продуктов и складу для создания списков комплектации.

Я хочу запускать скрипт для каждой купюры сразу после ее печати, чтобы отправлять копии на соответствующие склады.

Предварительный план:

После некоторого поиска в Google я решил использовать incrond/incrontab (inotify) для мониторинга активности принтера и запуска моего собственного сценария для обработки каждого счета. При следующем вопросе я нашел информацию о катушке чашек:Где чашки хранят информацию о заданиях на печать?и в CUPS — выводить копии всех заданий печати в формате PDF . Я обнаружил, что данные в /var/spool/cups хранятся «как есть», готовые к копированию и обработке; но я не знаю, как контролировать эту папку или копировать данные - я могу видеть ее только как суперпользователь. Я использую Debian 11. Меня смущает проблема с разрешениями, и я не знаю, что делать.

Должен ли я использовать incrond в качестве root для мониторинга /var/spool/cups? И если да, то как мне затем скопировать новые задания на печать туда, где мой обычный пользователь сможет их прочитать?

(Проблемы с рамкой приветствуются, хотя я вроде как разбираюсь в этом непростом деле).

1 ответ

В вашем подходе есть недостаток, поскольку файл может исчезнуть во время работы вашего скрипта, и это станет ненадежным. Если вы все еще хотите придерживаться предварительного плана, вам следует запускать скрипт от того же пользователя, что и CUPS. Обычно это root, так что да, вам следует запускать его от root.

Лучшим подходом было бы изменить путь для печатных документов, например:

Вы можете добавить собственный фильтр в файл ppd, это будет скрипт, который преобразует печатный файл на лету. Объяснение пользовательских фильтров.

Вы можете назначить новый принтер, например PDF-принтер. Все документы будут сохранены в указанной папке в формате PDF, поэтому вы можете отслеживать эту папку, копировать ее и затем отправлять на реальный принтер с помощью команды lp .

Вы также можете использовать определенный бэкэнд, например Tea4CUPS. Этот и некоторые другие подходы можно найти здесь.

Другие вопросы по тегам