1 (edytowany przez krzemek 2011-01-25 00:53:02)

Temat: Hotplug drukarek usb na p910nd

Witam!

Wczoraj postawiłem OpenWRT zrobione przez pana Czarka i zabrałem się za wstępną konfigurację potrzebnych mi usług.
Poczytałem o tym jak się stawia printserwer, skonfigurowałem go sobie i doszedłem do wniosku, że brakuje mi w obecnej konfiguracji obsługi hotpluga dla drukarek usb. Udało mi się to ustawić tak, że wystarcza do moich potrzeb, ale chciałbym to zrobić bardziej uniwersalnie. Poniżej to co mam do tej pory:

#!/bin/sh

if [ $ACTION = "add" -a $DEVTYPE = "usb_interface" -a ${INTERFACE%/*} = "7/1" ]; then

    uci -q set p910nd.cfg1=p910nd
    uci -q set p910nd.cfg1.device=/dev/lp0
    uci -q set p910nd.cfg1.port=0
    if [ ${INTERFACE##*/} = "1"; then
<------>uci -q set p910nd.cfg1.bidirectional=0
    else
<------>uci -q set p910nd.cfg1.bidirectional=1
    fi
    uci -q set p910nd.cfg1.enabled=1
    uci -q commit p910nd
    /etc/init.d/p910nd restart

fi

if [ $ACTION = "remove" -a $DEVTYPE = "usb_interface" -a ${INTERFACE%/*} = "7/1" ]; then

    /etc/init.d/p910nd stop
    uci -q delete p910nd.cfg1
    uci -q commit p910nd

fi

Powyższe zadziała tylko dla jednej drukarki usb, a chciałbym dać możliwość podłączenia kilku. Niestety nie wiem jak zdobyć z hotpluga informację o tym jako jaki numer urządzenia aktualnie dodawana drukarka jest podłączana. Prosiłbym o jakąś podpowiedź, bo jak na razie to jedyne co mi przychodzi do głowy to ls /sys/${DEVPATH}/usb/lp*. Czy da się to zrobić w bardziej sensowny sposób, bo ten nie zadziała raczej dla remove'a? Nie mam drugiej drukarki, żeby porównać sobie zmienne.

Pozdrawiam
Przemek

2

Odp: Hotplug drukarek usb na p910nd

Pytanie - po co Ci to? Zdefiniuj sekcję od p910nd na stałe, nie ma potrzeby dodawania tego do cały czas.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Hotplug drukarek usb na p910nd

Ponieważ jest to router w domu, to drukarka jest włączana od wielkiego dzwonu. Dwa nie lubię mieć niepotrzebnych portów otwartych. Po trzecie zawsze trochę ramu zyskam (mam TL-WR1043ND). Po czwarte Windowsy jak mają jakieś zadania do wydruku cały czas trzymają aktywne połączenie, a jak wyłączę p910nd to nie będą miały do czego się łączyć (pytanie tylko jak często sprawdzają czy port jest już otwarty). No i a koniec chciałbym to zrobić ładnie, żeby można było podłączać drukarki usb z automatu bez dodatkowej konfiguracji (tak dla własnej satysfakcji).

4

Odp: Hotplug drukarek usb na p910nd

Trochę przesadzasz, ale niech Ci będzie. Jak odłączysz cokolwiek od USB to nie wiesz już co to było.

Proponuję zeby na podłączeniu przeparsować np. /proc/bus/usb/devices - będziesz wiedział że to drukarka, jaka itd. Zostawić też np. w /tmp znacznik ze została podłączona. A jeżeli zostanie usunięte urządzenie usb a istniał znacznik - usunąć konfigurację.

Nie masz tez potrzeby commitowania sekcji cały czas - też tego tez będzie działać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez krzemek 2011-01-25 23:54:14)

Odp: Hotplug drukarek usb na p910nd

To wydaje mi się, że udało mi się to zrobić w miarę uniwersalnie. Dla jednej drukarki działa miodzio. Nie mam jak stestować kilku drukarek, ale wydaje mi się, że również powinno się zachowywać ok. Poniżej zamieszczam skrypt, który spłodziłem.

#!/bin/sh

if [ $ACTION = "add" -a $DEVTYPE = "usb_interface" -a ${INTERFACE%/*} = "7/1" ]; then

    printer_num=`basename /sys${DEVPATH}/usb/lp[0-9]|cut -b 3-`
    if [ -n "$printer_num" ]; then
        uci -q set p910nd.lp$printer_num=p910nd
        uci -q set p910nd.lp$printer_num.device=/dev/lp$printer_num
        uci -q set p910nd.lp$printer_num.port=$printer_num
        if [ ${INTERFACE##*/} = "1" ]; then
            uci -q set p910nd.lp$printer_num.bidirectional=0
        else
            uci -q set p910nd.lp$printer_num.bidirectional=1
        fi
        uci -q set p910nd.lp$printer_num.enabled=1
        uci -q commit p910nd
        echo $printer_num > /tmp/hotplug_printer_$DEVICENAME
        /etc/init.d/p910nd restart
    fi
fi

if [ $ACTION = "remove" -a $DEVTYPE = "usb_interface" -a ${INTERFACE%/*} = "7/1" ]; then

    if [ -f /tmp/hotplug_printer_$DEVICENAME ]; then
        /etc/init.d/p910nd stop
        uci -q delete p910nd.lp`cat /tmp/hotplug_printer_$DEVICENAME`
        uci -q commit p910nd
        /etc/init.d/p910nd start
        rm -f /tmp/hotplug_printer_$DEVICENAME
    fi
fi

Aby poprawnie wszystko działało, to należy zmodyfikować jeszcze skrypt /etc/init.d/p910nd, żeby killował z -9 demona, bo inaczej po odłączeniu drukarki usb demon ignoruje zwykłego killa.

6

Odp: Hotplug drukarek usb na p910nd

Mam problem z p910nd i sądzę, że dotyczy on tego samego, tylko chce się upewnić. Jak uruchamiam drukarkę i chcę coś wydrukować z Windowsa, to wydruk dokona się dopiero po rebootcie rutera (taki sam jak autora tematu), wygląda to tak, jakby ruter nie wiedział, że drukarka jest podłączona, jak to rozwiązać?

7

Odp: Hotplug drukarek usb na p910nd

j/w skrypt na hotplug. Po podłączeniu woła się i drukarka jest gotowa do pracy.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8 (edytowany przez BartekB 2011-04-29 12:26:54)

Odp: Hotplug drukarek usb na p910nd

Jakaś rada jak go powołać do funkcjonalności, znaczy gdzie go mam wstawić, aby zaczął działać?

9

Odp: Hotplug drukarek usb na p910nd

Proszę Was o pomoc, znalazłem również ten skrypt http://wiki.openwrt.org/doc/howto/p910n … powered.on , jednak nie mam pliku /etc/hotplug.d/usb/20-printer , czy mam wrzucić całość do 10-usb , który mam w danym folderze?

10

Odp: Hotplug drukarek usb na p910nd

Nie, zrob sobie ten plik po prostu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11

Odp: Hotplug drukarek usb na p910nd

Wszystko działa pięknie, dzięki wielkie za pomoc.