Как установить принтер.

Служба печати cups устанровлена обычно по умолчанию. А драйвера находятся в пакете foomatic-3.0.2-19.i386.rpm (для fedora core 4). Он обычно тоже установлен если нет, устанавливаем командой
# rpm -ihv foomatic-3.0.2-19.i386.rpm
i- значит install, h- отображает progress-bar, v-verbose
если хотим обновить уже установленный foomatic то можно попробовать
# rpm -Uhv foomatic-3.0.2-19.i386.rpm
U-upgrade.
Итак foomatic установлен.

Пусть мы имеем принте HP LaserJet 4l. Ищем этот принтер в базе данных foomatic командой
#foomatic-ppdfile -A | grep 4L
A- выводит все модели принтеров на экран, grep 4L-фильтрует этот поток и выводит на экран только строки содержащие "4L"(заглавные незаглавные различаются).
Итого имеем вывод на экран:
HP LaserJet 4L Id='HP-LaserJet_4L' Driver='hpijs' CompatibleDrivers='hpijs-rss ljet4 omni-compiled gimp-print gimp-print-ijs hpijs '
Brother M-1824L Id='Brother-M-1824L' Driver='omni-compiled'
HP LaserJet 4V/4LJ Pro Id='HP-LaserJet_4V_4LJ_Pro' Driver='lj4dithp' CompatibleDrivers='hpijs-rss lj4dithp hpijs '
Brother M-1924L Color Id='Brother-M-1924L_Color' Driver='omni-compiled'
Brother M-1924L Id='Brother-M-1924L' Driver='omni-compiled'
HP LaserJet 4LJ Pro Id='HP-LaserJet_4LJ_Pro' Driver='omni-compiled'
Brother M-1824L Color Id='Brother-M-1824L_Color' Driver='omni-compiled'

Id — имя принтера в базе foomatic, Driver — рекомендуемый драйвер, CompatibleDrivers — другие (совместимые драйвера). Итого видим что HP LaserJet 4l имеет Id='HP-LaserJet_4L', и Driver='hpijs'.
Теперь нужно отдать команду foomatic чтобы он скомпилировал драйвер

#foomatic-ppdfile -p 'HP-LaserJet_4L' -d 'hpijs' > /usr/share/cups/model/hp4l.ppd

p- printer (id принтера), d- driver.
Итого в каталоге мы получим файл-драйвер принтера hp4l.ppd (драйвера имеют расширение .ppd). Почему в каталог /usr/share/cups/model.
Потому что скармливать этот драйвер мы будем службе обслуживающей принтеры cups, а она ищет драйвера в каталоге /usr/share/cups/model.

(кстати говоря после того как принтер будет установлен то его драйвер будет перекопирова службой cups из /usr/share/cups/model в /etc/cups/ppd, это значит что если принтер установлен то драйвер от него всегда можно найти в /etc/cups/ppd !)

После того как драйвер сформирован помещен в нужный кталог /usr/share/cups/model., чтобы его заметила cups кроме того нужно перезапустить командой

# service cups restart

Переходим в панель управления cups. Открываем браузер и набираем http://localhost:631 (это по умолчанию, но конкретно нужно смотреть как прописано в файле /etc/cups/cups.conf, например я переделал на адрес http://ipaddress:631).




Добавлять удалять принтеры обычно может только администратор (так по умолчанию, но это можно поменять в /etc/cupsd.conf). Поэтому заявляем cups что мы администратор и хотим выполнять административные задачи- жмем на "Do Adminstration Task" и вводим root и password.


После этого попадаем в окно

жмем add printer, попадаем в нижеприведенное окно. Строка "Name"-это имя очереди - если проводить аналогию с windows то это имя принтера в сети если его расшарить, то есть это то имя по которому к нему можно обратиться по сети. Предлагаю все поля "Name" "Descrition" "Location" заполнять одинаково и заполнить все. Потому что например wine работает не с полем "Name" а с полем "Description" или "Location" точно не помню, но главное – если будет заполнено только поле "Name" то wine такой принтер кажем так не увидит.

Жмем continue. Слудующее окно


в поле device нужно в открывающемся списке указать какой тип подключения мы имеем к принтеру. Расмотрим типы применяемые в работе:

жмем continue . В следующем окне мы увидим настолько много фирм производителей насколько много скомпиллированных файлов-драйверов лежит в каталоге /usr/share/cups/model/. Выбираем HP (мы хотим установить HP LaserJet 4L).

жмем continue . Следующее окно. Так файлов относящихся к HP в /usr/share/cups/model несолько то и доступных в списке драйверов несколько. Наш драйвер это HP LaserJet 4L Foomatic/ljet4 (recommended) (en). Вообще же если нет уверенности, то можно всегда заглянуть внутрь откомпилированного драйвера (в нашем случае это hp4l.ppd) и посмотреть значение параметра "NickName"


и по нему идентифицировать драйвер из списка

жмем continue. Следующее окно. Принтер успешно добавлен


принтер можно сконфигурировать зайдя в закладку Printers

и нажав на "configure printer"

следующий тип подключения
- USB
принтер может быть непосредственно подключен к компьютеру через USB. Тогда в окне device, в списке должно появится что то типа USB Printer #1 (Xerox Phaser 3120)


дальнейшая установка идентична случаю lpt.
Теперь рассмотрим сетевые типы подключения . Первый это подключение к сетевому принтеру , которые непосредственно подключен к компьютеру с windows. В терминах linux это smb принтер, а windows сеть это smb сеть. Итак smb принтер (samba принтер).
-Windows printer via SAMBA


В следующем окне нужно указать где же этот принтер находится. В общем виде это записывается так
smb://user:pass@WORKGROUP/server/printer
причем "server" может быть как именем компьютера в сети так и его ip адресом. Если на windows компьютере настроен например гостевой доступ то пишем так

дальнейшая установка аналогична предыдущим случаям. Дополнение, если мы хотим наш локально подсоединенный принтер к нашей linux машине расшарить для windows (smb) сети. То делается это путем правки файла /etc/samba/smb.conf поскольку этим сейчас не пользуюсь и не могу точно сказать что там нужно прописать. Расшарить же принтер на linux машиене для windows машины отлично можно сделать через lpd/lpr (об этом ниже).

Следующий тип сетевого подключения это
-LPD/LPR



как я понял это родной(до недавнего времени до cups ) для linux способ печати и расшаривания принтера для сети.
Чтобы подключиться к сетевому принтеру который подключен к компьютеру с сервером LPD. Нужно знать IP адрес этого компьютера и так называемое имя очереди принтера (в cups это поле NAME смотри выше). Lpd сервер может быть не только на linux машине но и на windows машине, там именем очереди является имя под которым принтер расшарили. Из предыдущего примера положим что компьютер 192.168.0.52 имеет и lpd сервер, тогда в поле device чтобы подключить такой принтер нужно написать


В windows имя расшаренного принтера для windows (smb) сети и имя очереди принтера lpd всегда совпадают. Это начит что если мы значем под каким именем принтер расшарен в windows сети значит мы знаем под каким именем подсоединяться к принтеру через lpd. Lpd способ (для windows компьютера по крайней мере ) имеет одно очень удобное свойство в отличие от smb , если сетевой принтер подключен к компьютеру через lpd то печать на него осуществляется без задержки и торможения, что существенно отличается на поведение при посылке на печать на сетевой принтер smb – видимо windows связывается с компьютером к которому подключен сетевой (для нас) принтер и обменивается какимим то данными,проверяет статус или еще что (перед печатью печать еще не началась) Однако с точки зрения пользователя в итоге при посылке на печать сетевлого smb принтера наблюдается как бы зависание и торможенение компьютра на 3-10 секунд . Что сильно раздражает при необходимости частой печати в течение рабочего дня.
Дальнейшая установка lpd аналогична предыдущим случаям. Дополнение: как с windows машины подключить и работать с принтером непосредственно подключенным к linux машине. Для этого на linux машине (в данном случае Fedora Core 4) устанавливаем пакет

# rpm -ihv xinetd-2.3.13-6.i386.rpm

это дает нам возможность установить пакет cups-lpd-1.1.23-15.i386.rpm

# rpm -ihv cups-lpd-1.1.23-15.i386.rpm

После установки xinetd , нужно в файл /etc/ xinetd.conf нужно добавить строки
service printer
{
socket_type = stream
protocol = tcp
wait = no
user = lp
group = sys
passenv =
server = /usr/lib/cups/daemon/cups-lpd
server_args = -o document – format = applicatpion/octet-stream
}
эти строки можно найти в man xinted
для debian вместо cups-lpd работает cups-bsd который должен быть установлен и такую же самую фигню с xinetd нужно проделать.
перезапускаем службы cups и xinetd и проверяем прослушивается ли 515 порт. должен прослушиваться и печать через lpr должна рабоать. у меня сработало. таже как то в дебиане  я обошелся  однажлды и без xinetd но не помню. а этот метод прям проверял сегодня.

далее нужно чтобы служба cups-lpd была запущена

# service cups-lpd start

таким образом мы установили lpd сервер на linux машине которая будет принимать lpd команды из сети и печатать, при этом все принтеры уже установленные в cups автоматом становятся доступными для подключения к ним по сети , нужно только знать какое имя очереди соответствует каждому принтеру а оно соотвтствует параметру NAME (если непонятно смотрим картинку четыре сверху).

На windows машине выполняем:








Обращаю внимание на галочку «Разрешен подсчет байт в LPR». Если ее нет то работать не будет.
Этот способ хорошо тем, что не требует никаких дополнительных установок компонентов, предварительных приготовлений итп. На всякий случай опишу как еще можно сделать примерно то же самое.


(Установка удаление программ)-(установка /удаление компонентов) -(Other Network File and Print Services)– (Print Services for Unix). Установка этого компонента приводит что в далнейшем в соответствующем окошке появляется новый тип порта "тип порта LPR".
После этого идем в (установку принтеров) – (добавить новый принтер) -(локальный принтер)-(Create new port (тип порта LPR)) – (address server providing lpd = ip адресу компьютера к принтеру которого подключаемся , Name printer = имя очереди)
Относительно установки принтера и его расшаривания для других все


С точки зрения администрирования нужно дать возможность пользователям отменять печать (отменять задания посланные на печать). Графические средства ненадежны и неэффективны в linux к сожалению.
По умолчанию в панели управления cups ( имеется в виду веб интерфейс показанный выше) отменять задания могут только администраторы. Теоретически заявлено что cups путем правки cupsd.conf можно настроить чтобы простые пользователи без всяких паролей могли печать. Тогда было бы достаточно сделать закладку в браузере на раздел "Jobs" в панели управления cups. Достаточно нажать "Cancel Job" на соответствющем задании.



При желании можно изменить названия кнопок на русские , так как элементы веб интерфейса cups лежать в /usr/share/cups/doc/images



Однако из ошибок в CUPS по крайней мере в той версии которая присутствует в Fedora Core 4 для простых пользователей отмену печати настроить нельзя.
Поэтому делаем по другому.
Идем и правим /etc/cupsd.conf
В соответствующих местах(они понятны по комментариям внутри файла и вообще) меняем(или если уже есть не меняем) строки

LogFilePerm 600
MaxLogSize 2 000 000 000
LogLevel info
Printcap /etc/printcap

вот эти четыре вышеприведенные настройки должны быть по умолчанию вообще то.

Listen 192.168.0.xxx:631 - этим мы говорим чтобы панель управления cups срабатывала на http://ipaddress:631 а не на http://localhost:631 .
Это нужно затем что когда localhost то может быть бардак и у пользоваеля будут отображаться чужие очереди печати.

<Location/>
AuthType None
Order Deny,Allow
Deny From All
Allow From @ LOCAL
Allow From 192.168.0.*
Allow From 10.100.100.*
</Location>

Этой секцией мы разрешаем подключаться без пароля к нашим принтерам к локальному компьютеру так и по сети с адресов 192.168.0.*, 10.100.100.*

<Location /jobs>
AuthClass System
AuthType Basic
</Location>

Этой секцией мы говорим что при нажатии на раздел "jobs" в панели управления cups должен спрашиваться логин и пароль. Причем когда введен логин и пароль то cups смотрит входит ли пользователь (не тот пользователь под которым пользователь вошел в linux а тот чей логин и пароль был введен в секции "jobs" ) в группу sys. Если да то вход в секцию jobs будет разрешен.





<Location /printers/1710>
AuthType None
Order Deny,Allow
Deny From All
Allow From @LOCAL
Allow From 192.168.0.*
Allow From 10.100.100.*
</Location>


данная секция нужна для каждого установленного принтера. когда мы отменяем задание в браузере в разделе jobs, то браузер нам пишет JOB 30 canceled. при этом ссылка JOB 30 ведет на страницу http://192.168.0.173:631/printers/1710 (смотрим на рисунок) . Без данной секции нажатие на ссылку приведет к экрану "Permissions denied".


<Location /admin>
AuthClass System
AuthType Basic
</Locaction>

Эта секция запароливает вход в раздел "admin" в панели управления cups.

Далее заводим пользователей скажем printer(имя неважно) в группе sys(важно). Почему именно группа sys- потому что так заведено в cups. В настройках этого пользователя запрещаем ему возможность входа на машину (/sbin/nologin)


таким образом пользователь printer имеет административные права в cups и значит может удалять задания на печать , с другой стороны в linux он не может делать ничего. Зачем было заводить требование на пароль в секцию "jobs" затем что при входе без требования пароля пользователь отождествляется cups как простой пользователь и соотвественно не может отменять печать.

теперь в браузере добавляем закладку на http\\192.168.0.xxx:631\jobs
При входе браузер спросит логин и пароль,вводим printer ,пароль и говорим запомнить пароль. Всё пользователь может эффективно отменять задания посланные на печать.


Важно
если раскомментирована секция <Location /printers>, не секция <Location /printers/конкретный принтер>, а именно <Location /printers> (пример ниже) то эту секцию нужно обязательно закомментировать, иначе в OpenOffice при попытке доступа к принтеру будет выскакивать табличка введите пароль. Да и просто при попытке полазить по настройкам будет спрашивать пароль, но корень проблемы именно в этом.

<Location /printers>
AuthType None
Order Deny,Allow
Deny From All
Allow From @LOCAL
Allow From 192.168.0.*
Allow From 10.100.100.*
</Location>

Еще раз секцию <Location /printers> нужно закомментировать.

#<Location /printers>
#AuthType None
#Order Deny,Allow
#Deny From All
#Allow From @LOCAL
#Allow From 192.168.0.*
#Allow From 10.100.100.*
#</Location>

далее.
очень короткие задания на печать отменить в FC4 не удается, он их видимо быстро обрабатыаает и бросает в память пинтера а в логе записывает 'не возможно отменить печать так как задание уже выполнено'


------------------------------


в windows установить сетевой raw принтер подключенный к linux.
В linux в cups выбираем raw в разделе драйверов.
В windows выбираем интернет принтер и его адрес что то вроде http://192.168.0.x/printers/canon
где 192.168.0.x – адрес linux компьютера, canon – имя очереди принтера.
---------------------------------


Linux Fedora Core 4. принтер Canon IP 3500.  так получается что 
#foomatic-ppdfile -A | grep Canon
показал что драйвера для конкретно этого принтера нет. Что делать,пробeуем без драйвера как raw принтер - не печатает. можно скачать драйвер с сайта
Canon. Но можно и просто подобрать драйвер от другого принтера. стратегия такая смотрим на каких
картриджах работает наш принтер идем на сайт Canon и смотрим какие более ранние принтеры
работали на этих картриджах и смотрим есть ли этот более ранний принтер в списке foomatic. но в данном случае инета нет, поэтому пробуем драйвер от 
другого струйного принтера - Canon S300 , драйвер gimp-print-ijs и все отлично работает.
правда печатает только с верхнего лотка. нижний лоток не выбрать.  а нижний работает только с фирменного
драйвера cnijfilter который жрет до ... ресурсов оставляет в памяти сервис который даже на холостом ходу жрет 30% процессора итп дрянь.  
Продолжение
нужно чтобы 
Во время печати  
$ top
показывает что одним из основных процессов который жрет ресурсы  есть gs.

Запустил печать с фирменным драйвером Canon IP3500.ppd (cnijfilter) из комплекта: 
cnijfilter-common-2.80-1.i386.rpm 
cnijfilter-ip3500series-2.80-1.i386.rpm 

и дал команду
#ps -aux | grep gs
получил


/usr/bin/gs -r200 -g1652x2338 -q -dNOPROMPT -dSAFER -sDEVICE=ppmraw -sOutputFile=- -| /usr/local/bin/cifip3500 --imageres 200 --papersize a4 --media plain --paperload frontplain --bbox 9,14,585,834 

видно что команда gs перенаправляется на /usr/local/bin/cifip3500

потом запустил печать на принтере с драйвером foomatic S300.ppd и получил
gs '-dPARANOIDSAFER' '-dNOPAUSE' '-dBATCH' '-sDEVICE=ijs' '-sIjsServer=ijsgimpprint' '-dIjsUseOutputFD' '-sDeviceManufacturer=CANON' '-sDeviceModel=bjc-s800' '-dDEVICEWIDTHPOINTS=595' '-dDEVICEHEIGHTPOINTS=842' '-r300x300' '-sProcessColorModel=DeviceRGB' '-sIjsParams=Quality=300x300dpi,InkType=CMYK,MediaType=Plain,MediaSource=Auto,Dither=Adaptive,ImageType=2,Density=1.000000,Brightness=1.000000,Gamma=1.000000,Contrast=1.000000,Saturation=1.000000,Cyan=1.000000,Magenta=1.000000,Yellow=1.000000' '-sOutputFile=| cat >&3' '/dev/fd/0' 3>&1 1>&2
  
потом я посмотрел в s300.ppd
и увидел похожую строчку

*FoomaticRIPCommandLine: "gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDE&&
VICE=ijs -sIjsServer=ijsgimpprint -dIjsUseOutputFD%A -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=- -"

пришла идея что эта строка и отвечает за печать , подправил ее добавив перенаправление на /usr/local/bin/cifip3500 &&
--imageres 200 --papersize a4 --media plain --paperload frontplain


*FoomaticRIPCommandLine: "gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDEVICE=ijs -sIjsServer=ijsgimpprint -dIjsUseOutputFD -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=-  -| /usr/local/bin/cifip3500 &&
--imageres 200 --papersize a4 --media plain --paperload frontplain"

но не запечатало. тогда поменял -sDEVICE=ijs на   -sDEVICE=ppmraw и запечатало через нижний лоток.

еще один неприемлимый момент : когда запускается печать и происходит печать то она работает с тем же приоритетом что и другие проги, это приводит к тому что запуск gimp, работа в нем, сканирование, интернет - все это происходит с тормозами. тогда пришла идея добавить nice 


*FoomaticRIPCommandLine: "nice -n 19 gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDEVICE=ppmraw -sIjsServer=ijsgimpprint -dIjsUseOutputFD -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=-  -| nice -n 19 /usr/local/bin/cifip3500 &&
--imageres 200 --papersize a4 --media plain --paperload frontplain"

после этого можно было спокойно работать без тормозов и рывков а печать реально происходила в фоновом режиме, но при изменении качества печати из cups, необъяснимо менялся размер картинки на листе.

вопрос почему в ps -aux много всего
gs '-dPARANOIDSAFER' '-dNOPAUSE' '-dBATCH' '-sDEVICE=ijs' '-sIjsServer=ijsgimpprint' '-dIjsUseOutputFD' '-sDeviceManufacturer=CANON' '-sDeviceModel=bjc-s800' '-dDEVICEWIDTHPOINTS=595' '-dDEVICEHEIGHTPOINTS=842' '-r300x300' '-sProcessColorModel=DeviceRGB' '-sIjsParams=Quality=300x300dpi,InkType=CMYK,MediaType=Plain,MediaSource=Auto,Dither=Adaptive,ImageType=2,Density=1.000000,Brightness=1.000000,Gamma=1.000000,Contrast=1.000000,Saturation=1.000000,Cyan=1.000000,Magenta=1.000000,Yellow=1.000000' '-sOutputFile=| cat >&3' '/dev/fd/0' 3>&1 1>&2

