Comments 28
и история 'job completed' или повисшие насмерть джобы в спулере (да так что вообще ничего печатать нельзя, хотя по мониторингу все ок) меня приследовали что в винде что в cups-e
почему блин… ну почему…
Потому что принтеры созданы в основном для нанесения страданий человечеству. А ещё они иногда печатают.
Это касается не только очередей печати, но и самих принтеров. Какой аспект не возьми, там полно граблей и проблем.
Наверное печать документов - это нечто сложнее, чем отправить ракету в космос. Иначе я это объяснить не могу. У нас уже беспилотные автомобили по улицам ездят, а печать... печать никогда не меняется.
Хм, сколько я видел ругани в адрес виндовой реализации сетевых принтеров, драйвера к которым зачем-то должны ставиться и на сервер, и на клиент — а тут внезапно оказалось что и на линуксах та же самая ерунда.
Неужели так никто и не придумал протокола, который бы позволил существовать драйверу только в одном месте?
Ну. Можно подумать все следуют общепринятым стандартам. Всегда найдется "кривой" pdf. То же самое и с системами печати и драйверами и прошивками принтера. Покупка нового принтера в зоопарк почти всегда пляска с бубном.
Преимущество CUPS в данном случае заключается в том, что можно хоть под каждый принтер держать свою версию CUPS, с которой принтер работает лучше всего.
так и работает в линуксе в cups. Здесь автору понадобился 2-й cups чтобы ограничить доступ к принтерам напрямую
Для печати на CUPS-сервер на вендоклиенте на самом деле нужно установить всего один драйвер — MS Postscript.
Никогда не подводит.
Ну а на линуксах Postscript — и так практически формат печати по умолчанию, так что вопрос лишь в доставке результирующего файла на сервер печати.
Класс! А финишер в этом случае работать будет?
Там в PPD как раз описаны дополнительные возможности. И команды, которые нужно инжектить в вывод, чтобы этот самый результат получить.
Я так когда-то брутил вывод от виндовых заданий с задействованием финишера, степлера и прочего тюнинга, находил в заголовке, как именно включаются нужные фичи. А потом прописывал в ppd, и в результате на линуксе стало можно использовать всё то же самое.
В том-то и дело, что в PPD - прописаны, а в упомянутом MS Postscript - нет.
Больше того, я наступал на грабли, когда при установке сетевого принтера (кажется под винду семерку, либо ее серверного современника) это детище микрософта говорит "А у меня уже есть дрова именно под такой принтер, давай поставим их?". Дрова встали, все прекрасно работало, ровно до тех пор, пока юзер не пришел с вопросом "Как мне скрепить листочки в финишере?". Выяснилось, что микрософтовая дровина про дополнительное оборудование не знает ничего, в отличие от родной дровины от коницы. В родной дровине опционное оборудование (финишеры, доп. лотки, колодыры и прочие сортировщики) надо включать ручками, а в микрософтовой оно не включается никак. Совсем.
Насколько помню, там вроде можно взять MS ps и поставить кастомный PPD.
Но я делал с фильтром для pcl.
Насколько помню, там вроде можно взять MS ps и поставить кастомный PPD.
Т.е. собрать уникальный драйвер под уникальный принтер. Чем это отличается от установки драйвера от производителя?
А если принтеры в конторе разные? На одном стоит недофинишер, который может лепить только угловые скрепки, на другом - полноценный буклетчик, на третьем - только лоток разделения работ, который ни скреплять, ни дырявить бумажки не умеет. Получается под каждый из принтеров нужен свой драйвер с уникальным функционалом. И зачем в этой схеме MS PS?
Его применение оправдано, если из оборудования есть, условно, HP LJ 1100 и все - он может либо печатать, либо не печатать. Если принтер немного сложнее (например в третьем лотке лежат бланки грамот плотностью 145 г/м^2) - универсальному драйверу уже не объяснишь, что бумагу формата А4 надо брать не из 1, а из 3 лотка. Увы.
Тут два момента - во-первых, беседовать начали с "MS никогда не подводит". Если он такой супер-надёжный (а драйвера производителя подвели) - то правка PPD, чтобы использовался MS, но при этом задействовались возможности принтера - это вполне вариант.
А второй момент - драйвера может просто не быть. У меня был линукс с каким-то generic pcl фильтром на cups. Была винда с драйверами от производителя. И было желание научить линукс пользоваться всеми теми свистелками, которые умеет винда. По итогу да, кастомизация ppd помогла с этим справиться.
Про ГГ — там слегка не так было, по крайней мере, одинаковая форма использовалась и при приветствии, и когда вожди видели врага. Но спасибо за момент ностальгии :)
Добавил бы про про обновление и синхронизацию версий cups на клиентах и cups-сервере.
И откат если что ). А в остальном - хороший рабочий вариант
Т.е. на стороне клиента и на сервере желательно ставить одинаковые драйвера.
По-моему сразу было очевидно, что это плохая идея. Драйвер самого принтера общается с физически подключённым принтером на его специфическом языке. А удалённый клиент общается не напрямую с принтером, а с CUPS сервера. В принт серверах это же ключевая идея - помучиться, но настроить все принтеры один раз в одном месте, а все остальные печатают пользуясь стандартными драйверами.
типа есть поле 'ориентация' — нет, не пойдёт, мы сделаем внутри еще кастомный раздел где красивыми картинками будет выбираться эта ориентация, и отправляться на принтер через проприетарные поля и в своем закрытом формате… в итоге на клиенте должен быть 'родной драйвер' который компилит этот документ именно в формате принтера со всеми этими 'правильными галочками'… просто потому что без него заполнить эти поля нельзя чтобы на сервере всё разрулилось.
Тема с raw неочевидна, но на самом деле это довольно логично: при удалённой печати фильтрация и бэкенд должны быть на одной стороне, а не сразу на двух. На сервере добавляем принтер как raw, а на клиенте - уже с нормальным драйвером. Мне это помогло.
к чему к чему а вот к cups у меня никогда не было претензий, ни разу не подвёл (хотя была инсталяция с центральным cups на который заведены все принтеры большого предприятия (более 50 принтаков)). а вот к самим принтерам и их драйверам претензий валом.
печать в линуксе ещё не боль, боль это сканирование!
На конторе где я работал, меня возня с драйверами на HP принтер задолбала на столько, что я написал скрипт. Скрипт крутился на сервачке в офисе, читал в 1 поток pdf файлики из телеграм бота, другие форматы нельзя ему было отправлять, потом перегонял pdf в postscript и засылал прямо в принтер ncat-ом. Все это добро упаковал в докер контейнер и радовался жизни. Работало все замечательно и возни с драйверами больше не было. Печатаешь в pdf отправляешь pdf в телеграм бота получаешь документ из принтера, мастхевом было что можно было отправить откуда угодно, получил на email билет к примеру тут же на телефоне переслал в телеграм бота получил напечатанный док.
А с сканером удалось решить вопрос на том же сервачке, взял первый попавшейся веб интерфейс для сканирования и всеми необходимыми драйверами, запаковал все в тот же докер. Если нужно отсканить док просто ложишь его на сканер идешь на url выбираешь все параметры как и в обычном интерфейсе и тыкаешь кнопку скан, через пару секунд скачивается jpg/pdf/png/tiff в зависимости от того что выбрал.
Не драйверов на клиенте не возни с драйверами на сервере, просто запускаешь пару докер образов и все работает.
Заодно зацените схему, делал в отечественном редакторе Автограф под линукс :)
Как раз провожу апробацию этого ПО, куча багов и весь скопирован с британского популярного сервиса…
Тогда платежки сотнями печатали, и пачка листов должна была идти строго по порядку, т. е. если произошел любой сбой (отказ принтера, отключение сетей, все-что-угодно), то нужно продолжить печать в правильном порядке, с нужного документа, а не всю пачку на несколько сот листов ставить повторно.
Поэтому, все задачи сначала сохранял в файловый каталог, а потом оттуда печатал по очереди, с контролем ошибок.
Все еще не опубликовал проект сервера, ни с открытым исходником, ни с закрытым.
Кроме нехватки времени, у меня по этому проекту еще слишком много не решенных вопросов в части того что и как оформить в плане лицензирования.
И да, как советуют в статье — применял разделение сетей: принтеры в одной, клиенты в другой, а посередине — сервер.
И да, как указывали в комментариях — производители принтеров бывают в конец одуревшие, пишут лютую дичь в драйверах, но и на такой случай есть обходные решения.
Коллеги, в настоящее время возюкаюсь с написанием виртуального принтера под российские версии линуксов. Идея как раз в том, чтобы у клиентов стоял только один принтер, который перехватывает задание печати в виде PDF файла + описание задания (копии, коллэйты, дуплекс, разрешение и пр..) отправляет это все на сервер печати, а там задание проходит аудит безопасников, затем проверяются квоты юзера, затем задание висит в очереди до востребования. А юзер подходит к любому МФУ в офисе, авторизуется и получает свое задание именно на этом принтере. Все в общем-то работает, но есть вопросы по работе конвеера CUPS. Пытался юзать CUPS API для получения описания задания... выяснилось что росс линуксы чихать хотели на описание задания и CUPS API. Как собирали CUPS и зачем там все порезали хз, но API из пары десятков полей возвращает малую часть. В итоге, пришлось парсить файл описания задания чтобы получить нужную инфу. Дальше веселее, ответа пока не нашел - несмотря на то, что в своем виртуальном принтере я установил его как PDF принтер, в некоторых приложениях типа Libre Office Calc вывод задания можно выполнить в формате PS.
При этом в файл описания печатного задания CUPS не кладет поля Copies и Collate. И вроде фигня - отпарсить PS файл, вынуть оттеда Copies и Collate и конвертнуть ps2pdf перед отправкой файла...
Но собака тут и порылась поле Copies в PS файле задания есть, а вот поля Collate нет! Т.е. оно просто теряется...
Я генерил PS файлы на разных версиях Линуха: Red Os, Astra... ситуация повторяется 1:1.
ЧЯДНТ!??
Научите дурака...
Ненавижу тебя, CUPS