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 ;-((
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: