Samsung SCX-4200 с использованием открытых драйверов

Материал из Ай да Linux Wiki
Перейти к навигации Перейти к поиску

В этой статье будет рассмотрено использование свободных драйверов и средств для полноценной работы с МФУ Samsung SCX-4200, без использования фирменных бинарных драйверов.

Все нижеописанное тестировалось на x86 и x86_64 системах.

Предупреждение: Я использую нестабильные ветки систем ~x86 и ~amd64, поэтому будьте внимательны с размаскировкой соответствующих пакетов, если вы используете стабильные ветки.

Локальное использование

После подключения МФУ к компьютеру необходимо убедиться, что компьютер его видит:

Code: # lsusb | grep Samsung

Bus 001 Device 007: ID 04e8:341b Samsung Electronics Co., Ltd SCX-4200 series

Если же результат выполнения команды иной, то необходимо убедится в правильной конфигурации ядра. В случае отсутствия поддержки USB-принтеров в ядре, необходимо ее добавить и перекомпилировать ядро.

Linux Kernel Configuration: USB Printer Support
Device Drivers --->
    [*]USB Support ---> 
        <M> USB Printer Support

Установка SpliX и CUPS

Если CUPS уже установлен (например как зависимость KDE или GNOME), необходимо установить набор свободных драйверов для принтеров Samsung - SpliX. Если CUPS не установлен, то он будет установлен как зависимость SpliX. Необходимо убедиться в правильно включенных USE-флагах, по возможности надо включить поддержку всех графических форматов. Необходимая версия SpliX - 2.0.0 и выше, CUPS - 1.4 и выше, поэтому необходимо размаскировать данные пакеты, т.к. они помечены как нестабильные:

# echo ">=net-print/splix-2.0.0" >> /etc/portage/package.keywords 
# echo ">=net-print/cups-1.4.2-r1" >> /etc/portage/package.keywords 
# emerge -av splix

Настройка печати

Открываем любимым редактором файл /etc/cups/cupsd.conf и убеждаемся в том, что доступ на веб-интерфейс разрешен только локальным пользователям:

Code: /etc/cups/cupsd.conf
# Only listen for connections from the local machine.
Listen localhost:631  

Далее запускаем CUPS:

# /etc/init.d/cupsd start

И убеждаемся, что он запустился без ошибок, дальше добавляем сервис в автозапуск:

# rc-update add cupsd default

После этого любимым браузером открываем адрес http://localhost:631

На закладке "Администрирование" нажимаем кнопку "Добавить принтер", где Вас попросят ввести имя пользователя и пароль root.

Выбираем "Принтер SCSI" и в форму "Подключение:" вписываем:

Code:
parallel:/dev/usblp0

Если данное МФУ не единственное в системе (допустим имеется еще usb-принтер), то нумерация устройства может отличаться.

После продолжения нам необходимо дать принтеру название, в поле "Название:", например Samsung_SCX-4200, поля же "Описание:" и "Расположение:" можно не заполнять. Далее выбираем вендора (в нашем случае Samsung) выделяем Samsung SCX-4200, SpliX V.2.0.0 (en) и нажимаем кнопку "Добавить принтер".

В заключении будет предложено настроить основные параметры принтера, такие как разрешение, экономия тонера, тип и размер бумаги. Теперь необходимо перейти на закладку "Принтеры" и из выпадающего списка "Обслуживание" выбрать печать пробной страницы. Если страница распечаталась - считайте принтер настроен. Можно переходить к настройке сканера.

Настройка сканирования

В начале добавляем в файл /etc/make.conf строку:

Code: /etc/make.conf
SANE_BACKENDS="xerox_mfp"

Размаскируем пакет sane-backends до самой последней версии, как мы это делали для CUPS и SpliX. Далее проверяем включенный USE-флаг usb у sane-backends, а заодно и драйвер xerox_mfp, но сам пакет не собираем!

# emerge -pv sane-backends

Дальше необходимо выбрать интерфейс для работы со сканером. Под библиотеку Gtk это может быть пакет media-gfx/xsane, в KDE4 это может быть kde-base/ksaneplugin, а сама работа со сканером может осуществляться из KolourPaint.

После выбора пакета под любимую библиотеку или DE осуществляем его установку, которая в зависимостях установит sane-backends.

Теперь необходимо прописать в файл /etc/sane.d/xerox_mfp.conf ID нашего устройства:

Code: /etc/sane.d/xerox_mfp.conf
#Samsung SCX-4200
usb 0x04E8 0x341B

А в файле /etc/sane.d/dll.conf должна быть раскомментированная строка:

Code: /etc/sane.d/dll.conf
xerox_mfp

Осталось проверить, определился ли наш сканер:

Code: # sane-find-scanner
# sane-find-scanner will now attempt to detect your scanner. If the
  # result is different from what you expected, first make sure your
  # scanner is powered up and properly connected to your computer.

  # No SCSI scanners found. If you expected something different, make sure that
  # you have loaded a kernel SCSI driver for your SCSI adapter.

found USB scanner (vendor=0x04e8 [Samsung], product=0x341b [SCX-4200 Series]) at libusb:001:007 <--- Вот он!
  # Your USB scanner was (probably) detected. It may or may not be supported by
  # SANE. Try scanimage -L and read the backend's manpage.

  # Not checking for parallel port scanners.

  # Most Scanners connected to the parallel port or other proprietary ports
  # can't be detected by this program.
Code: # scanimage -L
device `xerox_mfp:libusb:001:007' is a SAMSUNG ORION multi-function peripheral
Предупреждение: По поводу добавления простого пользователя в группу scanner: мне это не потребовалось - после перезагрузки сканер стал доступен из под простого пользователя. Это следует учитывать, если у Вас что-то не заработает. Следует разобраться с доступом. Проверить сканирование можно и из под root'a запустив xsane.
Предупреждение: Так же была замечена некорректная работа консольной утилиты scanimage при загруженном модуле usblp, без которого не будет работать печать. То есть по команде scanimage -L сканер определяется, но отсканировать чего-либо невозможно - будет возникать ошибка. Не следует уделять внимание данной ошибке, так как на десктопе сканирование обычно осуществляется через GUI-программу. А сканирование по сети не затрагивает данную проблему. Все графические frontend'ы работают корректно совместно с печатью.

На этом настройка локального МФУ закончена. Работают все функции данного МФУ. Печать с настройкой качества, типом бумаги и количеством тонера. И сканирование.

На заметку: Для корректной работы сканера лучше всего использовать интерфейсный кабель который идет в комплекте.
На заметку: Лучше избегать ситуаций с одновременной печатью и сканированием во избежании проблем. Хотя проблем вроде бы не замечено.

Сетевое МФУ с клиентами под Linux и Windows

Очень удобное сетевое МФУ можно сделать на базе машины с Gentoo Linux (справедливо для любых разновидностей Linux). Например для малого офиса или квартиры, где уже имеется маршрутизатор или сервер локальной сети на базе Gentoo.

Для этого нам необходимо немного изменить настройки, которые мы производили для простого локального МФУ.

Сразу стоить заметить, компьютер на который будет устанавливаться МФУ имеет программную конфигурацию схожую с серверной и не имеет графической системы Х.

Настройка принтера со стороны сервера

Проверяем USE-флаги:

Code: # emerge -pv splix
[ebuild   N   ] app-text/ghostscript-gpl-8.70-r1  USE="cups -X -bindist -cairo -djvu -gtk -jpeg2k" LINGUAS="-ja -ko -zh_CN -zh_TW" 0 kB

[ebuild   N   ] net-print/cups-1.4.2-r1  USE="acl jpeg pam perl png python ssl tiff 
                -X -dbus -debug -gnutls -java -kerberos -ldap -php -samba -slp -static -xinetd" 
                LINGUAS="ru -da -de -es -eu -fi -fr -it -ja -ko -nl -no -pl -pt -pt_BR -sv -zh -zh_TW" 0 kB

[ebuild   N   ] net-print/splix-2.0.0  USE="jbig" 0 kB

Важными тут являются ssl и графические форматы, так же может потребоваться включение флага djvu. Так же необходимо произвести размаскировку до последних версий пакетов программ.

Собираем SpliX:

# emerge -av splix

Далее необходимо отредактировать /etc/cups/cupsd.conf , для того чтобы CUPS не "светил" в Интернет, а только был доступен для локальной сети.

Code: /etc/cups/cupsd.conf
#                                                                  
# "$Id: cupsd.conf.in 8805 2009-08-31 16:34:06Z mike $"            
#                                                                  
# Sample configuration file for the CUPS scheduler.  See "man cupsd.conf" for a
# complete description of this file.                                           
#                                                                              

# Log general information in error_log - change "warn" to "debug"
# for troubleshooting...                                         
LogLevel warn                                                    

# Administrator user group...
SystemGroup lpadmin          


# Only listen for connections from the local machine.
Listen 172.16.0.1:631  <--- Задаем адрес сетевого интерфейса который "смотрит" в локальную сеть.                 
Listen /var/run/cups/cups.sock                       

# Show shared printers on the local network.
Browsing On                                 
BrowseOrder allow,deny                      
BrowseAllow all                             
BrowseLocalProtocols CUPS                   

# Default authentication type, when authentication is required...
DefaultAuthType Basic                                            

# Restrict access to the server...
<Location />                      
  Order allow,deny                
  Allow 172.16.0.* <--- Разрешаем доступ всей сети или определенным машинам.
</Location>                       

# Restrict access to the admin pages...
<Location /admin>                      
  Order allow,deny     
  Allow 172.16.0.* <--- Разрешаем доступ к страницам администрирования для всей сети или конкретной машине.                
</Location>

После этого запускаем сервис и добавляем его в автозапуск. Проверяем:

Code: # netstat -tunadp | grep cupsd
tcp        0      0 172.16.0.1:631          0.0.0.0:*               LISTEN      30123/cupsd
udp        0      0 0.0.0.0:631             0.0.0.0:*                           30123/cupsd

CUPS слушает локальный сетевой интерфейс, в моем случае это 172.16.0.1

Далее, как описано выше добавляем принтер, при этом не забыв поставить галочку: Разрешить совместный доступ к этому принтеру. На этом этапе принтер можно считать настроенным.

Настройка сканера со стороны сервера

Настройка сканера и определение его в системе полностью аналогична вышеописанной за исключением некоторых моментов:

Редактируем /etc/sane.d/saned.conf

Code: /etc/sane.d/saned.conf
# saned.conf
# Configuration for the saned daemon

## Daemon options
# Port range for the data connection. Choose a range inside [1024 - 65535].
# Avoid specifying too large a range, for performance reasons.
#
# ONLY use this if your saned server is sitting behind a firewall. If your
# firewall is a Linux machine, we strongly recommend using the
# Netfilter nf_conntrack_sane connection tracking module instead.
#
# data_portrange = 10000 - 10100


## Access list
# A list of host names, IP addresses or IP subnets (CIDR notation) that
# are permitted to use local SANE devices. IPv6 addresses must be enclosed
# in brackets, and should always be specified in their compressed form.
#
# The hostname matching is not case-sensitive.

#scan-client.somedomain.firm
172.16.0.0/29 <--- вписываем сюда сеть, в которой будет доступен сканер.
#192.168.0.1/29
#[2001:7a8:185e::42:12]
#[2001:7a8:185e::42:12]/64

# NOTE: /etc/inetd.conf (or /etc/xinetd.conf) and
# /etc/services must also be properly configured to start
# the saned daemon as documented in saned(8), services(4)
# and inetd.conf(4) (or xinetd.conf(5)).

Создаем пользователя и добавляем его в группу scanner:

# groupadd saned
# useradd saned -g saned -s /bin/false
# gpasswd -a saned scanner

Т.к. демон saned не умеет работать самостоятельно - устанавливаем xinetd:

# emerge -av xinetd

Убеждаемся, что в файле /etc/services есть упоминание о SANE:

Code: cat /etc/services | grep sane
sane-port       6566/tcp                        # SANE Network Scanner Control Port
sane-port       6566/udp

Затем создаем файл /etc/xinetd.d/sane-port, который будет содержать следующее:

Code: /etc/xinetd.d/sane-port
service sane-port
{
 socket_type = stream
 server = /usr/sbin/saned
 protocol = tcp
 user = saned
 group = scanner
 wait = no
 disable = no
}

Редактируем /etc/xinetd.conf:

Code: /etc/xinetd.conf
#                            
# This is the master xinetd configuration file. Settings in the                                            
# default section will be inherited by all service configurations                                          
# unless explicitly overridden in the service configuration. See
# xinetd.conf in the man pages for a more detailed explanation of
# these attributes.

defaults
{
# The next two items are intended to be a quick access place to
# temporarily enable or disable services.
#
#       enabled         =
#       disabled        =

# Define general logging characteristics.
        log_type        = SYSLOG daemon info
        log_on_failure  = HOST
        log_on_success  = PID HOST DURATION EXIT

# Define access restriction defaults
#
#       no_access       =
        only_from       = 172.16.0.0/29 <--- Здесь указываем сеть или хосты для которых будет доступен сканер.
#       max_load        = 0
        cps             = 50 10
        instances       = 50
        per_source      = 10

# Address and networking defaults
#
#       bind            =
#       mdns            = yes
        v6only          = no

# setup environmental attributes
#
#       passenv         =
        groups          = yes
        umask           = 002

# Generally, banners are not used. This sets up their global defaults
#
#       banner          =
#       banner_fail     =
#       banner_success  =
}

includedir /etc/xinetd.d

И наконец запускаем сервис и прописываем его в автозапуск:

# /etc/init.d/xinetd start
# rc-update add xinetd default
Предупреждение: Убедитесь что в логах нет ошибок связанных с работой xinetd

СЕРВЕРНАЯ ЧАСТЬ

Настройка Linux-клиента

Как обычно начинаем с принтера. Для этого все собираем как для первой части статьи (т.е. для локальной машины) и настраиваем CUPS на работу с принтером по протоколу HTTP! Т.е. вместо указания устройства принтера, необходимо указать адрес принтера на нашем сервере печати, а дальше все аналогично. Адрес можно получить зайдя на веб-интерфейс нашего сервера, где установлен CUPS. В моем случае этот адрес выглядит так: http://172.16.0.1:631 Теперь зайдя на закладку "Принтеры" наведите мышь на модель принтера и в браузере выберите "Копировать адрес ссылки" Это и будет ссылка на принтер. У меня она выглядит так: http://172.16.0.1:631/printers/Samsung_SCX-4200

Теперь сканер. Все делаем как в первом случае (выбирая нужный Вам frontend и собирая его, который в зависимостях установит sane-backends), за исключением:

Добавляем в файл /etc/make.conf следующее:

Code: /etc/make.conf
SANE_BACKENDS="net"

Выключаем USE-флаг usb:

Code: /etc/portage/package.use
# echo "media-gfx/sane-backends -usb" >> /etc/portage/package.use 

В файле /etc/sane.d/dll.conf должна быть раскомментированная строка:

Code: /etc/sane.d/dll.conf
net

Далее создаем файл /etc/sane.d/net.conf, в нем указываем адрес нашего сервера, к которому подключен сканер.

Code: /etc/sane.d/net.conf

172.16.0.1

Проверять сканер следует только утилитой scanimage

# scanimage -L

На этом настройку Linux-клиента можно считать законченной!


Настройка Windows-клиента

В данном примере речь пойдет об WindowsXp.

Принтер

Принтер устанавливается через "Панель управления", выбирается HTTP принтер и в качестве адреса принтера указывается тот, который мы рассмотрели для Linux-клиента, потом вставляется родной диск с драйверами принтера и установщик найдет необходимое (или выберите Samsung SCX-4200 Series) и автоматически установит. Не забудьте напечатать пробную страницу! Инсталлятор Самсунга запускать не надо.

Сканер

Для сканера используется программа SaneTwain Рекомендую скачать последнюю бета-версию. Архив с программой распаковывается например на диск C:\, далее файл SaneTwain.ds копируется в %WinDir%\twain_32. После запуска программы указывается только адрес сервера и можно пользоваться.

На заметку: В таких программах как ABBYY FineReader первая попытка обращения к сканеру может быть неудачной, поэтому перед работой в других программах необходимо проинициализировать сканер с помощью самой программы SaneTwain нажав в ней предварительно сканирование. После этого сканер сразу становится доступен "чужим" программам, как подключенный напрямую к этому компьютеру. Связано такое поведение с особенностями работы библиотеки libusb, которая при каждом новом подключении сканера к шине usb - нумерует устройство на единицу больше предыдущего.

Удалось решить данную проблему:

Для этого необходимо отредактировать файл /etc/udev/rules.d/70-libsane.rules

Code: /etc/udev/rules.d/70-libsane.rules
# For Linux >= 2.6.22 without CONFIG_USB_DEVICE_CLASS=y
# If the following rule does not exist on your system yet, uncomment it
ENV{DEVTYPE}=="usb_device", NAME="bus/usb/$env{BUSNUM}/$env{DEVNUM}", MODE="0664", OWNER="root", GROUP="root", RUN+="/lib/udev/my_scanner"

То есть раскомментировать данную строчку правил и добавить к ней , RUN+="/lib/udev/my_scanner" Это ничего не поменяет при подключении МФУ к usb, за исключением того, что выполнит небольшой скрипт, который создаст удобочитаемый постоянный псевдоним для нашего устройства, сколько раз Вы бы не выключали сканер. Для этого создаем файл в /lib/udev/ с именем my_scanner, т.к. это имя у нас и прописано в правило UDEV. Имя может быть любым, но необходимо помнить, что в правилах UDEV должно быть таким же.

Выставляем права на исполнение:

# chmod 755 /lib/udev/my_scanner

Сам скрипт содежит следующее:

Code: /lib/udev/my_scanner
#!/bin/bash

#Указываем наш backend
SANEBACKEND="xerox_mfp"

#Указываем ID нашего МФУ
SAMSUNG="04e8:341b"

#Необходим установленный пакет sys-apps/usbutils

#Определяем значение BUS, т.е. номер шины к которой подключено МФУ
BUS=`lsusb | grep ${SAMSUNG} | awk '{print $2}'`

#Определяем номер устройтва NUM
NUM=`lsusb | grep ${SAMSUNG} | awk '{print $4}' | sed s/://g`

#Определяем полное наименование устройства пригодное для SANE
DEVICE="${SANEBACKEND}:libusb:${BUS}:${NUM}"

#Файл в который будет записываться псевдоним
ALIASFILE="/etc/sane.d/dll.aliases"

#Запись в файл псевдонима в соответствии с нужными нам номерами шины и устройства.
echo "alias Samsung_SCX-4200 $DEVICE" > $ALIASFILE

Теперь все Windows-программы, работающие со сканером поведут себя корректно.