Как стать автором
Обновить

Комментарии 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 на сервере. Я, когда сталкивался с необходимостью печатать через удаленный CUPS, пришел к включении этого на клиенте. Если на сервере установлены драйвера и все нормально печатает, то lpadmin -p name -m raw на клиенте по моему опыту избавляет от всяческих проблем.

Тема с raw неочевидна, но на самом деле это довольно логично: при удалённой печати фильтрация и бэкенд должны быть на одной стороне, а не сразу на двух. На сервере добавляем принтер как raw, а на клиенте - уже с нормальным драйвером. Мне это помогло.

в том то и дело, что raw не нужен на сервере - ведь именно он общается с железом напрямую. С другой стороны клиент тоже должен понимать что умеет принтер.

к чему к чему а вот к cups у меня никогда не было претензий, ни разу не подвёл (хотя была инсталяция с центральным cups на который заведены все принтеры большого предприятия (более 50 принтаков)). а вот к самим принтерам и их драйверам претензий валом.
печать в линуксе ещё не боль, боль это сканирование!

С принт серверами дел не имел, но ранее у меня без танцев с бубнов локальный принтер с купсом завести не удавалось. В конце-концов конечно заводилось, но танцы были, да. Но вот буквально пару месяцев назад подключал сетевой принтер, завелось со второй попытки, так что прогресс явно налицо.

На конторе где я работал, меня возня с драйверами на HP принтер задолбала на столько, что я написал скрипт. Скрипт крутился на сервачке в офисе, читал в 1 поток pdf файлики из телеграм бота, другие форматы нельзя ему было отправлять, потом перегонял pdf в postscript и засылал прямо в принтер ncat-ом. Все это добро упаковал в докер контейнер и радовался жизни. Работало все замечательно и возни с драйверами больше не было. Печатаешь в pdf отправляешь pdf в телеграм бота получаешь документ из принтера, мастхевом было что можно было отправить откуда угодно, получил на email билет к примеру тут же на телефоне переслал в телеграм бота получил напечатанный док.
А с сканером удалось решить вопрос на том же сервачке, взял первый попавшейся веб интерфейс для сканирования и всеми необходимыми драйверами, запаковал все в тот же докер. Если нужно отсканить док просто ложишь его на сканер идешь на url выбираешь все параметры как и в обычном интерфейсе и тыкаешь кнопку скан, через пару секунд скачивается jpg/pdf/png/tiff в зависимости от того что выбрал.
Не драйверов на клиенте не возни с драйверами на сервере, просто запускаешь пару докер образов и все работает.

НЛО прилетело и опубликовало эту надпись здесь

Заодно зацените схему, делал в отечественном редакторе Автограф под линукс :)

Как раз провожу апробацию этого ПО, куча багов и весь скопирован с британского популярного сервиса

посмотрел - действительно, стандартное российское импортозамещение :)

Я, даже несколько лет назад, для одного банка под винду на C++ принт-сервер написал, со своей очередью печати, историей распечатанных документов, и с поиском по ним, с рассылкой уведомлений и прочее и прочее.
Тогда платежки сотнями печатали, и пачка листов должна была идти строго по порядку, т. е. если произошел любой сбой (отказ принтера, отключение сетей, все-что-угодно), то нужно продолжить печать в правильном порядке, с нужного документа, а не всю пачку на несколько сот листов ставить повторно.
Поэтому, все задачи сначала сохранял в файловый каталог, а потом оттуда печатал по очереди, с контролем ошибок.
Все еще не опубликовал проект сервера, ни с открытым исходником, ни с закрытым.
Кроме нехватки времени, у меня по этому проекту еще слишком много не решенных вопросов в части того что и как оформить в плане лицензирования.

И да, как советуют в статье — применял разделение сетей: принтеры в одной, клиенты в другой, а посередине — сервер.
И да, как указывали в комментариях — производители принтеров бывают в конец одуревшие, пишут лютую дичь в драйверах, но и на такой случай есть обходные решения.

Коллеги, в настоящее время возюкаюсь с написанием виртуального принтера под российские версии линуксов. Идея как раз в том, чтобы у клиентов стоял только один принтер, который перехватывает задание печати в виде 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.
ЧЯДНТ!??
Научите дурака...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий