Ключевые слова:print, driver, win, linux, debian, (найти похожие документы)
From: Виталий Маяцких <vymz@mail.ru.>
Newsgroups: email
Date: Mon, 12 Dec 2004 18:21:07 +0000 (UTC)
Subject: Установка GDI-принтера Lexmark Z23/33 в Debian
Оригинал: http://vymz.narod.ru/lexmark.html
Установка принтера Lexmark Z23/33 в Debian (Sarge)
Со времён житья-бытья под виндой у меня осталась (последняя :)
обрезанная железка, зовущаяся струйным принтером Lexmark Z23e, который
довольно терпимо работал под виндой, но, в силу своей GDI'шной
сущности, имел проблемы с работой в линуксе. На сайте лексмарка
(www.lexmark.com) доступен драйвер lexmarkz33-1.0-3.sh, более-менее
беспроблемно работающийся в старых редхатоидах с системой печати
LPRng. Волею судеб меня занесло на дебиан, у которого и система
пакетов другая, и вообще он другой. Пришлось озадачиться над тем, как
заставить работать этот GDI-принтер в совершенно враждебной для него
среде :)
Для начала установим саму систему печати:
# apt-get install lprng
В принципе, существует скрипт foomatic-lexmark, который позволяет
использовать систему печати CUPS, но в ASP Linux 9.0, где я его
пробовал в работе, не только CUPS работать не стал, но ещё и
возможность печатать через LPRng исчезла :) К тому же, LPRng является
не менее мощной системой, чем CUPS. разве что CUPS в KDE можно мышкой
настраивать ;-) Так что особой мотивации для настройки CUPS в дебиане
у меня нет.
Теперь распакуем содержимое скрипта:
# tail +143 lexmarkz33-1.0-3.sh | gzip -cd | tar xv
Далее среди кучи всей ерунды появится rpm-ка с самым главным, её нужно
сконвертировать с помощью alien:
# alien --to-deb lexmarkz33-1.0-3.i386.rpm
Ставим deb:
# dpkg -i lexmarkz33-1.0-4_i386.deb
Никаких зависимостей в deb не попало, поэтому нужно руками установить
старый libc и прописать принтер в /etc/printcap. В принципе, можно
сконвертировать rpm в tgz, всё равно никаких возможностей deb'а
использовать не будем :) Итак, ставим нужную версию библиотеки:
# apt-get install libstdc++2.10-glibc2.2
Вот содержимое /etc/printcap, которое прописывает установщик:
##PRINTTOOL3## LOCAL
lexmarkz33:\
:sd=/var/spool/lpd/lexmarkz33:\
:mx#0:\
:mc#99:\
:sh:\
:rw:\
:lp=/dev/usb/lp0:\
:if=/usr/local/lexmark/z33/z33.sh:
##PRINTTOOL3## LOCAL
z33-outfiles:\
:sd=/var/spool/lpd/z33-outfiles:\
:mx#0:\
:mc#99:\
:sh:\
:rw:\
:lp=/dev/usb/lp0:
##PRINTTOOL3## LOCAL
lp:\
:sd=/var/spool/lpd/lp:\
:mx#0:\
:mc#99:\
:sh:\
:lp=/dev/usb/lp0:\
:rw:\
:if=/usr/local/lexmark/z33/z33.sh:
С драйвером идут свои библиотеки, ложащиеся в /usr/local/lib, поэтому
нужно прописать туда путь в /etc/ld.so.conf и запустить ldconfig.
Кроме того, для работы скрипта-враппера необходим enscript. Убедитесь,
что у вас этот пакет стоит. Также нужен (не помню, для чего :)
libslang.
В драйвере присутствует демон lexlmd, который чего-то мониторит, его
тоже бы нужно запустить, например, при загрузке системы. Создаём в
/etc/init.d/ скрипт под именем lexlmd с таким содержимым:
#!/bin/sh
PROGRAM=/usr/local/sbin/lexlmd
test -x $PROGRAM || exit 0
case "$1" in
start)
echo -n "Setting lexlmd:"
$PROGRAM > /dev/null
echo " done."
;;
stop)
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/lexlmd {start|stop|restart|force-reload}"
exit 1
esac
exit 0
и создаём сиволическую ссылку в нужный runlevel:
ln -s /etc/init.d/lexlmd /etc/rc2.d/S90lexlmd
Ещё неплохо убедиться, что подгружены нужные модули для работы с
usb-принтерами. В моём случае отключены всякие plug'n'play'ности,
поэтому нужно загрузить модуль usb-хаба (для чипсета SiS735 это
ohci-hcd), который потом сам грузит usbcore и usblp для
свежеобнаруженного принтера.
Если plug'n'play'ности включены, например, discover, то ничего руками
делать, скорее всего, не придётся.
Теперь можно попробовать запустить /usr/local/bin/z23-z33lsc.
Графические прибамбасы лексмарка используют GTK1.2, так что
озаботьтесь наличием в системе libgtk1.2. Для адекватного отображения
надписей пришлось немного настроить GTK. Вот содержимое .gtkrc в моём
домашнем каталоге:
style "gtk-default-ru" {
fontset = "-cronyx-helvetica-medium-r-normal--12-*-*-*-*-*-koi8-r,\
-*-arial-medium-r-normal--12-*-*-*-*-*-koi8-r,*-r-*"
}
class "GtkWidget" style "gtk-default-ru"
Если всё до этого момента прошло хорошо, то вы увидите примерно такое
окно "Центра помощи":
Если драйвер или графические утилиты при печати будут ругаться на
отсутствующую libstdc++-libc6.1.1.so.2, то создайте симлинк с таким
именем на libstdc++-libc6.2-2.so.3 и запустите ldconfig.
Если что-либо ругаться перестало, то теперь можно печатать из
OpenOffice'а, KDE'шных прог и т.д.
В консоли всё тоже работает прекрасно. Печатаем с помощью lpr, чистим
очередь lprm, смотри её состояние lpq:
vitaly@delirium:~$ lpq
Printer: lexmarkz33@localhost
Queue: no printable jobs in queue
Server: no server active
Status: job 'vitaly@localhost+881' saved at 19:48:24.443
Rank Owner/ID Pr/Class Job Files Size Time
done vitaly@localhost+881 A 881 (STDIN) 62900 19:48:03
У драйвера есть некоторые проблемы в принципе. Например, он льёт много
чернил (больше, чем в винде при таком же режиме), неправильно
рассчитывает вертикальные поля (нужно в графической конфигурялке
принтера поставить поставить размер листа по вертикали примерно на
20мм больше, чем есть), и у меня в ASP9.0 не получилось распечатать
больше 4 листов подряд, на 5-м печать с глюками и артефактами на
бумаге обрывается.
P.S.: Касаемо последней проблемы: картридж у меня давно сдох (дорожки
поотваливались, сопла позасохли, в общем, принтер только делает вид,
что печатает), поэтому не могу точно гарантировать, но принтер только
что съел 6 листов и не подавился. Возможно, глюк был в ASP Linux
9.0...
P.S.S.: Недавно купил новый картридж, печатает просто замечательно.
Качество, как оказалось, ещё очень сильно зависит от ghostscript'а и
установленных шрифтов. В этом плане дебиан опять рулит :)
Кстати, картридж купил не "полный" 10N0016, а "половинчатый" 10N0017.
Раньше жадные буржуи просто чернил меньше в них лили, а теперь и
перегородку внутри соорудили... Для того, чтобы индикатор чернил,
расчитанный на 16-й картридж, корректно работал и с новым,
производитель предлагает стянуть новый драйвер с сайта, но нам, на
правильной операционной системе :), да и нет нового драйвера для
z23-z33, достаточно в /usr/local/lexmark/lexgui.conf поставить нужную
цифру в переменной k_10N0016:
[maximum dot counts]
cmy_10N0026=1280000000
k_10N0016=503000000
Сколько там нужно ставить, я не знаю, можно попробовать 250 млн. В
любом случае, нужно заправлять почаще (даже если не печатаете -
чернила сами по себе сохнут) и чистить сопла время от времени.
Заправку я сам беру и всем советую InkTec HP29A (для HP 6xx), пусть
она немного менее чёрная, зато менее вязкая и дисперсная, а значит,
картридж живее будет. Я свой родной, шедший с принтером, угробил
инктековской заправкой именно для 16-го картриджа.
P.S.S.S.: Ещё существует интересный конфиг
/var/spool/lexmark/z23-z33.conf, который вдвое больше конфига с таким
же именем, создающимся в ~/.lexmark. В этом конфиге можно встретить
данные калибровки головок, количество "отстрелянных" точек (в секции
[dotcounts]), а также одну из самых ценных настроек - resolution (в
dpi). Выставив значение 300, я получил такой же расход чернил, как и в
винде при быстрой печати. Т.е. из проблем остался только размер листа
по вертикали, возможно, в скором времени и её получится более прямо
решить. Таким образом, получили почти полностью виндовую
функциональность.