Принтер HP LaserJet 1000 и CUPS 1.4 (можно ли загрузить firmware без usblp?)

Всё о принтерах, сканерах и многофункциональных устройствах. Подключение, настройка, проблемы.

Модератор: Модераторы разделов

Аватара пользователя
Danhuu
Сообщения: 152
Статус: Пингвинофил
ОС: ArchLinux, Calculate, Gentoo

Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение Danhuu »

Собственно, проблема в том, что CUPS 1.4 требует отсутствия модуля usblp, а загрузка firmware скриптом из foo2zjs использует именно этот модуль, как написано вот здесь. В этой же ветке описан "костыль" - загружать usblp и выгружать его сразу как загрузится firmware. К сожалению, остальные сотрудники, кое-как смирившись с отсутствием Винды на компе, до таких страшных действий не доросли. До последнего момента спасался даунгрейдом до CUPS 1.3, но сейчас потянулась куча зависимостей. Если кто-нибудь представляет, как оформить загрузку этого firmware доступно для простого смертного, помогите пожалуйста! Вариант грузить usblp, а потом выгружать через rc.local не прошёл, очевидно, по времени не совпадает.
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение BIgAndy »

Danhuu писал(а):
14.01.2010 18:31
Собственно, проблема в том, что CUPS 1.4 требует отсутствия модуля usblp, а загрузка firmware скриптом из foo2zjs использует именно этот модуль, как написано вот здесь. В этой же ветке описан "костыль" - загружать usblp и выгружать его сразу как загрузится firmware. К сожалению, остальные сотрудники, кое-как смирившись с отсутствием Винды на компе, до таких страшных действий не доросли. До последнего момента спасался даунгрейдом до CUPS 1.3, но сейчас потянулась куча зависимостей. Если кто-нибудь представляет, как оформить загрузку этого firmware доступно для простого смертного, помогите пожалуйста! Вариант грузить usblp, а потом выгружать через rc.local не прошёл, очевидно, по времени не совпадает.

Легко . cp <firmware_file_name> > <printerport>
Другое дело, что труднее отследить статус этой заливки, перезаливать, когда это необходимо автоматически, статусы принтера и его порта...
Спасибо сказали:
Аватара пользователя
Danhuu
Сообщения: 152
Статус: Пингвинофил
ОС: ArchLinux, Calculate, Gentoo

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение Danhuu »

BIgAndy писал(а):
14.01.2010 18:37
Легко . cp <firmware_file_name> > <printerport>
Другое дело, что труднее отследить статус этой заливки, перезаливать, когда это необходимо автоматически, статусы принтера и его порта...

А можно поподробнее насчёт "cp <firmware_file_name> > <printerport>":
1) ">" это потому что на порт?
2) Что есть <printerport>? /dev/usb/... ?
Спасибо сказали:
Аватара пользователя
Nikky
Сообщения: 339
ОС: Debian GNU/Linux

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение Nikky »

Посмотрите это.
Арфы нет - возьмите бубен...
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение BIgAndy »

Danhuu писал(а):
15.01.2010 12:44
1) ">" это потому что на порт?

На предмет metacharacter рекомендую почитать man bash. Ну, судя по зарактеру вопроса рекомендую почитать как делать основные операция средствами CLI (проще говоря консоли)
2) Что есть <printerport>? /dev/usb/... ?

вот еще бы знать, ку да вы воткнули свой принтер. Зачем задавать вопрос, ответ на который знать можете только вы?
Спасибо сказали:
Аватара пользователя
Danhuu
Сообщения: 152
Статус: Пингвинофил
ОС: ArchLinux, Calculate, Gentoo

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение Danhuu »

BIgAndy писал(а):
15.01.2010 14:29
Danhuu писал(а):
15.01.2010 12:44
1) ">" это потому что на порт?

На предмет metacharacter рекомендую почитать man bash. Ну, судя по зарактеру вопроса рекомендую почитать как делать основные операция средствами CLI (проще говоря консоли)
2) Что есть <printerport>? /dev/usb/... ?

вот еще бы знать, ку да вы воткнули свой принтер. Зачем задавать вопрос, ответ на который знать можете только вы?

Ну вот, типа наехали :rolleyes:
Уважаемый BIgAndy, я знаю, что ">" означает перенаправление stout, мне непонятно его значение в контексте cp. Возможно, это просто пробел моих знаний.
Вообще, foo2zjs создаёт такое правило udev:

Код: Выделить всё

[alex@ipee200 ~]$ cat /lib/udev/rules.d/11-hplj10xx.rules
ACTION=="add", KERNEL=="lp*", SUBSYSTEM=="usb", ATTRS{idVendor}=="03f0", \
   ATTRS{idProduct}=="0517", RUN+="/sbin/foo2zjs-loadfw 1000 $tempnode"
ACTION=="add", KERNEL=="lp*", SUBSYSTEM=="usb", ATTRS{idVendor}=="03f0", \
   ATTRS{idProduct}=="1317", RUN+="/sbin/foo2zjs-loadfw 1005 $tempnode"
ACTION=="add", KERNEL=="lp*", SUBSYSTEM=="usb", ATTRS{idVendor}=="03f0", \
   ATTRS{idProduct}=="4117", RUN+="/sbin/foo2zjs-loadfw 1018 $tempnode"
ACTION=="add", KERNEL=="lp*", SUBSYSTEM=="usb", ATTRS{idVendor}=="03f0", \
   ATTRS{idProduct}=="2b17", RUN+="/sbin/foo2zjs-loadfw 1020 $tempnode"

Вопрос, откуда берётся $tempnode?
Смотрим, шо за foo2zjs-loadfw:

Код: Выделить всё

[alex@ipee200 ~]$ cat /sbin/foo2zjs-loadfw
#!/bin/sh

#    foo2zjs-loadfw:
#
#    Hotplug script for HP1000/1005/1020 USB laser printers. The model number
#    that this script deals with is determined from the udev env.
#
#    Used to download firmware automatically into the printer when it
#    is powered up or plugged into the USB port.
#
#    The inspiration fo this script is from:
#        Oscar Santacreu. Alicante-Spain (2002)
#        Mike Morgan (2004)
#    Modified by Stefan Schweizer (2005) to work as a udev-RUN-script

#
# Directory to find downloadable HP firmware files sihpMMMM.dl
#
FWDIR=/lib/firmware

#
# Program used to determine USB id information
#
USBID=/bin/usb_printerid

#
# Timeout to load firmware
#
TIMEOUT=6

#
#    Figure out how to log our messages
#
if [ -t 1 ]; then
    # Running from a tty...
    log() {
    echo "$0: $@"
    }
elif [ -x /usr/bin/logger ]; then
    # Have logger...
    log() {
    logger -t "$0" -- "$@"
    }
else
    # No logger...
    log() {
    echo "$0: $@" >> /var/log/messages
    }
fi

#
#    Figure out the model number from the name of this script
#
case "$1" in
1000)
    MODEL=1000
    MODELNAME="hp LaserJet $MODEL"
   ;;
1005)
    MODEL=1005
    MODELNAME="hp LaserJet $MODEL"
   ;;
1018)
    MODEL=1018
    MODELNAME="HP LaserJet $MODEL"
   ;;
1020)
    MODEL=1020
    MODELNAME="HP LaserJet $MODEL"
   ;;
*)
    log "Only HP LaserJet 1000, 1005, 1018 and 1020 are supported"
    log "You need to supply one of these on the cmdline: $0 10**"
    exit
   ;;
esac

if [ -n "$2" ]; then
    DEVNAME=$2
elif [ -n "$DEVNAME" ]; then
    log 'using $DEVNAME'
else
    log "You need to either have $DEVNAME set in the environment or supply it on the cmdline, like:"
    log "$0 10** /dev/usb/lp0"
    exit 1
fi

#
#    Procedure to load a single device with firmware
#
load1() {
    fw="$FWDIR/sihp$MODEL.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 $DEVNAME ..."
    if cat $fw > $DEVNAME; then
    sleep $TIMEOUT
    log "... download successful."
    else
    log "... download failed."
    fi
    return 0
}

#
#    OK, now download firmware to any printers that need it
#
if [ -x $USBID ]; then
    if $USBID $DEVNAME | grep "$MODELNAME" 2> /dev/null; then
        # This is a LaserJet 100x
        if $USBID $DEVNAME | grep 'FWVER' 2> /dev/null; then
        log "HP LaserJet $MODEL firmware already loaded into $DEVNAME"
        else
        # Firmware is not yet loaded
        load1 "$DEVNAME"
        fi
    else
        log "No supported printer found."
    fi
else
    log "HP LaserJet $MODEL firmware was not downloaded..."
    log "...couldn't find $USBID"
fi

Здесь фигня в том, как я понял, что $2=/dev/usb/lp0, (из логов), а без usblp принтер садится на /dev/bus/usb/001/xxx, причём ххх меняется каждый раз при включении принтера (было 003, потом 010, потом 012...). Кстати, в этом скрипте для загрузки используется "cat <firmware> > <printerport>" и тогда ">" вполне логично.
PS: попробовал вручную

Код: Выделить всё

[alex@ipee200 ~]$ cat /lib/firmware/sihp1000.dl > /dev/bus/usb/001/012
cat: ошибка записи: Недопустимый аргумент
[alex@ipee200 ~]$ cp /lib/firmware/sihp1000.dl /dev/bus/usb/001/012
cp: запись «/dev/bus/usb/001/012»: Недопустимый аргумент

И на всякий случай, по Вашей рекомендации:

Код: Выделить всё

[alex@ipee200 ~]$ cp /lib/firmware/sihp1000.dl > /dev/bus/usb/001/012
cp: после «/lib/firmware/sihp1000.dl» пропущен операнд, задающий целевой файл
Попробуйте `cp --help' для получения более подробного описания.

Сработало только modprobe/rmmod usblp :mellow:
А вы говорите "учи матчасть". Если ваших знаний хватает на то, чтобы понять, как с этим бороться (и можно ли вообще), то посоветуйте, пожалуйста! Мне пока пришло в голову только разрешить запуск usblp, а в /sbin/foo2zjs-loadfw добавить rmmod usblp после успешной загрузки прошивки.
Спасибо сказали:
Аватара пользователя
Danhuu
Сообщения: 152
Статус: Пингвинофил
ОС: ArchLinux, Calculate, Gentoo

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение Danhuu »

Вот это вот работает (кусок /sbin/foo2zjs-loadfw):
# Procedure to load a single device with firmware
#
load1() {
fw="$FWDIR/sihp$MODEL.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 $DEVNAME ..."
if cat $fw > $DEVNAME; then
sleep $TIMEOUT
log "... download successful."
/sbin/rmmod usblp
else
log "... download failed."
fi
return 0
}

При старте системы модуль usblp грузится (мне он сам по себе не иешает), опосля загрузки принтерного firmware (напр., когда принтер включил), он выгружается, купс нормально работает, а принтер уже с мозгами. Извращение, конечно, но лучше никто не придумал. Авось со временем автор foo2zjs откроет для себя CUPS 1.4, и родит что-то удобоваримое.
Спасибо сказали:
Аватара пользователя
cheer
Сообщения: 729
Статус: Самовлюблённый сноб
ОС: archlinux i686-current

Re: Принтер HP LaserJet 1000 и CUPS 1.4

Сообщение cheer »

Danhuu:
автор уже открыл для себя cups 1.4, но у него всё работает и он на этом настаивает. так что я не думаю, что что-то изменится в ближайшее время. ещё нашел такую ссылку: http://yxyc.livejournal.com/10380.html
Спасибо сказали: