Parallel Port #1 (когда принтер подключен непосредственно к компьютеру через LPT)
Linux Fedora Core 4. принтер Canon IP 3500. так получается что #foomatic-ppdfile -A | grep Canon показал что драйвера для конкретно этого принтера нет. Что делать,пробeуем без драйвера как raw принтер - не печатает. можно скачать драйвер с сайта Canon. Но можно и просто подобрать драйвер от другого принтера. стратегия такая смотрим на каких картриджах работает наш принтер идем на сайт Canon и смотрим какие более ранние принтеры работали на этих картриджах и смотрим есть ли этот более ранний принтер в списке foomatic. но в данном случае инета нет, поэтому пробуем драйвер от другого струйного принтера - Canon S300 , драйвер gimp-print-ijs и все отлично работает. правда печатает только с верхнего лотка. нижний лоток не выбрать. а нижний работает только с фирменного драйвера cnijfilter который жрет до ... ресурсов оставляет в памяти сервис который даже на холостом ходу жрет 30% процессора итп дрянь. Продолжение нужно чтобы
быстро начинало печатать,
печатало с нижнего лотка
параллельно можно было работать с gimp, opera без рывков.
Во время печати $ 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="&& ;%B"%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="&& ;%B"%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="&& ;%B"%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="&& ;%B"%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="&& ;%B"%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="&& ;%B"%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 ---------------------------------------------