Automount USB-Geraete

fred123

Well-Known Member
Hallo,

hab nach Jahren mal wieder ge"shell"t. Hier ein kleines Script, das aus Aerger darueber entstanden ist, dass ich ueberall bis auf Freebsd USB reinstecken und vergessen kann.

Funktion:
Als User kann man/Frau wahllos mehrere umass-Geraete mounten, ueber ein Icon nutzen und umounten.

Der Installationsaufwand, Aenderungen im System scheint mir minimal.

Schaut es euch vielleicht mal an und sagt gegebenenfalls was dazu. Wenn es zu gebrauchen ist, mach ich es mal fertig und stell es nach HowTo ins Kochbuch ;-)

Gruss Fred.

@kamikaze : Hier findest du auch deine schoene verschachtelte Schleife wieder. Danke noch mal!

Ps.: ich hoffe cut&paste hat richtig geklappt und keinen Muell reingebracht, der das Script abschiesst ;-((
Code:
#!/bin/sh

# Freies Automount USB-Geraete OHNE Eintrag im /etc/fstab OHNE "amd"
# Vers. 0.1 24.02.2006 (Testversion)
# FreeBSD > 6.0 NUR MS-DOS Filesysstem, NUR KDE > 3.5

# Das Script SOLLTE OHNE Aenderungen in /etc/devfs.conf /etc/devd.conf
# und /etc/sysctl.conf laufen.

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Installation:
# In /etc/group Gruppe mount anlegen und berechtigte User eintragen
# (Wie muss ich hier wohl nicht erklaeren.)
# dann mkdir .../local/etc/devd. Da rein  den Schipsel weiter unten als Datei
# umass.conf und dies Script nach /usr/local/share/umass/umassaction
#
# chmod nicht vergessen :-)
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Have fun! und vergesst nicht, das Geraet zu umount'en ;-))
# Gruss dd 24.02.2006

# Infos

# Ps. Ein "rechts-Klick" auf das gemountete USB-Icon bringt ein Menue,
# in dem das USB-Geraet entmountet werden kann.
# Das Icon aendert sich dann von Platte auf Blockdevice,(Testloesung)
# Erst DANN kann  das  Geraet  abgezogen werden.

# TRENNEN OHNE umount kann und hat meist BOESE FOLGEN!!!

# UMOUNT also NICHT vergessen vor dem Abziehen!!

# Ein erneutes 'mount' OHNE trennen und reinstecken ist nicht moeglich,
# weil MS-DOS Device. Desktopabfrage  noch nicht eingebaut! Noetig??

# Auf Card-Reader mit eingesteckter Karte reagiert das Script.
# Ein fest angeschlossener Card-Reader, in den z.B eine CF-Carf eingeschoben
# wird loest das Script NICHT aus. Da uebe ich noch dran :-))
# Schraubt doch hier jemand dran rum??????

# Ps. Der Text die Befehle sind bewusst nicht verdichtet.
# Er soll moeglichst uebersichtlich bleiben.

# Ach so. Wer dies Script nutzt ist selbst an allem Schuld was geschieht ;-))

#==============================================================================

# Scriptname = umassaction
# Scriptplatz = /usr/local/share/umass/umassaction
# Dazu gehoerten die Config-Datei:
# Dateiname = umass.conf
# Dateiplatz = /usr/local/etc/devd/umass.conf
#
# mit folgendem Inhalt. Bitte ausachschneiden 1.# entfernen und einbauen

# ++++++++++++++++++++++++++++++++++++++++++
# # Locale Erweiterung der /etc/devd.conf
# # Gehoert nach: /usr/local/etc/devd/umass.conf
# attach 100 {
#    device-name "umass[0-9]+";
#    action      "/bin/sleep 3; /etc/rc.d/devfs restart; \
#                 /usr/local/share/umass/umassaction \
#                 attach $device-name";
# };
#
# detach 100 {
#    device-name "umass[0-9]+";
#    action      "/usr/local/share/umass/umassaction \
#                 detach $device-name";
# };
#++++++++++++++++++++++++++++++++++++++++++++

##############################################################################

#Variabelen/Konstanten fuer den KDE-Desktopeintrag vorbelegen

        DEST1="[Desktop Entry]"
        DEST2=Dev=/dev/xxxx             # Wird unten gefuellt
        DEST3=Encoding=UTF-8
        DEST4=Icon=hdd_mount            # Icon unten gewechselt werden
        DEST5=MountPoint=/mnt/xxxxxx    # wird spaeter gefuellt
        DEST6=ReadOnly=false
        DEST6=Type=FSDevice
        DEST7=UnmountIcon=blockdevice   # Notbehelf laesst sicher unterscheiden.

# Einige Sicherheitsabfragen. Ist noch sehr rudimentaer.
          # Wird wohl mehr werden

          # Hier die bekannten festen /dev/da Device eintragen.
          # Vielleicht mal config-Script schreiben
          # Scsi-Platten Scanner usw.Beispiel:
          # DEVUNTOUCH="da0 da1s1 da1...... da(n)"
          # Ist noch nicht eingebaut :-))

# VOERSICHT! Wenn fixe Geraete  am Buss haengen sollte Mann/Frau im Moment noch
# wissen was dies Script macht.
# Die Dev - Erkennung dafuer ist noch nicht fertig.

          # Eintrag fuer feste Geaete die nicht angefasst werden duerfen

          DEVUNTOUCH=

          # Kein User an screen:0 z.B beim Booten, kein X, usw. bricht das Script ab.

          if [ $USR = '' ]; then
             exit 1
          fi

          # Der User root kann selbst mounten ;-) Der brauch das nicht,
          # arbeitet nicht mit KDE :-) bzw. kann diesen Teil wohl ausschalten

          if [ $USR = 'root' ]; then
             exit 1
          fi

          # Wenn nur feste Geraete oder kein  USB-Geraete an /dev/da* haengen bricht
          # das Script auch ab. Ist nocht nicht fertig

          if [ $DEV = '' ]; then
             exit 1
          fi

#===========================================================================

    case $1 in
      attach)
        USR=`who -T | grep '? :0' | cut -f 1 -d " "`
        DEV=`ls /dev/ | grep da | cut -f 1 -d " "`
        #Die ganze Liste zur spaeteren Verwendung wegschreiben
        echo -n $DEV > /var/tmp/usbattach

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

# Hier uebergehen der  festen Geraete Platten, Scanner, usw einbauen
#                                    ========
# Ich klappere bewust /dev/da* ab, um alle mountbaren Device zu erwischen.

# Mit fsck_msdosfs pruefen. Ob ich da alle Geraete erwische ????

# Die bei mir liegenden USB Geraete bringen so ein Chaos an Infos/Formaten, das Auswerten nicht so toll scheint.
# Mit dieser Loesung erwische ich bei MIR jedes mountbaren MS-DOS-USB-Slice des angesteckten  Geraets,
# bis auf CF-Karten die in einigen DIGI-Cams formatiert worden sind bzw. vom Hersteller formatierte USB-Sticks.
# Mit frisch Fat formatierten Geraets geht es. Schreibt mal was bei euch geschieht.

# Kennt jemand etwas einfaches, sicherers  besseres?? Bin ja lernfaehig ;-)
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

               for DEVAKTUELL in $DEV

                #Beginn mount Schleife
                        do
                           DEV1=$DEVAKTUELL
                        test -d /mnt/USB"_"$USR"_"$DEV1
                        if [  "$?" =  "0"   ]
                        then
                                #frei fuer Fehlermeldung / Erweiterung
                        else
                           fsck_msdosfs -p /dev/$DEV1
                           if [  "$?" = "0"   ]
                                then
                                # Mountdir anlegen
                                MOUNTDIR="USB_"$USR"_"$DEV1
                                mkdir /mnt/$MOUNTDIR

                                # Rechte fur User-Mount aendern
                                # Hier kann man jetzt ueber Sicherheit streiten :-)
                                # Will ich aber nicht!!
                                chown :mount /dev/$DEV1
                                chmod 0660 /dev/$DEV1
                                chown $USR /mnt/$MOUNTDIR
                                sysctl vfs.usermount=1

                                # Mounten als User OHNE fstab Eintrag
                                su $USR -c "/sbin/mount_msdosfs /dev/$DEV1 /mnt/$MOUNTDIR"

#--------------------------------------------------------------------------

                                # Desktopeintrag auf User Desktop schreiben
                                if [  "$?" = "0"   ]
                                        then
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Hier versuchen Geraete-Namen auszulesen und ins Desktop-Icon eintragen um Fehler zu vermeiden.

# Wahrscheinlich mit camcontrol

# Vielleicht sogar erkennen welches Geraet und Icon danach aussuchen. Z.B. Kamera, Stick, Platte....
# Wie ich aus dem umass-Eintrag SICHER GLOBAL unterscheiden kann welcher Geraetetyp angedockt wird, ist mir noch nicht klar.
# Fuer meine bzw. bekannte Geraete kann ich eine $Var setzen. Fuer fremde Gerate ist mir das noch nicht durchsichtig.

# Gibt es da ein eindeutiges Unterscheidungsmerkmal??

# Vielleicht config Script schreiben und laufen lassen?
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
                                        DEST2=Dev=/dev/$DEV1
                                        DEST5=MountPoint=/mnt/$MOUNTDIR

                                        echo -n $DEST0 > /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST1 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST2 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST3 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST4 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST5 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST6 >> /home/$USR/Desktop/$MOUNTDIR
                                        echo $DEST7 >> /home/$USR/Desktop/$MOUNTDIR

                                  else
                                     #Frei fuer Fehlermeldung/Erweiterungen
                                  fi
                           else
                              # Frei fuer Fehlermeldung/erweiterungen
                           fi
                        fi
                        done
                #Ende der mount Schleife
                ;;

#===========================================================================

      detach)

        USR=`who -T | grep '? :0' | cut -f 1 -d " "`
        DEV=`ls /dev/ | grep da | cut -f 1 -d " "`
        #Die ganze Liste wegschreiben
        echo -n $DEV > /var/tmp/usbdetach

