Подключение к роутеру Host-Based принтера + другой USB периферии.
Являюсь счастливым обладателем роутера WL-500gP, принтера HP LaserJet 1018 и внешнего HDD, которые должны работать в связке.
На форуме существует много топиков, в которых обсуждается автоматическое подключение этих "нехороших" принтеров.
Все они похожи друг на друга и все работают... Но у всех есть побочный эффект, перестают работать все USB устройства, кроме
принтера, что есть не очень удобно. Ниже я в очередной раз приведу инструкцию по загрузке драйверов и установке скрипта,
в котором работает определение всех USB устройств совместно с работой принтера.
Пример будет рассмотрен на базе того что у меня было, т.е. LaserJet 1018. В местах, где есть различия, я буду сообщать.
Ну, приступим:
1. Заходим на роутер через TelNet или SSH.
2. Если еще не создана папка /usr/local/sbin, то создаем командой
Code:
mkdir /usr/local/sbin
3. Переходим в этот каталог
4. Загружаем файлы, необходимые для работы принтера
Code:
wget http://oleg.wl500g.info/hplj/usb_printerid
wget http://oleg.wl500g.info/hplj/sihp1018.dl
! Здесь надо уделить внимание строке wget http://oleg.wl500g.info/hplj/sihp1018.dl.
Если у вас принтер не HP 1018, то ЗДЕСЬ ищем прошивку под свой HP и подставляете свою ссылку.
Если у вас не HP, то придется искать прошивку самим.
5. Создаем файл со скриптом
Code:
echo "#!/bin/sh" > hotplug.sh
echo "" >> hotplug.sh
echo "# set -x" >> hotplug.sh
echo "" >> hotplug.sh
echo "PRN_BIN=/usr/local/sbin/usb_printerid" >> hotplug.sh
echo "PRN_FRM=/usr/local/sbin/sihp1018.dl" >> hotplug.sh
echo "PRN_ID=3f0/4117/100" >> hotplug.sh
echo "if [ \$veros = 2.6 ] ; then" >> hotplug.sh
echo " PRN_DEV=/dev/lp0" >> hotplug.sh
echo "else" >> hotplug.sh
echo " PRN_DEV=/dev/usb/lp0" >> hotplug.sh
echo "fi" >> hotplug.sh
echo "PRN_NAME=\"HP LaserJet 1018\"" >> hotplug.sh
echo "" >> hotplug.sh
echo "logger -t hotplug \"Request for \$ACTION device \$PRODUCT at \$* interface\"" >> hotplug.sh
echo "" >> hotplug.sh
echo "if [ \"\$ACTION\" = \"add\" ] && [ \"\$*\" = \"usb\" ] && [ \"\$DEVFS\" = \"/proc/bus/usb\" ] && [ \"\$PRODUCT\" = \$PRN_ID ]; then" >> hotplug.sh
echo " logger -t hotplug \"Device is \$PRN_NAME Printer\"" >> hotplug.sh
echo " while test ! -e \$PNT_DEV; do" >> hotplug.sh
echo " logger -t hotplug \"Waiting for printer respond\"" >> hotplug.sh
echo " sleep 1" >> hotplug.sh
echo " done" >> hotplug.sh
echo " sleep 2" >> hotplug.sh
echo " logger -t hotplug \"Loading firmware to printer\"" >> hotplug.sh
echo " \$PRN_BIN \$PRN_DEV | grep -q FWVER || cat \$PRN_FRM > \$PRN_DEV" >> hotplug.sh
echo " if [ \"\$?\" -eq 0 ] ; then" >> hotplug.sh
echo " logger -t hotplug \"Loading Successful\"" >> hotplug.sh
echo " else" >> hotplug.sh
echo " logger -t hotplug \"Loading Failed\"" >> hotplug.sh
echo " fi" >> hotplug.sh
echo "fi" >> hotplug.sh
echo "/sbin/hotplug \$*" >> hotplug.sh
! Здесь стоит обратить внимание на строки:
Code:
echo "PRN_FRM=/usr/local/sbin/sihp1018.dl" >> hotplug.sh
echo "PRN_ID=3f0/4117/100" >> hotplug.sh
echo "PRN_NAME=\"HP LaserJet 1018\"" >> hotplug.sh
Привожу описание по строкам:
5.1. Путь к прошивке принтера. Необходимо заменить sihp1018.dl на имя вашей прошивки.
5.2. Device ID вашего принтера.
5.3. Строка, которая будет подставляться в syslog в качестве имени принтера.
6. Делаем автозапуск скрипта.
Если файл еще не существует, то создаем/обновляем файл pre-boot:
Code:
echo "#!/bin/sh" > pre-boot
Для всех
Code:
echo "/bin/echo \"/usr/local/sbin/hotplug.sh\" > /proc/sys/kernel/hotplug" >> pre-boot
7. Делаем файлы исполняемыми
Code:
chmod +x /usr/local/sbin/*
8. Сохраняем изменения
Code:
flashfs save && flashfs commit && flashfs enable && reboot
На этом настройка роутера закончена.
После перезапуска роутер будет готов для работы с принтером и другой периферией.
ЗДЕСЬ представлен универсальный скрипт, поддерживающий все модели LaserJet.
Все что от Вас требуется - это скачать файл прошивки и положить в нужный каталог.
UPD: Слегка доработал скрипт, теперь должна быть полная совместимость между версиями -d и -rtn.
Code:
#!/bin/sh
LJ_1000=3f0/517
LJ_1005=3f0/1317
LJ_1018=3f0/4117
LJ_1020=3f0/2b17
LJ_1022=3f0/2c17
LJ_1022n=3f0/2d17
LJ_1022nw=3f0/3017
LJ_P1005=3f0/3d17
LJ_P1006=3f0/3e17
LJ_P1007=3f0/4817
LJ_P1008=3f0/4917
LJ_P1505=3f0/3f17
LJ_P1505n=3f0/4017
FRM_CAT=/usr/local/sbin/
PRN_BIN=usb_printerid
PRN_DEV=""
case `echo $PRODUCT | awk -F/ '{print $1 "/" $2}'` in
$LJ_1000)
PRN_FRM=sihp1000.dl
PRN_ID=$LJ_1000
PRN_NAME="HP LaserJet 1000"
;;
$LJ_1005)
PRN_FRM=sihp1005.dl
PRN_ID=$LJ_1005
PRN_NAME="HP LaserJet 1005"
;;
$LJ_1018)
PRN_FRM=sihp1018.dl
PRN_ID=$LJ_1018
PRN_NAME="HP LaserJet 1018"
;;
$LJ_1020)
PRN_FRM=sihp1020.dl
PRN_ID=$LJ_1020
PRN_NAME="HP LaserJet 1020"
;;
$LJ_1022)
PRN_FRM=sihp1020.dl
PRN_ID=$LJ_1020
PRN_NAME="HP LaserJet 1022"
;;
$LJ_1022n)
PRN_FRM=sihp1020.dl
PRN_ID=$LJ_1022n
PRN_NAME="HP LaserJet 1022n"
;;
$LJ_1022nw)
PRN_FRM=sihp1020.dl
PRN_ID=$LJ_1022nw
PRN_NAME="HP LaserJet 1022nw"
;;
$LJ_P1005)
PRN_FRM=sihpP1005.dl
PRN_ID=$LJ_P1005
PRN_NAME="HP LaserJet P1005"
;;
$LJ_P1006)
PRN_FRM=sihpP1006.dl
PRN_ID=$LJ_P1006
PRN_NAME="HP LaserJet P1006"
;;
$LJ_P1007)
PRN_FRM=sihpP1007.dl
PRN_ID=$LJ_P1007
PRN_NAME="HP LaserJet P1007"
;;
$LJ_P1008)
PRN_FRM=sihpP1008.dl
PRN_ID=$LJ_P1008
PRN_NAME="HP LaserJet P1008"
;;
$LJ_P1505)
PRN_FRM=sihpP1505.dl
PRN_ID=$LJ_P1505
PRN_NAME="HP LaserJet P1505"
;;
$LJ_P1505n)
PRN_FRM=sihpP1505.dl
PRN_ID=$LJ_P1505n
PRN_NAME="HP LaserJet P1505n"
;;
*)
PRN_FRM=''
PRN_ID=ffff/ffff
PRN_NAME="unknown"
;;
esac
if [ -d /dev/usb ] ;
then PRN_DEV=/dev/usb/lp0
else PRN_DEV=/dev/lp0
fi
logger -t hotplug "Request for $ACTION device $PRODUCT at $* interface"
if [ "$ACTION" = "add" ] && [ "$*" = "usb" ] && [ "$PRN_DEV" != "" ] && [ "$PRN_ID" != "ffff/ffff" ]; then
logger -t hotplug "Device is $PRN_NAME Printer"
while test ! -e $PNT_DEV; do
logger -t hotplug "Waiting for printer respond"
sleep 1
done
logger -t hotplug "Loading firmware to printer"
$FRM_CAT$PRN_BIN $PRN_DEV | grep -q FWVER || cat $FRM_CAT$PRN_FRM > $PRN_DEV
RET_CODE=$?
sleep 1
if [ $RET_CODE -eq 0 ] ;
then logger -t hotplug "Loading Successful"
else logger -t hotplug "Loading Failed"
fi
fi
/sbin/hotplug $*