Подключение принтера 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...
    --------------------
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 12
    • +1
      как-то я никогда не испытывал особых проблем с подключением сих девайсов под linux.
      да и в инете решений выше крыши
      • +1
        А как поступать если у тебя принтер 1020?

        >как-то я никогда не испытывал особых проблем с подключением сих девайсов под linux.
        >да и в инете решений выше крыши
        А я вот столкнулся с єтой проблемой в Ubuntu. Принтер просто не реагирует на мечать, хотя пишет что все отлично расспечатано.
        • 0
          У меня на работе 1020. Работает через hplip, без проблем.
          • +3
            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
              Спасибо, попробую
          • +2
            реализация 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
              странно как-то получилось, но я обрамил в тег code
              • 0
                Для подсветки синтаксиса языка необходимо использовать тег source lang=язык. В данном случае source lang=bash.
              • 0
                То есть, HP Laserjet 10xx можно поднять на любом линуксячьем роутере или NAS? Прошивка DD-WRT пойдет?
                У меня просто живёт HPLJ 1000, печатаю из OSX через Foo2js, но хотелось бы повесить его или на Asus RT-N13, или на NAS Synology.
                Есть ли общий туториал?
                • 0
                  грубо говоря — да, можно. dd-wrt полагаю подойдет, у меня стоит прошивка «от олега» уже года 3.
                  введите в поисковой системе: sihp1018.dl
                  • 0
                    Откопал кучу интересного, спасибо!
              • 0
                Тоже недавно мучался. В итоге установил через hplip.
                Знал, что можно и foo2zjs расковырять, но, как обычно, нужно было срочно.
                Странно, что убунтОвцы ни как не починят.

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