# Ich suche noch nach einer Loesung, die Fehlbedienung d.h. abziehen
# OHNE umount ertraeglich werden laesst.
#
# Hier einbauen !!!!
        # Vergleiche und loesche Verzechnisse fuer das gezogene Geraet
        USBDETACH=`cat /var/tmp/usbdetach`
        USBATTACH=`cat /var/tmp/usbattach`
        USBREMOVE=

        for DETACH in $USBATTACH; do
                keep=1
                for remove in $USBDETACH; do
                        if [ "$DETACH" = "$remove" ]; then
                                keep=0
                        fi
                done
                if [ $keep -eq 1 ]; then
                        if [ "$USBREMOVE" = "" ]; then
                                USBREMOVE="$DETACH"
                        else
                                USBREMOVE="$USBREMOVE $DETACH"
                                rm -r /mnt/"USB_"$USR"_"$DETACH
                                rm /var/tmp/"USB_"$USR"_"$DETACH
                                rm /usr/home/$USR/Desktop/"USB_"$USR"_"$DETACH


                        fi
                fi
        done

# Hier loeschen USB und Hilfsdateien in /mnt/ & /var/tmp/ einbauen wenn letztes
# USB-Geraet gezogen wird. Sauber aufraemen auch im Fehlerfall ;-)

      ;;

      *)        exit 1
  esac
