CUPS (Русский)

From ArchWiki
Revision as of 06:42, 28 May 2007 by Cheer (talk | contribs) (с Linux на Linux: - title changed)
Jump to navigation Jump to search

Template:I18n links start Template:I18n entry Template:I18n entry Template:I18n links end

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:CUPS (Русский)#)

Введение

Что такое CUPS?

Прямо с сайта CUPS : "Common UNIX Printing System ("CUPS", общая UNIX система печати) - это кроссплатформенное решение для печати для всех UNIX систем. Оно основано на "Internet Printing Protocol" (IPP, интернет-протокол печати) и предоставляет полный спектр возможностей для печати для большинства Postscript и растровых принтеров. CUPS рапространяется под GNU GPL..." Хотя существуют другие пакеты печати, такие как LPRNG, CUPS более популярен и довольно прост в использовании. Это система печати по умолчанию как в ArchLinux, так и во многих других Linux дистрибутивах.

Troubleshooting CUPS & compononents

The best way to get printing working is to set 'LogLevel' in '/etc/cups/cupsd.conf' to:

LogLevel debug2

And then viewing the output from '/var/log/cups/error_log' like this:

tail -n 100 -f /var/log/cups/error_log

The charachters at the left of the output stands for:

D = Debug
E = Error
I = Information
etc...

These files may also prove useful.

/var/log/cups/page_log 'spits out a new entry each time a print is succesful.'
/var/log/cups/access_log 'lists all cupsd http1.1 server activity'

Ofcourse it's important to know how CUPS work if you want to solve your problems, this is somewhat correct:

  1. An application sends a .ps file(PostScript, a scriptlanguage that details how the page will look) to CUPS when you select 'print'(99% of apps do).
  2. CUPS then looks at your printers PPD file(printer description file) and figures out what filters it needs to use to convert the .ps file to a language that the printer understands(like PJL,PCL). Usually it needs ghostscript.
  3. GhostScript takes the input and figures out which filters it should use,then applies them and converts the .ps file to a format understood by the printer.
  4. Then it is sent to the backend. For example, if you have your printer connected to a USB port, it uses the USB backend.

Print a document and watch 'error_log' to get a more detailed and correct image of the printing process.

Установка 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.
  • 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

Обратите внимание, что приведённые команды подразумевают, что вы используете ядра от ArchLinux. Если вы запускаете самособранное ядро, то, возможно, вам потребуется вначале это:

# 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

Принтеры с параллельным портом

Если вы желаете использовать принтер с параллельным портом, настройка в общем-то такая же. Пользователи ядер 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-интерфейс. Откройте ваш браузер и зайдите на:

http://localhost:631

or install "Gnome Cups Manager" GUI frontend (see Appendix: A.1 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

Appendix

CUPS альтернативные интерфейсы

Если вы пользуетесь GNOME, вы можете конфингурировать ваш принтер с помощью gnome-cups-manager. Update: Сейчас этот пакет не доступен, установить его вы можете с помощью pacman, если в файле /etc/pacman.conf у вас раскомментрован репозиторий "community"

pacman -S gnome-cups-manager

Так же этот пакет доступен на AUR. Пользователи KDE могут изменять настройки из "Control Center" (kcontrol). Both should refer the those desktop environments' documentation for more information on how to use the interfaces.

There is also gtklp. It is in the "extra" repository.

pacman -S gtklp

PDF Virtual Printer

A nice little package that I submitted to the incoming folder (ftp://ftp.archlinux.org/incoming) is CUPS-PDF. This package allows one to setup a virtual printer that will generate a PDF from anything sent to it. 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.

Online Resources

Here is a listing of websites that may be of use to you:

Specialized Cases

This section is dedicated to specific problems and their solutions. If you managed to get some unusual printer working, please put the solution here.

Printing does not work/aborts with the HP Deskjet 700 Series Printers.

  • The solution is to install pnm2ppa printer filter for the HP Deskjet 700 series. Without this the print jobs will be aborted by the system. A PKGBUILD for pnm2ppa can be found in AUR.

Getting HP LaserJet 1010 to work

I had to compile ghostscript myself because ESP gs in rep was 7.07 and had not fixed some bugs like ESP 8.15.1 had. I never downloaded 'foomatic' in rep. I think that is an old package.

kris|~/temp$ P -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

I also had to set LogLevel in /etc/cups/cupsd.conf to debug2 before i saw that I missed some "Nimbus" fonts. Then I had to rename & put them where the log told me to. Some fancy google searching had to be applied, example: http://www.google.com/search?q=n019003l+filetype%3Apfb since the fonts turned out to be propriatory(i'm sure windows comes with these default). Nevertheless after downloading them(about 7 fonts) and putting them in the correct folder printing started working.

Before that i were getting all the errors said here: http://linuxprinting.org/show_printer.cgi?recnum=HP-LaserJet_1010 'Unsupport PCL' etc...

I'm sure it could have worked with ESP gs 7.07 too(in rep) if i was smart enough to turn on DebugLevel2 sooner :/ UPDATE: yeah it did... maybe this info is useful for someone else though.. sorry for the inconvienice

Another Source for Printer Drivers

On http://www.turboprint.de/english.html is a really good printer driver for many printers not yet supported by Linux (especially Canon i*). The only problem is that high-quality-prints are either marked with a turboprint-logo or you have to pay for it... It's not Open-Source.

Template:Wikipedia

Troubleshooting

As a result of upgrade

After updating, if you get something like :

 /usr/sbin/cupsd: error while loading shared libraries: libgnutls.so.13: cannot open shared object file: No such file or directory

You need to update gnutls:

 Pacman -Sy gnutls

In addition, in /etc/cups, there will be a file named cupsd.conf.pacnew. Rename it cupsd.conf.