а в foomatic файле гораздо меньше
*FoomaticRIPCommandLine: "gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDE&&
VICE=ijs -sIjsServer=ijsgimpprint -dIjsUseOutputFD%A -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=- -"
потому что остальные параметры подставляются в переменную %B или что то в этом роде. откуда же они берутся в переменную %B. да они  подставляются на основе выбранных нами значений качества печати итп в графическом окне cups. вот как описывается качество в файле s300.ppd


*OpenUI *PrintoutMode/Printout Mode: PickOne
*FoomaticRIPOption PrintoutMode: enum Composite A
*OrderDependency: 10 AnySetup *PrintoutMode
*DefaultPrintoutMode: Normal

...

*PrintoutMode High/High Quality: "%% FoomaticRIPOptionSetting: PrintoutMode=High"
*FoomaticRIPOptionSetting PrintoutMode=High: "GSResolution=600x600DPI &&
Quality=600x600dpi Dither=Adaptive ImageType=Photographs OutputType=Co&&
lor"
*End

...

*CloseUI: *PrintoutMode 

отсюда и видно откуда берется adaptive итп.

поэтому кстати может получитться нессответвствие если мы выберем качество "normal" которому соответствует -r 300x300, которое и подставитсься в gs. но при этом --imageres у нас останется 200 (он же вручную намертво прописан). тогда при печати размер картинки изменится.

в итоге вот конечная строка в изменненном s300.ppd

*FoomaticRIPCommandLine: "nice -n 19 gs -q -r600 -g4956x7014 -q -dNOPROMPT -dNOPAUSE -dSAFER -sDEVICE=ppmraw -sOutputFile=- -| nice -n 19 /usr/local/bin/cifip3500 &&
--imageres 600 --papersize a4 --media plain --paperload frontplain"
 

здесь все параметры прописаны намертво, и поэтому от нашегно выбора переменных через графическое окно в cups никак не зависят. как видно в gs прописано разрешение -r 600, и соответствующее этому -r количество точек -g для формата бумаги A4. -dNOPAUSE дает возможность печатать более одной копии. --paperload frontplain это печать через нижний лоток. параметры для cififp3500 можно подсмотреть в ip3500.ppd 


также параллельно становится понятно что менюшки в cups в файле foomatic задаются через
*OpenUI *...
...
*CloseUI: *...

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


обидно что нормальных маленьких быстрых и функциональных ( масштаб, поля быстрый предпросмотр итп) программ просмотра и печати картинок ни под gnome ни под kde нет. таких как irfanviewer. например в kview жутко тормозной предпросмотр а про остальное вообще молчу. 
только irfanview+wine

по ходу работы замечено, задаем печать 300 копий. irfanview при посылке на печать видимо из за реализации wine обрабатывает не одну а все 300 копий (а они ж ведь одинаковые ).
здесь загрузка проца 25% диск дергается лишь иногда потому как этот этап ускорить неясно. когда же irfan view отработает. то видимо это еще не конц обработки . так как потом начинается печать(до этого принтер стоит). и  на каждом листе наблюдается пиковая сильная нагрузка процессора 70-80 % . в паузе промотки бумаги междду страницами нагрузка спадает почти до нуля . заметил нагрузка эта напрымую зависит от заданного dpi в строке gs в файле foomatic. время же работы irfanviewr от dpi в foomatic никак не завистт. а зависит только от размера исходного файла. таким образом насколько быстро печать начнется зависит от размера файла.  


отмена печати работает только так: жмем на принтере кнопку отмена печати. потом в cups отмена печати. потом ждем секунд 20. только потом посылаем на печать новое задание. если послать раньше то оно как бы сгорит как его и не было. 

как ни странно в ip3500.ppd нет никакой строки с gs. хотя в ps -aux | grep gs есть. и как ни странно то что измененным s300.ppd мы делаем вобщем тоже самое что делает оригинальрный драйвер судя по ps-aux |grep gs

/usr/bin/gs -r200 -g1652x2338 -q -dNOPROMPT -dSAFER -sDEVICE=ppmraw -sOutputFile=- -| /usr/local/bin/cifip3500 --imageres 200 --papersize a4 --media plain --paperload frontplain --bbox 9,14,585,834 

но  на практике s300 работает гораздо круче.
 
в итоге что я хотел всем этим сказать. 
что за печать отвечает gs с параметрами . gs записан  в .ppd файле. что часть переменных gs прописана сразу
*FoomaticRIPCommandLine: "gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDE&&
VICE=ijs -sIjsServer=ijsgimpprint -dIjsUseOutputFD%A -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=- -"

а остальные прописаны ниже по тексту .ppd файла и задаем мы их через менюшки cups. менюшки  проприсаны в этом же .ppd файле через конструкции 
*OpenUI *...
...
*CloseUI: *...
и конечно в каждом openui, closeui есть default значение.
я так понял что gs перерабатывает файл в postscript, при желании такой обработанный файл можно сохранить и посмотреть его можно через проги gv или kghost. обработанный файл передается  драйверу который его печатает . драйверо - бинарный файл. в foomatic-ppdfile драйвер описывается так:  
#foomatic-ppdfile -A | grep S300
Canon S300 Id='Canon S300'  Driver='gimp-print-ijs'
 в самом ppd файле для gs драйвер описывается так:
*FoomaticRIPCommandLine: "gs -q -dPARANOIDSAFER -dNOPAUSE -dBATCH -sDE&&
VICE=ijs -sIjsServer=ijsgimpprint -dIjsUseOutputFD%A -sIjsParams=&quot&&
;%B&quot;%Z -sOutputFile=- -"

фактически для данный драйвер лежит в 
#/usr/bin/ijsgimpprint
принадлежит пакету
gimp-print-*.rpm
есть и другие драйверы, например hpijs
лежит в пакете hpijs*.rpm

для комфортной печати через верхний лоток для принтера canon ip3500 можно использовать драйвер foomatic от canon s300.

для комфортной печати через нижний лоток нужно установить пакеты
# rpm -ihv cnijfilter-common-2.80-1.i386.rpm 
#rpm -ihv cnijfilter-ip3500series-2.80-1.i386.rpm 
далее скомпилировать драйвер foomatic от canon s300
#foomatic-ppdfile -p 'Canon S300' > /usr/share/cups/model/s300.ppd
откорректировать его 
*FoomaticRIPCommandLine: "nice -n 19 gs -q -r600 -g4956x7014 -q -dNOPROMPT -dNOPAUSE -dSAFER -sDEVICE=ppmraw -sOutputFile=- -| nice -n 19 /usr/local/bin/cifip3500 &&
--imageres 600 --papersize a4 --media plain --paperload frontplain"
 
если хотим печать не 600 dpi то меняем -r и --imageres и пересчитываем для A4 количество точек -g. 

-r200 = 200dpi = 200/2.5=80dps(80 точек/см). 
-g1652x2338 = 1652/80x2338/80=21см х 29.7 см.

-dNOPAUSE позволяет печтать более одной копии.

есть еще интересный драйвер cnijfilter-lpd. в котором печать идет не через таинственный cifip3500. а через скрипт и lpd.

--------------------------------------------
пример cupsd.conf в DEBIAN

#
#
#   Sample configuration file for the Common UNIX Printing System (CUPS)
#   scheduler.  See "man cupsd.conf" for a complete description of this
#   file.
#
# Log general information in error_log - change "info" to "debug" for
# troubleshooting...
LogLevel warning
# Administrator user group...
SystemGroup lpadmin
# Only listen for connections from the local machine.
Listen localhost:631
Listen 192.168.0.40:631
Listen /var/run/cups/cups.sock
# Show shared printers on the local network.
Browsing On
BrowseOrder allow,deny
BrowseAllow all
# Default authentication type, when authentication is required...
DefaultAuthType Basic
# Restrict access to the server...
<Location />
  Order allow,deny
Allow From 192.168.0.*
</Location>
# Restrict access to the admin pages...
<Location /admin>
  Order allow,deny
  Allow From 192.168.0.*
</Location>
# Restrict access to configuration files...
<Location /admin/conf>
  AuthType Default
  Require user @SYSTEM
  Order allow,deny