###############################################################################

# Todoliste wenn Zeit:

# log in /var/log/umass.log  anlegen fuer gemountete Geraete /Fehlermeldungen

# Bei Formatfehlern fsck Bildschirmmeldung bringen

# Bildschirm-Fehlermeldung wenn ohne umount abgezogen.

# Card-reader Abfrage einbauen wenn Karte gesteckt wird

# Daemon bauen und Ein/Ausschalten ueber Eintrag yes/no in /etc/rc.conf
# und start/stop script in .../local/etc/rc.d
 
Zuletzt bearbeitet:
[LoN]Kamikaze schrieb:
Das kommt davon wenn man nicht im Wiki nachschlägt.

Oder mehr davon, das Mann das nur Deutsch richtig kann, ein fuerchtelichen Denglisch spricht noch schlechter schreibt und damit die Abfrage im Wicki nur sehr schwer hinkriegt :-))

Gruss Fred
 
Danke für das Script.

Ist zwar nix für mich (es nervt mich eher, wenn mein Rechner jeden USB Stick und MP3 player ums verrecken Mounten will obwohl ich doch bloß Saft brauche) aber irgendjemand wirds schon brauchen können.
 
[LoN]Kamikaze schrieb:
Man könnte zwar Wörter wie device übersetzen, sinnvoller klingt ein Artikel dadurch aber nicht.

http://wiki.bsdforen.de/index.php/FreeBSD_-_Automount

Missverstaendniss. Ich hatte deine Schleife gemeint Da habe ich nicht brauchbares gefunden ;-))

Die URL oben kenn ich schon lang. Gut für feste Geraete wie CD-Rom, Floppy, nix fuer die Wundertuete USB-Geraete. Da wird die /etc/fstab zum Buch ;-))

Auch die hier war eine Hilfe: http://wiki.bsdforen.de/index.php/FreeBSD_-_USB-Stick
und mit der http://www.caia.swin.edu.au/reports/041130A/ zusammen bin ich ja erst auf die Idee gekommen es mal selbst zu versuchen.

Die beiden Loesungen koennen alle nur 1 USB-Geraet, oder musst die Ansteckreihenfolge nachhalten oder brauchen einen /etc/fstab oder amd und /fstab Eintrag. Mach das mal bei einer bunten Tüte USB-Geraete die du nicht kennst, die die verschiedensten Partitions-Typen, -einteilungen und Formate haben.

Ich hab hier versucht eine Loesung zu finden mit der ich n-Geraete ohne sie zu kennen bunt durcheiander anstecken und automatisch mounten kann. Bei mir scheint es zu laufen.

Echtes, blindes Automount fuer USB-Geraete auf BSD habe ich nicht gefunden. Kennst du vielleich eine Loesung und ich hab versucht das Rad neu zu erfinden ;-)

Wenns so, ist habe ich wenigstens ein bisschen shell geuebt ;-) Schadet auch nix.

Gruss Fred
 
SierraX schrieb:
Danke für das Script.

Ist zwar nix für mich (es nervt mich eher, wenn mein Rechner jeden USB Stick und MP3 player ums verrecken Mounten will obwohl ich doch bloß Saft brauche) aber irgendjemand wirds schon brauchen können.

Kommt in die ToDo Liste:
if [ $USR = "SierraX" ] then Abfrage "willst du mounten oder brauchst du Strom" ;-)

Gruss Fred
 
Ich kann dir einen Beispieldaemon schicken, den ich geschrieben habe weil wpa_supplicant bei mir nicht funktioniert. Falls du etwas Lesestoff benötigst.
 
SierraX schrieb:
Packs ins Wiki wo es hingehört und zick hier nicht rum.

War ne schlechte Bohne im Kaffee? :-)) Smilys nicht gesehen?

Lieber SierraX ich habe hier hoefflich gefragt, ob wer mit mir ueber die paar Zeilen Script reden will. Du willst nicht. Ok. Aber mecker mich doch dann bitte auch nicht an. Wenn ich dich im Zug bitte mit mir den Koffer hochzuheben, sagst du ja auch hoefflich nein oder hilfst mir??

Ins Wicki gehoert so etwas erst dann, glaube ich (bin aber noch lernfaehig) wenn sicher ist, dass das auch so klappt. Ich mag, als Beispiel, keine blanken Draehte mit 220V auf nem Tisch in der Schule :-((

Ich mag Mist zusammengestuempert haben, wenn du magst, lass uns drueber reden, sag, was an dem Sript Scheisse ist, wenn du nicht magst, sag einfach nichts. So kenn ich zwischenmenschliche Kommunikation face to face. Mich wundert immer wie anders das in Foren ist :-((
(usnet ist zwar auch manchmal recht ruppig, aber da blieb/bleibt der Stil fast immer noch ueber der Tischkante. (Wenigstens frueher ;-)) zu uni.do Zeiten ;-)) )

Freundliche Gruesse Fred (Alias dd)

Ps. Ich glaube nicht das du mir das so ueber denn Schreib-Tisch in der Sprechstunde gesagt haettest. Warum dann hier so harsch? Weiteres sollten wir besser per Mail abmachen, wenn es dir wichtig ist.

PPs.: Mich stoert z.B. das dies http://freedesktop.org/wiki/Software_2fhal nicht in FreeBSD implementiert ist. Kann man/Frau drueber reden. Dann waere dieser "Fred" ;-) nie entstanden
 
Zuletzt bearbeitet:
[LoN]Kamikaze schrieb:
Ich kann dir einen Beispieldaemon schicken, den ich geschrieben habe weil wpa_supplicant bei mir nicht funktioniert. Falls du etwas Lesestoff benötigst.

Mach mal. Siehe PM. Hab im Moment etwas Zeit zu lernen :))

Gruss Fred
 
Zurück
Oben