Anzeige:
Ergebnis 1 bis 12 von 12

Thema: USB Stick automatisch erkennen in bashscript

  1. #1
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8

    USB Stick automatisch erkennen in bashscript

    Hallo Ihr da zusammen,
    Ich möchte in einem laufenden Bashscript auf das einstecken eines USB-Sticks warten und aus diesem Script automatisch den Devicenamen (/dev/sdx) des eingesteckten Sticks ermitteln. Hat jemand eine Ahnung, wie so etwas aussehen kann?

    Gruß

  2. #2
    Registrierter Benutzer Avatar von bischi
    Registriert seit
    10.04.2003
    Beiträge
    4.828
    lsusb?

    MfG Bischi

    "There is an art, it says, or rather, a knack to flying. The knack lies in learning how to throw yourself at the ground and miss it" The hitchhiker's guide to the galaxy by Douglas Adams

    --> l2picfaq.pdf <-- www.n.ethz.ch/~dominikb/index.html LaTeX-Tutorial, LaTeX-Links, Java-Links,...

  3. #3
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8
    lsusb sagt mir nur, dass ein USB-Gerät erkannt wurde, doch wie komme Ich auf den Devicenamen?
    Es ist egal ob Ich meinen SD-Card-Reader mit oder ohne SD-Karte einstecke, lsusb zeigt in beiden Fällen folgendes an:
    Bus 001 Device 008: ID 14cd:6700 Super Top Card Reader

    Man könnte dies über /var/log/messages herausbekommen, doch wie extrahiere Ich den Devicenamen aus dem Logfile?

  4. #4
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Dafür verwendet man hal oder UDEV.
    Hal Informiert über Hardware Änderungen und mit udev kannst du extra devices für deinen Stick anlegen.
    Der vorteil bei hal ist das du auf den laufenden X-Server zugreifen kannst. PopUp etc.
    Mit einem Shell Script von udev aus geht das nur mit viel aufwand.
    Der Vorteil von udev ist wenn du fstab Einträge nutzen möchtest kannst du eigene Devices z.B: /dev/meinUSBStick anlegen und diese in der fstab fest eintragen.
    Geändert von undefined (16-03-2010 um 15:28 Uhr)
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  5. #5
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8
    wie kann man das denn mit HAL umsetzten?
    Ich habe es jetzt erst mal so gelöst:

    DEVOLD=`ls /dev/ | grep sd`
    DEVNEW=`ls /dev/ | grep sd`
    while [ "$DEVOLD" == "$DEVNEW" ] ;do
    sleep 1
    printf "."
    DEVNEW=`ls /dev/ | grep sd`
    done
    a=0 ; for i in $DEVOLD ; do let "a += 1" ;done
    devlist=($DEVNEW)
    DEV="/dev/${devlist[$a]}"
    echo
    echo $DEV


    vielleicht geht es auch einfacher?

  6. #6
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8
    denke mal, HAL ist mein Freund.

    Die USB-Devices bekomme Ich so heraus:
    hal-get-property --udi `hal-find-by-property --key storage.bus --string usb` --key block.device

    Doch wie bekomme Ich jetzt heraus, welches USB-Storage Device als letztes eingesteckt wurde.
    Anzeigen kann Ich dies ja mit "lshal -m", aber wie frage Ich das in dem Script ab. Ich stehe da jetzt echt auf dem Schlauch.

  7. #7
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8
    mmm... nicht sehr rege, das Forum, oder ist wohl ein uninteressantes Thema

    aber für die es vielleicht interessiert, hier nochmal eine nicht ganz perfekte aber hinzunehmende Lösung für mein Problem:

    getusbdev () {
    udi=`hal-find-by-property --key storage.bus --string usb 2> /dev/null`
    audi=($udi)
    devcnt=${#audi[@]}
    }

    getusbdev
    if [ $devcnt == 0 ] ; then echo kein usb device gefunden !! ; fi
    while [ $devcnt == 0 ] ; do printf "." ; sleep 1 ; getusbdev ;done

    echo
    # gebe noch etwas Zeit, zur vollstaendigen Erkennung
    sleep 3
    getusbdev
    echo "$devcnt usb-storage--device(s) gefunden:"

    i=0
    while [ "$i" -lt "$devcnt" ]; do
    echo "${audi[$i]}"
    echo `hal-get-property --udi "${audi[$i]}" --key block.device`
    let "i++"
    done

    Vielen Dank für den Tip Hal zu benutzen !

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.09.2006
    Beiträge
    120
    Man kann auch die Kernel-Meldungen verwenden, denn da sieht man auch die SerialNumber:

    ...
    usb 1-1: Product: Flash Voyager
    usb 1-1: Manufacturer: Corsair
    usb 1-1: SerialNumber: A100000000025830
    ...

    Die Erkennung damit funktioniert unabhängig vom Rechner, der Plattform und es ist egal was auf dem Stick gespeichert ist.

  9. #9
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Zitat Zitat von berniebingo Beitrag anzeigen
    mmm... nicht sehr rege, das Forum, oder ist wohl ein uninteressantes Thema

    aber für die es vielleicht interessiert, hier nochmal eine nicht ganz perfekte aber hinzunehmende Lösung für mein Problem:
    .............
    Kann sein das manche auch wichtigere Dinge zu tun haben
    Was du brauchst ist ein Daemon der die Aktivitäten überwacht. Wie z.B. bei kde der Gerätemanager. Im Moment fällt mir als Alternative nur das ein.
    Die Kernel log würde ich aus zwei gründen nicht nehmen!
    1) Die Kernel logs sind auf root Berichtigung ausgelegt.
    2) Nicht jede Distribution hat alle Kernel Messages aktiviert
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  10. #10
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8

    Smile

    @undefined
    gibt es noch Wichtigeres ?

    halevt scheint ne gute Sache zu sein, wenn das Script ständig auf irgenwelche Ereignisse reagieren muss. Vielleicht kann Ich das mal gebrauchen.

    Mein Script wird aber nur einmal (als root) gestartet und schaut nach ob schon ein USB-storage-device im Rechner steckt, oder wartet auf das Einstecken. Dann wird automatisch der devicename wie z.B /dev/sdx ermittelt oder zur Auswahl gestellt.
    Nach Bestätigung des devicename wird der Stick formatiert ,ein ext3 Volume erzeugt, die UUID angepasst und einige Dateien darauf kopiert.
    Warum?
    z.B. um einen USB Schlüssel zu erzeugen
    Geändert von berniebingo (17-03-2010 um 12:06 Uhr)

  11. #11
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Dann musst mit udev Arbeiten.
    Wenn du das ganze nur einmal als root machen willst ist udev deine erste wahl weil das Gerät zum formatieren ja nicht eingehangen werden kann.
    Ermittle die SERIAL deines USB Sticks und erstelle eine udev.rule unter /etc/udev/rules.d mit der du deine UNIQUE Device erstellst und danach an dein Scripts weiter gibst.

    Aber eine Nachricht an den XServer Benutzer senden wird nicht viel werden

    Hier mal ein Beispiel eines meiner EXT4 usb Sticks die man mit HAL so nicht einfach mounten kann.
    Aus diesem Grund stehen die bei mir in der fstab notiert.
    Code:
    # @short USB-Stick Kingston
    BUS=="usb", SUBSYSTEM=="block", SYSFS{idVendor}=="0951", SYSFS{idProduct}=="1601", GROUP="disk", MODE="0660", NAME="Kingston%n"
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  12. #12
    Registrierter Benutzer
    Registriert seit
    14.03.2010
    Beiträge
    8
    Zitat Zitat von undefined Beitrag anzeigen
    Dann musst mit udev Arbeiten.
    Wenn du das ganze nur einmal als root machen willst ist udev deine erste wahl weil das Gerät zum formatieren ja nicht eingehangen werden kann.
    Ermittle die SERIAL deines USB Sticks und erstelle eine udev.rule unter /etc/udev/rules.d mit der du deine UNIQUE Device erstellst und danach an dein Scripts weiter gibst.
    Ich glaube nicht, das Ich udev gebrauchen kann für meinen Zweck, da Ich so ja erst die Serial des Sticks ermitteln und eine Regel erstellen muss, was Ich ja gerade nicht will.
    Ich habe das Script ja schon fertig und es arbeitet für mich optimal, indem Ich mit hal-find-by-property nach usb storage-bus devices polle.
    Sinn der Sache ist es ein Script zu haben, was man mal schnell auf einen anderen Linux Rechner kopieren kann um von dort aus bequem einen unbekannten USB-Stick zu "bearbeiten". Auf diesem Rechner soll keine Veränderung am System gemacht werden, und keine Regeln erstellt werden. Ich brauche nur die Standardtools: fdisk,mkfs.ext3 und tune2fs (und natürlich hal).

    Hier mal ein Beispiel eines meiner EXT4 usb Sticks die man mit HAL so nicht einfach mounten kann.
    Aus diesem Grund stehen die bei mir in der fstab notiert.
    Code:
    # @short USB-Stick Kingston
    BUS=="usb", SUBSYSTEM=="block", SYSFS{idVendor}=="0951", SYSFS{idProduct}=="1601", GROUP="disk", MODE="0660", NAME="Kingston%n"
    Wie meinste denn das?
    Wird der mit
    Code:
    hal-find-by-property --key storage.bus --string usb
    nicht aufgelistet?

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •