20 декабря 2011 в 17:26

Подключение принтера HP LJ 1010/1015/1018/1020 в Linux Debian(Ubuntu) c CUPS 1.4 и выше

При обновлении версии CUPS возникла проблемма его несовместимости с загруженным модулем usbpl, необходимый для загрузки firmware в принтер. При их одновременной работе возникает конфликт на шине usb(одновременное обращение), отражающееся в логах системы /var/log/syslog следующим образом:
-----------------------
Jul 1 02:18:57 kernel: [ 3115.009361] usb 1-2.5: usbfs: interface 0 claimed by usblp while 'usb' sets config #1
-----------------------

Вариант решения данной проблемы:
— Загрузить модуль сразу после включения принтера
— Выгрузить модуль сразу после заливки filmware

Для этого делаем следующее:


0) Отключаем принтер
1) Установим необходимые пакеты
 aptitude install cupsys gs-esp foomatic-bin foo2zjs cups-pdf   

2) Скачаем требуемое filmware для принтера сконвертируем и разместим в соответствующих папках:
 wget http://foo2zjs.rkkda.com/firmware/sihp1018.tar.gz
 tar xvzf sihp1018.tar.gz
 arm2hpdl sihp1018.img > sihp1018.dl
 cp sihp1018.dl /usr/share/foo2zjs/firmware
 cp sihp1018.img /usr/share/foo2zjs/firmware
 cp sihp1018.dl /lib/firmware/hp
 cp sihp1018.img /lib/firmware/hp

3) Создадим правило для диспетчера устройств udev для загрузки модуля при включении принтера.
 vi /etc/udev/rules.d/11-hplj10xx.rules

Указываем Vid и Pid своего принтера! Пример приведён для 1018.
#Own udev rule for HP Laserjet 1018
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="4117", RUN+="modprobe usblp"


4) Перезагружаем диспетчер устройств udev
 /etc/init.d/udev restart

5) Редактируем сценарий foo2zjs, выполняющийся при обнаружении принтера (отключаем модуль ядра usbpl сразу после загрузки firmware). Имя файла зависит от модели вашего принтера!(для 1000/1005/1018/1020 — /usr/sbin/hplj1018 )
 vi /usr/sbin/hplj1018

ищем и корректируем процесс загрузки firmware
#
#       Procedure to load a single device with firmware
#
load1() {
    _dev="$1"
    fw="$FWDIR/sihp$FWMODEL.dl"
    if [ ! -f "$fw" ]; then
        log "Missing HP LaserJet $MODEL firmware file $fw"
        log "...read foo2zjs installation instructions and run ./getweb $MODEL"
        return 1
    fi


    log "loading HP LaserJet $MODEL firmware $fw to $_dev ..."
    # There is a timeout problem with udev and FC4, so spin it off.
    (
        if cat $fw > $_dev; then
            log "... download successful."
            sleep 15
            rmmod usblp                     # Отключаем usblp 
            log " ... kernel module usblp disable now... "
        else
            log "... download failed."
        fi
    ) &
    return 0
}
#
#       OK, now download firmware to any printers that need it
#
if [ "$DEV" != "" ]; then
    #
    # force downloading to a specific device
    #
    load1 "$DEV"
elif [ -x $PRINTERID ]; then
    #
    # Sniff around for printers that need a firmware download
    #
    usblps=`find /dev/usb -name 'lp*'`" "`find /dev -name 'usblp*'`
    for dev in $usblps; do
        status=`$PRINTERID $dev 2>/dev/null | grep -y "hp LaserJet $MODEL"`
        if [ "$status" != "" ]; then
            # This is a LaserJet 100x
            chmod 0666 $dev
            status=`$PRINTERID $dev | grep 'FWVER'`
            if [ "$status" = "" ]; then
                # Firmware is not yet loaded
                load1 "$dev"
            else
                log "HP LaserJet $MODEL firmware already loaded into $dev"
                sleep 15
                rmmod usblp                     # Отключаем usblp 
                log " ... kernel module usblp disable now... "
            fi
 fi
    done
else
    log "HP LaserJet $MODEL firmware was not downloaded..."
    log "...couldn't find $PRINTERID and DEV is not set"
fi


изменение сводится к добавлению строк
                sleep 15
                rmmod usblp
                log " ... kernel module usblp disable now... "


6) Включаем принтер и смотрим логи
 tail -f  /var/log/syslog

при корректной работе в них будет следующее:
--------------------
Jul 1 01:56:12 kernel: [ 1749.871946] CE: hpet increased min_delta_ns to 20113 nsec
Jul 1 02:18:39 kernel: [ 3097.400294] usb 1-2.5: new high speed USB device number 8 using ehci_hcd
Jul 1 02:18:40 kernel: [ 3097.512010] usb 1-2.5: New USB device found, idVendor=03f0, idProduct=4117
Jul 1 02:18:40 kernel: [ 3097.512084] usb 1-2.5: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jul 1 02:18:40 kernel: [ 3097.512098] usb 1-2.5: Product: HP LaserJet 1018
Jul 1 02:18:40 kernel: [ 3097.512109] usb 1-2.5: Manufacturer: Hewlett-Packard
Jul 1 02:18:40 kernel: [ 3097.512120] usb 1-2.5: SerialNumber: KP03QAY
Jul 1 02:18:40 mtp-probe: checking bus 1, device 8: "/sys/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.5"
Jul 1 02:18:40 mtp-probe: bus: 1, device: 8 was not an MTP device
Jul 1 02:18:40 udev-configure-printer: add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.5/1-2.5:1.0
Jul 1 02:18:40 udev-configure-printer: parent devpath is /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.5
Jul 1 02:18:40 udev-configure-printer: Device vendor/product is 03F0:4117
Jul 1 02:18:40 udev-configure-printer: MFG:Hewlett-Packard MDL:HP LaserJet 1018 SERN:- serial:KP03QAY
Jul 1 02:18:40 kernel: [ 3097.779667] usblp1: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x03F0 pid 0x4117
Jul 1 02:18:40 kernel: [ 3097.781597] usbcore: registered new interface driver usblp
Jul 1 02:18:40 udev-configure-printer: add /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.5/1-2.5:1.0/usb/lp1
Jul 1 02:18:41 kernel: [ 3098.989429] usb 1-2.5: usbfs: interface 0 claimed by usblp while 'usb' sets config #1
Jul 1 02:18:43 /usr/sbin/hplj1018: foo2zjs: loading HP LaserJet 1018 firmware /lib/firmware/hp/sihp1018.dl to /dev/usb/lp1 ...
Jul 1 02:18:43 /usr/sbin/hplj1018: foo2zjs: ... download successful.
Jul 1 02:18:56 udev-configure-printer: parent devpath is /devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2.5
Jul 1 02:18:56 udev-configure-printer: MFG:Hewlett-Packard MDL:HP LaserJet 1018 SERN:- serial:KP03QAY
Jul 1 02:18:57 kernel: [ 3115.009361] usb 1-2.5: usbfs: interface 0 claimed by usblp while 'usb' sets config #1
Jul 1 02:18:58 kernel: [ 3116.139386] usbcore: deregistering interface driver usblp
Jul 1 02:18:58 kernel: [ 3116.139675] usblp1: removed
Jul 1 02:18:58 /usr/sbin/hplj1018: foo2zjs: ... kernel module usblp disable now...
--------------------
+14
68
K0shi 9,5

комментарии (12)

+1
eskofen, #
как-то я никогда не испытывал особых проблем с подключением сих девайсов под linux.
да и в инете решений выше крыши
+1
WAYS, #
А как поступать если у тебя принтер 1020?

>как-то я никогда не испытывал особых проблем с подключением сих девайсов под linux.
>да и в инете решений выше крыши
А я вот столкнулся с єтой проблемой в Ubuntu. Принтер просто не реагирует на мечать, хотя пишет что все отлично расспечатано.
0
Eddy_Em, #
У меня на работе 1020. Работает через hplip, без проблем.
+3
K0shi, #
1) Выключите принтер и перезагрузите систему
2) Выполните в консоли tail -f /var/log/syslog
3) Подключите принтер
4) Если в сообщениях будет
usbfs: interface 0 claimed by usblp while 'usb' sets config #1
или
ошибка от foo2zjs о загрузке прошивки, то сделайте всё, как написано в статье, заменяя 1018 на 1020
для этого принтера vid 0x03F0 pid 0x2B17
5) Если не получится — покажите логи
0
WAYS, #
Спасибо, попробую
+2
antonwork, #
реализация HP LaserJet 1018 в связке с Asus Wl-500

hotplug.sh
#!/bin/sh
if [ "$ACTION" = "add" ];
then
echo ---- New Device Added to System ---- >> /tmp/hotplug.log
date >> /tmp/hotplug.log
if [ "$1" = "usb" ];
then
echo usb-device detected >> /tmp/hotplug.log
if [ "$PRODUCT" = "3f0/4117/100" ];
then
echo HP Laserjet 1018 detected >> /tmp/hotplug.log
while test ! -e /dev/usb/lp0; do
echo Waiting for /dev/usb/lp0 to come up >> /tmp/hotplug.log
sleep 1
done
sleep 2
echo Uploading firmware assuming /dev/usb/lp0 >> /tmp/hotplug.log
cat /usr/local/lj1018/sihp1018.dl > /dev/usb/lp0
echo Firmware uploaded successfully >> /tmp/hotplug.log
fi
else
echo product not recognized >> /tmp/hotplug.log
fi
else
echo ---- Device Removed from System ---- >> /tmp/hotplug.log
fi


в post-boot
echo "/usr/local/lj1018/hotplug.sh" >> /proc/sys/kernel/hotplug
cat /usr/local/lj1018/sihp1018.dl > /dev/usb/lp0
p910nd -f /dev/usb/lp0


колхозно, но это и не массовое решение, которое предлагает производитель роутеров для миллионов пользователей. В итоге: исходный hotplug подменяется своим, дополнительно при старте роутера прошивка передается в принтер, на тот случай если принтер был включен раньше. Все умещается на внутреннюю флеш память ~150 кб
0
antonwork, #
странно как-то получилось, но я обрамил в тег code
0
K0shi, #
Для подсветки синтаксиса языка необходимо использовать тег source lang=язык. В данном случае source lang=bash.
0
crazyASD, #
То есть, HP Laserjet 10xx можно поднять на любом линуксячьем роутере или NAS? Прошивка DD-WRT пойдет?
У меня просто живёт HPLJ 1000, печатаю из OSX через Foo2js, но хотелось бы повесить его или на Asus RT-N13, или на NAS Synology.
Есть ли общий туториал?
0
antonwork, #
грубо говоря — да, можно. dd-wrt полагаю подойдет, у меня стоит прошивка «от олега» уже года 3.
введите в поисковой системе: sihp1018.dl
0
crazyASD, #
Откопал кучу интересного, спасибо!
0
EvgenT, #
Тоже недавно мучался. В итоге установил через hplip.
Знал, что можно и foo2zjs расковырять, но, как обычно, нужно было срочно.
Странно, что убунтОвцы ни как не починят.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

То, чего еще никто не писал про Нокиа, Элопа и горящую платформу
Цифровое хранение данных: 60 лет прогресса
Демонстрация интерфейса Project Glass и раздача прототипов