LINUX.ORG.RU

Расскажите новичку про печать в Linux'e


0

0

Мой вопрос не конкретный, а общий. Если не лень то раскажите пожалуйста как устроен процесс печати в линуксе. Где драйвера и нужны ли они (не адрес в инете, а на диске они где располагаються)? Как соотносятся между собой например CUPS и lpr?

Чтобы было понятнее суть вопроса раскажу для примера как это дело в винде устроено. Сначала любая прога задействует GDI а он передаёт информацию драйверу (файлы которого лежат в системной папке) который в свою очередь переводит всё на язык принтера (например PostScript). Благодаря этому после установки драйвера совершенно любая прога печатает стандартным способом (через GDI). Есть даже спец GDI принтеры.

А как в линуксе?

anonymous

Лучше не спрашивай, поиши в разделе документации, там обязательно найдешь что тебе нужно.

Vlad_Ts ★★★★★
()

Вы немного не с той стороны начали.
Так или иначе в Виндовз при печати приложение печатает графику в w(e)mf. Который затем передается в драйвер принтера, который в свою очередь переводит формат wmf в формат понятный принтеру (GDI принтеры понимают сырой wmf, постскрипт принтеры требуют перевода wmf в постскрипт, PCL, коих большинство, соответственно в PCL).
На самом деле в Linux все то же самое, только универсальным стандартом является postscript. От приложения требуется, чтобы она вывела графику в постскрипте (к сожалению пока формирование постскрипт файла лежтит исключительно на совести разработчика программы, и системных или X-овых утилит для WYSIWYG печати в Линуксе нет). Переводом постскрипт файла во внутренний язык принтера занимается ghostscript + несколько (примерно 2-3 десятка) плагинов для него, на линуксовом жаргоне называемыми драйверами принтера. Передачей перведенного файла в принтер занимаются ядерные модули (если принтер сидит на usb интерфейсе, то вам соответственно нужен драйвер printer)
Lpr и cups - это команды которые передают постскрипт файл демонам печати (lpd,cupsd), которые в свою очередь организуют вызов ghostscripta и передачей транслированного файла на нужный интерфейс (демон lpr это делает честно, а cupsd использует свой внутренний урезанный gs). В принципе в Линуксе можно осуществить печать только средствами ghostscript без обращения к cups или lpr. В сущности задача cups или lpr это сделать видимым по сети интерфейс принтера.

geekkoo
()
Ответ на: комментарий от geekkoo

> в Виндовз при печати ...

Про винду я в курсе. Просто для примера привёл.

> в Linux все то же самое, только универсальным стандартом является postscript.

А если принтер PCL? А если матричный? Тогда дальше идёт обработка плагинами к gs?

> ghostscript + несколько (примерно 2-3 десятка) плагинов для него, на линуксовом жаргоне называемыми драйверами принтера.

А CUPS может использовать все эти плагины? Ну в с мысле урезанность gs ему никак не мешает?

> Передачей перведенного файла в принтер занимаются ядерные модули

Это типа как HAL в w2k например?

> В сущности задача cups или lpr это сделать видимым по сети интерфейс принтера

В винде драйвера ставяться на каждую систему (даже если печать по сети), а в линуксе как? Я имею ввиду нужен ли например gs если печать по сети?

> От приложения требуется, чтобы она вывела графику в постскрипте

А возможна ли печать в "текстовом" режиме на матричный принтер? Так гораздо быстрее выходит.

anonymous
()
Ответ на: комментарий от anonymous

>> в Linux все то же самое, только универсальным стандартом является postscript.

>А если принтер PCL? А если матричный? Тогда дальше идёт обработка плагинами к gs?

Драйвер принтера (плагин к gs) должен перевести postscript-файл в формат понятный принтеру (те если принтер PCL, вы должны сказать gs, какой именно плагин он должен использовать, чтобы транслированный файл был понятен принтеру). Вы в своей программе можете выдать наружу текстовый формат (и не только текстовый) и разными утилитами преобразовать его в постскрипт (как правило - зависит от качеств администратора - этим занимаются программки - print-filters, к примеру apsfilter - запускаемые демоном печати)

>> В сущности задача cups или lpr это сделать видимым по сети интерфейс принтера

>В винде драйвера ставяться на каждую систему (даже если печать по сети), а в линуксе как? Я имею ввиду нужен ли например gs если печать по сети?

Нет! Если все правильно настроено, то требуется передача постскрипт файла на компьютер, к которому подсоединен принтер.

>> От приложения требуется, чтобы она вывела графику в постскрипте

>А возможна ли печать в "текстовом" режиме на матричный принтер? Так гораздо быстрее выходит.

Можно (cat test.txt> /dev/usb/lp0), но будет хреново (в частности разные принтеры по разному интерпретируют, что является концом строки (CR,CR+LF))

geekkoo
()
Ответ на: комментарий от geekkoo

>Можно (cat test.txt> /dev/usb/lp0), но будет хреново (в частности >разные принтеры по разному интерпретируют, что является концом строки >(CR,CR+LF))

Можно сделать фильтр для добавления нужного символа конца строки и прописать его, кажется, в /etc/printcap (или засунуть в CUPS).

Harliff ★★★★★
()
Ответ на: комментарий от geekkoo

2geekkoo:

Огромное тебе спасибо за твои ответы.

А насчёт "печати в текстовом режиме на матричный" я просто наверно чуть не так выразился. Я имел ввиду есть ли какой-то аналог старой досовской проги printfx? Она по русски печатает (кажеться шрифты умеет загружать). А под виндой приходиться при установке "только текстового" драйвера хитрить немного (заменять там одну таблицу перекодировки или вроде того).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.