У меня есть сервер, на котором у меня есть несколько последовательных принтеров, настроенных как необработанные очереди в чашках. На каждом из них я установил сценарии интерфейсов для выполнения некоторых простых манипуляций с выводом и для обработки IPC с приложением, которое работает на сервере и предпочитает напрямую подключаться к принтерам и писать на них, что не очень хорошо сочетается с чашками, думая, что он исключительно контролирует принтерные устройства. Там вроде все работает.
Войдите в другое приложение на сервере, которое, хотя и проходит через чашки (после буферизации через собственный диспетчер очереди печати), по-видимому, вводит escape-коды для конкретного принтера в файлы, которые оно распечатывает. Другими словами, печать, производимая этим приложением, представляет собой не просто поток простых текстовых символов, но содержит двоичные управляющие коды, которые принтер должен интерпретировать.
Проблема, с которой я сталкиваюсь, заключается в том, что cups, похоже, обходят мои интерфейсы, когда получают такие файлы из этого второго приложения. Я проверил это, настроив два почти идентичных файла печати. Первый содержал простой текст «Привет, мир!» за которым следует символ новой строки; вторая содержала escape-коды для одного из принтеров, за которыми следовала фраза «Hello, world!» и новая строка. Затем я добавил строку «sleep 5» в интерфейс моего принтера, чтобы при печати была заметная задержка.
Когда я напечатал первый файл с помощью lp, секунд пять ничего не происходило, после чего принтер ожил и выписал "Hello, world!" Однако, когда я напечатал второй файл с помощью той же самой команды lp
, он сразу же напечатал «Hello, world!» без сна. Я также отметил, что я могу использовать опцию «-o raw
» в lp
, чтобы заставить такое же поведение с первым файлом (немедленно распечатать его без пятисекундной задержки).
Я предполагаю, что cups просматривает фактические печатаемые данные и пытается определить их тип, и когда он видит escape-коды принтера в данных, он решает, что это «сырая» печать, и обходит интерфейс. Это не то поведение, которого я ожидал, поскольку я изначально настроил принтер как «необработанную» очередь и предположил, что это означает, что чашки будут просто передавать все, что отправляется ему через интерфейс; тем не менее, это поведение, которое я вижу.
Мой вопрос: Есть ли способ отправить чашкам параметр (кроме -o raw
, который, по-видимому, также обходит интерфейс), говоря ему, чтобы он не определял тип полученных данных печати и продолжал и отправлял их. к сценарию интерфейса? В качестве альтернативы, есть ли способ указать формат входящих данных (например, сказать чашкам, что они получают "обычный текст", даже если он содержит escape-коды), чтобы cups не будут смотреть на него и просто передадут в интерфейс?