</Location>
# Set the default printer/job policies...
<Policy default>
  # Job-related operations must be done by the owner or an administrator...
  <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job CUPS-Move-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  # All administration operations require an administrator to authenticate...
  <Limit CUPS-Add-Modify-Printer CUPS-Delete-Printer CUPS-Add-Modify-Class CUPS-Delete-Class CUPS-Set-Default>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  # All printer operations require a printer operator to authenticate...
  <Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After CUPS-Accept-Jobs CUPS-Reject-Jobs>
    AuthType Default
    Require user @SYSTEM
    Order deny,allow
  </Limit>
  # Only the owner or an administrator can cancel or authenticate a job...
  <Limit Cancel-Job CUPS-Authenticate-Job>
    Require user @OWNER @SYSTEM
    Order deny,allow
  </Limit>
  <Limit All>
    Order deny,allow
  </Limit>
</Policy>
#
# 
------------------------------------------------------------
how to install canon ip 3500 and canon ip 3600 at debian. 
first of all you can use driver of canon 4600 for canon 3600 , and you can use driver of canon mp520 for canon 3500.
because debian squeeze doesn't have drivers for canon 3500 and 3600. but debian has drivers for canon mp 520 and canon 4600 by default. and you can use 4200 instead of 4600.
the type of driver for 4600 and mp520 is cups+gutenrpint.
also you can try to find appropriate driver by installing additional set of drivers (type foomatic)
# apt-get install foomatic-filters-ppds
(don't forget restart cups service)
but there is no drivers for our printers.
but. there is a problem. if picture that you want to print is smaller than A4. so in this case printer will scroll paper very slow during all A4 length. it doesn't matter how small the real picture is. it's really annoying. 
if you don't like it. you can download original drivers from canon site.
for 3500 : http://software.canon-europe.com/products/0010483.asp
you will two variants for linux. if you have debian (as i have) so choose lower variant. 
for 3600: http://software.canon-europe.com/products/0010648.asp
so download, untar. and 
for 3600
# dpkg -i cnijfilter-common_3.00-1_i386.deb
# dpkg -i cnijfilter-ip3600series_3.00-1_i386.deb
for 3500
# dpkg -i cnijfilter-common_2.80-1_i386.deb
# dpkg -i cnijfilter-ip3500series_2.80-1_i386.deb
unfortunately the printer monitor 
$ printuiip3600
doesn't work. so we can start it. but really it doesn't work. so for instance we can't print in a silent mode. it's bad. because if you print very much the mechanism that scroll paper will wear out (destroy) faster. and at last in speed mode printer will not be able to scroll paper . but it will be able do it in silent mode in the same time. so in linux we can't change mode. it's sucks.
if you want to select the paper tray so this is the correspondence between real tray position and in the http cups control panel
vertical tray on the back of printer - rear tray 
horizontal tray in front of printer - cassetee or continious 
the next moment.
suppose we need (as i need) to print from 3500 and 3600 printers simultaneously. so we have to have two drivers (i mean two original drivers) simultaneously at the computer. the solution.
# dpkg -i cnijfilter-common_3.00-1_i386.deb
# dpkg -i cnijfilter-ip3600series_3.00-1_i386.deb
# dpkg -i cnijfilter-ip3500series_2.80-1_i386.deb
it works perfectly.
so the next stupid problem. when printer prints - we have a huge pressure on processor. if we use "top" we will see that the reason is "gs".
so when we print we have a problem of using another applications. it's very stupid. so i suggest to set very low prioritet for process gs. in that case we can do all we need without any unpleasant "slow downs" and the printing process will take place in a foreground mode. it's obvious :).
by manuyally:
# $ renice 19 -p `ps aux | grep -i /usr/bin/gs | awk '{ print $2 }'`
i don't want to renice process gs by manually and i print very often. so i suggest the next method.
/etc/crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/1 * * * * root /etc/cron.minutes/pechat-renice.sh
#

/etc/cron.minutes/pechat-renice.sh
#!/bin/bash
for i in `ps aux | grep -i /usr/bin/gs | grep -v grep| awk '{ print $2 }'`
do
renice 19 -p $i
done
---------------------------------------------
Сайт управляется системой uCoz