Как отслеживать и копировать данные спула 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. Этот и некоторые другие подходы можно найти здесь.