CUPS (Русский)
From ArchWiki
i18n |
---|
English |
Русский |
Рolski |
正體中文 |
Contents |
Введение
Что такое CUPS?
Прямо с сайта CUPS : "Common UNIX Printing System ("CUPS", общая UNIX система печати) - это кроссплатформенное решение для печати для всех UNIX систем. Оно основано на "Internet Printing Protocol" (IPP, интернет-протокол печати) и предоставляет полный спектр возможностей для печати для большинства Postscript и растровых принтеров. CUPS распространяется под GNU GPL..." Хотя существуют другие пакеты печати, такие как LPRNG, CUPS более популярен и довольно прост в использовании. Это система печати по умолчанию как в Arch Linux, так и во многих других Linux дистрибутивах.
Устранение неисправностей в системе CUPS и её компонентах
Наилучший способ борьбы с неисправностями - это выставить 'LogLevel' в файле '/etc/cups/cupsd.conf' в:
LogLevel debug2
А потом смотреть вывод из файл '/var/log/cups/error_log' так:
tail -n 100 -f /var/log/cups/error_log
Символы слева от вывода означают следующее:
D = Debug (отладка) E = Error (ошибка) I = Information (информация)
Эти файлы также могут быть полезны:
/var/log/cups/page_log 'каждый раз при успешной печати, пишет новую запись' /var/log/cups/access_log 'записывает всю активность на cupsd http1.1 сервере'
Конечно, важно знать, как работает CUPS, если вы хотите решить ваши проблемы. Вот краткая информация об этом:
- Приложение посылает .ps файл (PostScript, язык-скрипт, который описывает, как выглядит страница) в систему CUPS, когда вы жмёте 'печать' (99% приложений делают так).
- CUPS смотрит на PPD файл (файл описания принтера) и находит, какие фильтры ему нужно использовать, чтобы преобразовать .ps файл в файл, который понимает ваш принтер (например, PJL,PCL). Обычно ему требуется ghostscript.
- GhostScript принимает ввод и решает, какие фильтры ему использовать, потом применяет их и преобразовывает .ps файл в формат, который понимает принтер.
- Затем файл передается бэкенду. Например, если у вас принтер подключен к usb порту, то используется usb бэкенд
Напечатайте документ и смотрите 'error_log', чтобы получить более детализированную картину процесса печати.
Установка CUPS
Пакеты
Вам наверняка потребуются CUPS и Ghostscript:
# pacman -S cups ghostscript
- cups - собственно пакет CUPS
- ghostscript - интерпретатор для языка Postscript
Некоторые из пакетов с драйверами для принтеров, зависит от используемого вами принтера. Если неуверены, установите gutenprint.
- gutenprint - Набор высококачественных драйверов для Canon, Epson, Lexmark, Sony, Olympus и PCL printers для использования с Ghostscript, CUPS, Foomatic и Gimp.
- foomatic, foomatic-db, foomatic-db-engine, foomatic-db-ppd и foomatic-filters - Foomatic - это система под управлением базы данных для интерграции открытых драйверов для принтера с обычными спулерами под Unix
- Установка foomatic-filters должна разрешить ваши проблемы, если error.log от CUPS сообщает: "stopped with status 22!"
- hplip - драйвер для струйных принтеров HP для Linux. Предоставляет поддержку для моделей DeskJet, OfficeJet, Photosmart, Business Inkjet и некоторых LaserJet.
- splix - драйвер для принтеров Samsung для Linux.
- cups-pdf - Хороший пакет, который позволяет настроить виртуальный PDF принтер, который будет создавать PDF из всего, что будет послано на принтер.
Если ваша система подключена к сетевому принтеру с использованием samba протокола или система является сервером печати для Windows клиентов:
# pacman -S samba
Загрузка PPD для принтера
В зависимости от вашего принтера этот пункт является необязательным и может быть пропущен, так как CUPS в стандартной установке уже содержит несколько PPD (Postscript Printer Description, postscript описание принтера) файлов. Более того, пакеты foomatic-filters, gimp-print и hplip уже включают в себя некоторое количество PPD файлов, которые автоматически определяются CUPS.
Вот объяснение того, что такое PPD файл с сайта Linux Printing: "Для каждого PostScript принтера производитель предоставляет PPD файл, который содержит всю особенную для принтера информацию об этой модели: основные возможности принтера (цветной он или нет, шрифты, уровень PostScript и т. д.) и особенно настройки, которые может изменять пользователь, такие как размер бумаги, разрешение печати и т. д."
- Для того чтобы получить PPD файл для вашего принтера, зайдите на http://www.linuxprinting.org/printer_list.cgi и выберите производителя и модель вашего принтера.
- Теперь вам следует скопировать файл в каталог cups, чтобы он обнаружил этот файл. Если вы находитесь в каталоге, где лежит скаченный вами PPD файл, то вы можете использовать следующую команду:
# cp your_printer.ppd /usr/share/cups/model/
Если вы не можете найти ваш принтер на вебсайте, то, возможно, захотите попробовать похожие модели или общие драйвера для принтера. Немного погуглите или спросите производителя (удачи вам во всём этом...).
Настройка CUPS
Опции
Итак, после того как у вас появился установленный CUPS, вы имеете множество способов его настройки. Вы всегда можете использовать старую добрую командную строку. You can always use the tried and true command line. Также некоторые DE, такие как Gnome и KDE, предоставляют удобные программы, которые могут вам помочь в управлении принтерами. Однако, для того чтобы сделать этот процесс максимально доступным обыкновенному пользователю, мы будем использовать web-интерфейс, предоставляемый CUPS.
Пожалуйста, обратите внимание, что если вы хотите подключиться к сетевому принтеру, а не к подключённому локально, то, возможно, вы захотите вначале просмотреть секцию разделения принтеров. Разделение с Linux на Linux довольно просто и требует небольшой настройки. Разделение с Windows на Linux и наоборот может потребовать каких-то более серьёзных настроек, но так же относительно просто.
Модули ядра
Прежде чем вы сможете использовать веб-интерфейс CUPS, вам необходимо установить требуемые модули ядра. Далее следуют шаги, взятые из руководства по установке принтера в Gentoo.
USB принтеры
Если вы хотите использовать USB принтер с ядром 2.6.x, загрузите модуль usblp:
# modprobe usblp
Если же у вас ядро 2.4.х, то подключите модуль принтер:
# modprobe printer
Обратите внимание, что приведённые команды подразумевают, что вы используете ядра от Arch Linux. Если вы запускаете самособранное ядро, то, возможно, вам потребуется вначале это:
# modprobe usbcore
После того как вы подключили указанные модули, включите ваш принтер и проверьте, обнаружило ли его ядро с помощью следующей команды:
# tail /var/log/messages.log
или
# dmesg
Вы должны увидеть что-нибудь типа:
Feb 19 20:17:11 kernel: printer.c: usblp0: USB Bidirectional printer dev 2 if 0 alt 0 proto 2 vid 0x04E8 pid 0x300E Feb 19 20:17:11 kernel: usb.c: usblp driver claimed interface cfef3920 Feb 19 20:17:11 kernel: printer.c: v0.13: USB Printer Device Class driver
Внимание. В связи с обновлением CUPS до 1.4, более не используется модуль ядра usblp. Принтер определяется как-то (?) через hal. Чтобы использовать usb принтер, необходимо выгрузить модуль usblp
#rmmod usblp
и внести изменения в Ваш /etc/rc.conf чтобы модуль не стартовал при запуске
MODULES=(!usblp)
Принтеры с параллельным портом
Если вы желаете использовать принтер с параллельным портом, настройка в общем-то такая же. Пользователи ядер 2.6.x должны вначале ввести:
# modprobe lp
Далее как для ядер 2.4.x, так и для 2.6.x следует написать:
# modprobe parport # modprobe parport_pc
Теперь вы можете проверить, обнаружен ли принтер:
# tail /var/log/messages.log
Вы должны увидеть что-нибудь типа:
# lp0: using parport0 (polling).
Автозагрузка
Возможно, вы захотите, чтобы система загружала соответствующий модуль при старте системы. Для этого откройте в вашем текстовом редакторе файл /etc/rc.conf
и добавьте нужный модуль в строку MODULES=(). Например, так:
MODULES=(!usbserial scsi_mod sd_mod snd-ymfpci snd-pcm-oss lp parport parport_pc ide-scsi)
Демон CUPS
После установки соответствующих модулей ядра, вы готовы к запуску демона CUPS. Для этого просто запустите:
# /etc/rc.d/cups start
Если вы хотите, чтобы CUPS загружался каждый раз при включении компьютера, добавьте cups в список DAEMONS=() в файле /etc/rc.conf. Если у вас принтер HP, то проверьте, что hplip загружается перед cups.
Web-интерфейс и средства управления
После того как запущен демон, доступен для настройки web-интерфейс. Откройте ваш браузер и зайдите на:
либо установите "Gnome Cups Manager" - графический фронтенд для Gnome (подробнее Alternative CUPS Interfaces)
Теперь всё, что вам нужно сделать - это следовать различным мастерам для добавления вашего принтера. Например, для установки Samsung ML-1250, следует нажать на Manage Printers, а потом на Add Printer. Появился запрос об имени пользователя и пароле. Войдите как root. Далее введите ml1250 в качестве имени принтера, My Room как location и Samsung ML-1250 как description. Потом вам будет предложено выбрать устройство. Поскольку этот принтер является USB устройством, надо выбрать USB Printer #1. Имя принтера должно появиться после надписи USB Printer #1, обратите на это внимание. Далее просто выберите подходящий драйвеп и установка будет завершена.
После завершения установки, проверьте ваши настройки, нажав на кнопку Print Test Page (Печать тестовой страницы).
Разделение принтера
с Linux-клиента на Linux-сервер
После того как вы настроили CUPS на вашем Linux сервере печати, разделить принтера с другой Linux системой довольно легко. Есть несколько возможностей для этого, а здесь будет описана лишь ручная настройка. На сервере (тот, который управляет и подсоединён к принтеру) просто откройте файл /etc/cups/cupsd.conf и разрешите доступ к серверу, изменив строчки с тэгом Location. Например:
<Location /> Order Deny,Allow Deny From All Allow From 127.0.0.1 Allow From 10.0.0.* </Location>
Добавьте IP адреса компьютера клиента в строчке Allow From client_ip_address. После того как вы внесли исправления, перезапустите CUPS, выполнив:
# /etc/rc.d/cups restart
На стороне клиента откройте /etc/cups/client.conf и измените опцию ServerName в соответствии с IP адресом или именем сервера. Например, сервер называется beast и имеет запись в файле hosts. Итак, в вашем файле client.conf, просто отредактируйте строчку так:
ServerName beast
Потом запустите следующую команду для обновления клиента:
# lpq
Вы увидите что-то вроде:
ml1250 is ready no entries
Есть другие возможности для настройки, включая автоматическую, которые подробно описаны на http://localhost:631/sam.html#CLIENT_SETUP (эта ссылка доступна с вашего сервера печати).
когда вас спросят о логине и пароле, войдите как root, потом проследуйте инструкциям с http://www.digitalhermit.com/linux/printing/ если это TCP/IP принтер, использующий Jetdirect.
Вот и всё, что касается Linux на Linux разделения принтера.
Linux to Windows
If you are connected to a Windows print server (or any other Samba capable print server), you can skip the section about kernel modules and such. All you have to do is start the CUPS daemon and complete the web interface as specified in section 3.3 and 3.4. Before this, you need to activate the Samba CUPS backend. You can do this by entering the following command:
# ln -s `which smbspool` /usr/lib/cups/backend/smb
Note that the symbol before is ` (underneath the ~ on a standard US keyboard) and not '. After this, you will have to restart CUPS using the command specified in the previous section. Next, simply login into the CUPS web interface and choose to add a new printer. For device, there should be an option that says something to the effect Windows Printer Via Samba near the button of the device list. For the device location enter:
smb://username:password@hostname/printer_name
Or without a password:
smb://username@hostname/printer_name
Make sure that the user actually has access to the printer on Windows computer. Select the appropriate drivers and that's about it. If the computer is located on a domain, make sure the username includes the domain:
smb://username:password@domain/hostname/printer_name
Note: if your network contains many printers use "lpoptions -d your_desired_default_printer_name" to set your preferred printer
с Windows-клиента на Linux-сервер
Иногда необходимо разрешить Windows компьютеру подключаться к вашему. Есть несколько способов реализации, здесь будет описан способ, использующий Samba. Для того чтобы сделать это, вам следует отредактировать ваш файл /etc/samba/smb.conf для разрешения доступа к принтеру. Ваш smb.conf может выглядеть примерно так:
[global] workgroup = Heroes server string = Arch Linux Print Server security = user [printers] comment = All Printers path = /var/spool/samba browseable = yes # to allow user 'guest account' to print. guest ok = no writable = no printable = yes create mode = 0700 write list = @adm root neocephas
Этого должно быть достаточно для разделения вашего принтера, но, возможно, вы захотите добавить собственный раздел для принтера:
[ML1250] comment = Samsung ML-1250 Laser Printer printer=ml1250 path = /var/spool/samba printing = cups printable = yes printer admin = @admin root neocephas user client driver = yes # to allow user 'guest account' to print. guest ok = no writable = no write list = @adm root neocephas valid users = @adm root neocephas
Обратите внимание, что в приведённых настройках сделано так, что каждый пользователь должен иметь существующую учётную запись для доступа к принтеру. Для того чтобы сделать принтер общим, установите guest ok в yes, у удалите строчку valid users. Для того чтобы добавить учётные записи, вам нужно установить обычную учётную запись в Linux и потом пароль для Samba на сервере. Например:
# useradd neocephas # smbpasswd -a neocephas
После настройки учётных записей для пользователей вам нужно будет настроить каталог спулинга для samba:
# mkdir /var/spool/samba # chmod 777 /var/spool/samba
Следующие файлы, которые предстоит отредактировать - это /etc/cups/mime.convs и /etc/cups/mime.types:
mime.convs:
# Эта строчка находится ближе к концу файла. Раскомментируйте её. application/octet-stream application/vnd.cups-raw 0 -
mime.types:
# Опять где-то ближе к концу файла. application/octet-stream
Изменения в mime.convs и mime.types необходимы для того чтобы CUPS мог печатать документы Microsoft Office. Многим людям это требуется.
После того необходимо перезапустить демон Samba:
# /etc/rc.d/samba restart
Конечно, существует множество настроек и улучшений, которые могут быть сделаны при настройке Samba сервера печати, поэтому вы можете обратиться к документации CUPS и Samba за дальнейшими подробностями. Файл smb.conf.example также содержит несколько хороших примеров, на которые, возможно, вы захотите посмотреть.
Windows 2000- и Windows XP-клиенты на Linux-сервер
Для последних версий Windows существует другой путь подсоединения к вашему Linux серверу печати, используюющий непосредственно протокол CUPS. Клиент Windows должен использовать Windows 2000 или Windows XP. Удостоверьтесь, что вы разрешили клиентам доступ к серверу печати, отредактировав секцию location, как указано в разделе 4.1.
На компьютере с Windows, зайдите в Панель Управления -> Принтеры и выберите "Добавить новый принтер". Потом выберите опцию задавания URL. В поле для url введите нахождение вашего принтера:
http://host_ip_address:631/printers/printer_name
где host_ip_address - это IP адрес вашего Linux сервера, а printer_name - это имя принтера, к которому вы подключаетесь. После этого установите драйвера для принтера на компьютер с Windows. Если вы настроите сервер CUPS так, чтобы он использовал свои собственные драйвера для принтера, то вы можете выбрать общий postscript принтер на Windows клиенте. Вы можете проверить ваши настройки, попробовав напечатать тестовую страницу.
с остальных на Linux, с Linux на остальные
Подробная информация о взаимодействии CUPS с другими серверами печати может быть найдена в мануале по CUPS, например, на http://localhost:631/sam.html#PRINTING_OTHER
Приложение
CUPS альтернативные интерфейсы
Если вы пользуетесь GNOME, вы можете конфингурировать ваш принтер с помощью gnome-cups-manager. Update: Сейчас этот пакет не доступен, установить его вы можете с помощью pacman, если в файле /etc/pacman.conf у вас раскомментрован репозиторий "community"
pacman -S gnome-cups-manager
Так же этот пакет доступен на AUR. Пользователи KDE могут изменять настройки из "Control Center" (kcontrol). Чтобы получить больше информации, рекомендуем обратиться к документации к вашему рабочему окружению (DE).
Также существует gtklp. Находится в репозитории "extra"
pacman -S gtklp
Виртуальный принтер PDF
Существует прекрасный пакет (ftp://ftp.archlinux.org/incoming) CUPS-PDF. Этот пакет позволяет настроить виртуальный принтер, который будет генерировать PDF файлы из отправленного на печать, на него. For example, I wrote this document in AbiWord and then printed it to the Virtual Printer which generated a pdf in my /var/spool/cups-pdf/neocephas folder. Obviously, this package is not necessary, but it can be quite useful. After downloading the package from the ftp server and installing it, you can set it up as you would for any other printer in the web interface. Select Virtual PDF Printer as the device and choose Postscript -> Postscript Color Printer for the drivers.
Внешние ресурсы
Список вебсайтов, которые могут быть вам полезны:
- Official CUPS documentation on your computer http://localhost:631/documentation.html
- Official CUPS Website - http://www.cups.org/
- Linux Printing - http://www.linuxprinting.org/
- Tips and Suggestions on common CUPS problems - http://home.nyc.rr.com/computertaijutsu/cups.html
- Gentoo's Printing Guide - http://www.gentoo.org/doc/en/printing-howto.xml
- Arch Linux User Forums - http://bbs.archlinux.org/
Особые случаи
Дальнейшее описание посвящено специфическим проблемам и их решениям. Если вы сталкивались с какой-либо необычной работой принтера, пожалуйста, поместите решение проблемы здесь.
Печать не работает/прерывается на принтерах HP Deskjet 700
Проблема решается установкой фильтра pnm2ppa для принтеров HP Deskjet 700 series. Без этого задания на печать будут отменяться системой. PKGBUILD для pnm2ppa можно найти здесь: AUR.
Заставить работать HP LaserJet 1010
Мне для этого пришлось самому собрать ghostscript, потому что gs ESP в репозитории был версии 7.07 и имел некоторые ошибки, исправленные в ESP 8.15.1. Я никогда не пользовался пакетом 'foomatic' из репозитория. Я думаю что этот пакет устарел.
$ pacman -Qs cups a2ps psutils foo ghost local/cups 1.1.23-3 The CUPS Printing System local/a2ps 4.13b-3 a2ps is an Any to PostScript filter local/psutils p17-3 A set of postscript utilities. local/foomatic-db 3.0.2-1 Foomatic is a system for using free software printer drivers with common spoolers on Unix local/foomatic-db-engine 3.0.2-1 Foomatic is a system for using free software printer drivers with common spoolers on Unix local/foomatic-db-ppd 3.0.2-1 Foomatic is a system for using free software printer drivers with common spoolers on Unix local/foomatic-filters 3.0.2-1 Foomatic is a system for using free software printer drivers with common spoolers on Unix local/espgs 8.15.1-1 ESP Ghostscript
Также я был вынужден выставить LogLevel в /etc/cups/cupsd.conf в debug2 для того чтобы обнаружить отсутствие некоторых шрифтов "Nimbus". Затем я переименовал их и положил туда, куда мне подсказывал лог. Тут нужно привести хитрый способ поиска в google, наподобие: http://www.google.com/search?q=n019003l+filetype%3Apfb т.к. шрифты являются проприетарными (уверен что в windows это по умолчанию). В любом случае, после скачивания шрифтов (около 7) и помещения их в правильную директорию печать заработала.
До этого я получал ошибки описанные здесь: http://linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_1010 'Unsupport PCL' и т.п...
Уверен что это работало бы и с gs ESP 7.07 (в репозитории) если бы у меня раньше хватило ума включить DebugLevel2 :-/
Обновление: да, это работает... может быть эта информация окажется полезной для кого-либо ещё... извините за неудобства.
Заставить работать HP LaserJet 1020 (1018 и похожие)
После множества попыток связанных с hplib и gutenprint я наконец нашёл решение как заставить мой HP Laserjet 1020 печатать.
Первым делом вам надо уставить cups и ghostscript. Затем пройдите по ссылке http://www.linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_1020 на страницу драйверов печати http://foo2zjs.rkkda.com/ и следуйте интрукциям по установке. Залогиньтесь как root. После скачивания и распаковки архива переместитесь в распакованную директорию foo2zjs. Теперь вы можете делать всё по оригинальной инструкции по установке, лишь с небольшой модификацией для изменения userid пользователя для печати:
$ make $ ./getweb 1020
Откройте Makefile
$ nano Makefile
найдите там строку
# LPuid=-olp
и модифицируйте её таки образом:
# LPuid=-oroot
дальше выполняйте сборку
$ make install $ make install-hotplug $ make cups
Сейчас в этих действиях нет необходимости. Теперь строка LPuid=-oroot стоит по умолчанию.
Вы также можете взять пакет foo2zjs из AUR и модифицировать PKGBUILD: измените строку
./getweb all
на
./getweb 1020
(или, если устанавливаете другой принтер, измените эту строку на что, что вам нужно).
Последним шагом является добавление и конфигурирование принтера в CUPS manager. Принтер должен определиться автоматически. Это отлично работает для root'а и всех ползователей. Когда ОС загружается, принтер инициализируется и сигнализирует о том, что он работает. Так же строку
./getweb 1020
можно изменять на необходимые 1018 (для работы принтера Hewlett-Packard 1018) и т.д.
./getweb 1018
Список поддерживаемы моделей тут: http://foo2zjs.rkkda.com/
Выполнение сервисных операций на принтерах Epson
Escputil
Здесь объясняется как выполнить некоторые вспомогательные операции, такие как очистка и проверка сопел на принтерах Epson. Для этого мы будем использовать утилиту escputil, которая входит в состав пакета gutenprint.
Man-страница этой утилиты ("man escputil") содержит очень полезную информацию, но не включает в себя необходимых сведений о том как идентифицировать ваш принтер. Для этого могут быть использованы два параметра. Первый из них --printer; он принимает имя принтера, которое вы использовали при его конфигурировании. Другой &mdash --raw-device. Эта опция примаетпуть к устройству. Если ваш принтер подключен к последовательному порту, то устройство будет выглядеть примерно как "/dev/lp0". Если же ваш принтер подключен к USB, по устройство будет "/dev/usb/lp0". Если у вас более одного принтера они будут иметь имена файлов устройств "lp1", "lp2" и т.д.
- очистка печатающей головки:
escputil -u --clean-head
- проверка сопел:
escputil -u --nozzle-check
Если вам необходимо произвести операцию, которая требует двухстороннего общения с принтером вы должны использовать спецификацию "--raw-device", а ваш пользователь должен состоять в группе "lp" или быть root'ом.
- получение внутреннего имени принтера:
sudo escputil --raw-device=/dev/usb/lp0 --identify
- получение уровня чернил:
sudo escputil --raw-device=/dev/usb/lp0 --ink-level
Mtink
Это монитор состояния принтера, который позволяет получить количество оставшихся чернил, печатать тестовые страницы, сбрасывать принтер и очищать сопла. Он использует интуитивный графический интерфейс пользователя. Пакет можно скачать отсюда: AUR.
Другие источники драйверов для принтеров
На http://www.turboprint.de/english.html есть действительно хорошие драйверы для многих моделей принтеров, которые до сих пор ещё не поддерживаются в Linux (особенно Canon i*). Единственная проблема в том, что отпечатки высокого качества либо с логотипом turboprint или за них необходимо заплатить... Эти драйверы не Open-Source.
Решение проблем
В результате обновления
После обновления вы можете увидеть ошибку такого вида:
/usr/sbin/cupsd: error while loading shared libraries: libgnutls.so.13: cannot open shared object file: No such file or directory
Это значит, что вам надо обновить gnutls:
Pacman -Sy gnutls
Вдобавок, в /etc/cupsбудет лежать файл с названием cupsd.conf.pacnew. Переименуйте его в cupsd.conf.