• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Script - Desktop Icon

Joachim F

Newbie
Bonjour,

ich habe ein kleines Shell Script geschrieben, welches ein externers Laufwerk mountet und beim nächsten Aufruf wieder trennt.
Dann ein Icon auf den Desktop mit diesem Script verknüpt.
Soweit läuft Alles rund,
aber ich kann nicht den aktuellen Zustand 'Mount bzw. Umount' erkennen.
Kann man in Abhängigkeit vom Mountzustand das Icon auch verändern?

Falls Ja, bitte ich um Tipps ( anfängerverständlich)

- Suse 10.0, KDE 3.5.3 -

Joachim
 

AKO

Hacker
Wieso gehst du nicht einfahc auf "Arbeitsfläche einrichten" -> "Verhalten" -> "Gerätesymbole"?

Müsstes doch auch tun.


MfG ako
 
OP
J

Joachim F

Newbie
AKO schrieb:
Wieso gehst du nicht einfahc auf "Arbeitsfläche einrichten" -> "Verhalten" -> "Gerätesymbole"?

ganz einfach, weil ich es nicht wusste :D

Danke für den Tipp.

Zu 95% bin ich mit der Lösung zufrieden.
Es gibt nun 2 Icons : eins zum Script Starten - das permanent auf dem Desktop ist - und das zweite,das nur erscheint wenn das Laufwerk gemountet ist.. Im anderen Fall lass ich es nicht anzeigen.
Alles mit einem Icon wäre perfekt.

Joachim
 

abgdf

Guru
Hallo Joachim,

ok, ich versteh Dich also so, daß Dein Skript auf dem Desktop als "mounted/umounted Device" angezeigt werden soll und sich das Icon bei Ausführung des Skripts jeweils verändern soll, nachdem Dein Skript geprüft hat, ob das Gerät mounted/umounted ist und die entsprechende mount-Aktion vorgenommen hat.

Schau doch mal in /home/user/Desktop, mach also "cd ~/Desktop". Dort sind .desktop-Dateien, die das Aussehen der Icons beschreiben. Wenn Du die veränderst, veränderst Du zugleich das Aussehen des KDE-Desktops.

Bau Dir also passende .desktop-Dateien und laß sie von Deinem Skript mit cp nach ~/Desktop kopieren.
Ob das Gerät gemountet ist, kannst Du wie gesagt mit "mount" prüfen. Hier für die Floppy (fd0):

Code:
#!/bin/bash

a=$(mount | grep fd0)

if test -n "$a";
then
echo "Floppy da."
else
echo "Floppy weg."
fi

Bzgl. Näherem zu diesem Skript lies bitte zunächst meine Seite

http://www.angelfire.com/linux/tux25/bash.html

Viele Grüße
 
OP
J

Joachim F

Newbie
abgdf schrieb:
Bau Dir also passende .desktop-Dateien und laß sie von Deinem Skript mit cp nach ~/Desktop kopieren.
Ob das Gerät gemountet ist, kannst Du wie gesagt mit "mount" prüfen. Hier für die Floppy (fd0):

Das hört sich gut an und werde ich ausprobieren -
aber nicht morgen - da stehen Renovierungsarbeiten an.

Joachim
 

abgdf

Guru
Z.B. so :wink: :

Code:
#!/bin/bash

# Zeile oben, damit klar, daß bash-skript (Shebang).

# 3 Variablen, die Du anpassen mußt:
iname=Floppyscript
script=/home/user/script
ifile=/home/user/Desktop/myicon.desktop

# Eine Funktion:
drawicon()
{
# 3 Variablen, die (zusammen) den Text einer .desktop-Datei erhalten:
a="[Desktop Entry]"

b="Comment=
Comment[de]=
Encoding=UTF-8
Exec='$script'
GenericName=
GenericName[de]="

c="MimeType=
Name=$iname
Name[de]=$iname
Path=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username="

# Prüfe, ob .desktop-Datei existiert, und lösche sie gegebenenfalls:
if test -e $ifile; then
rm $ifile
fi

# Füge .desktop-Datei aus a,b, $1 und c neu zusammen:

echo $a > $ifile

for i in $b; do
echo $i >> $ifile
# >> bedeutet "an Datei anfügen":
done

# $1 ist das Argument, das die Funktion erhält, z.B. "Icon=3floppy_mount":
echo $1 >> $ifile

for i in $c; do
echo $i >> $ifile
done
}

# Auf Floppy prüfen:
if test -z "$(mount | grep fd0)"
then
mount /media/floppy

# Floppy jetzt da ?
until test -n "$(mount | grep fd0)"; do
sleep 1
done

# Rufe Funktion auf, um .desktop-Datei (Icon) zu erneuern:
drawicon Icon=3floppy_mount

else
umount /media/floppy

# Floppy jetzt weg ?
until test -z "$(mount | grep fd0)"; do
sleep 1
done

# Rufe Funktion auf, um .desktop-Datei (Icon) zu erneuern:
drawicon Icon=3floppy_unmount
fi

Gruß
 
OP
J

Joachim F

Newbie
abgdf schrieb:
Z.B. so :
Code:
#!/bin/bash
............[/quote]

da ich Linux Neuling bin - noch eine Bitte - kannst Du evtl. das Script kommentieren, dann fällt es mir wesentlich leichter,es zu verstehen.  :idea:

merci
Joachim

puttkammer at wanadoo.fr
 
OP
J

Joachim F

Newbie
So, habe durch Ausprobieren es schon fast auf meine Verhältnisse angepasst, aber eben nur so.

Mein Mount Script (mein_mount.sh):
#!/bin/bash
if [[ $(/bin/mount | /bin/grep DISKSTATION ) ]]
then
/bin/fuser -k /disk/public
/bin/umount /disk/public
else
/bin/mount -t smbfs -o uid=1000,gid=100,rw,password=p //DISKSTATION/public /disk/public
fi
exit 0

Dieses Mount-Script ist auf den Desktop mit einem Icon verknüpft.
Das Icon ruft die folgende Programmzeile auf :
kdesu '/home/pu/bin/mein_mount.sh'

Änderungen an Deinem Script :

ifile=/home/pu/Desktop/mm.desktop
iname=DiskStation
script=/home/pu/bin/mein_mount.sh

und

if test -z "$(mount | grep DISKSTATION)"
then
mount /disk/public
until test -n "$(mount | grep DISKSTATION)"; do
sleep 1
done
drawicon Icon=nfs_mount
else
umount /disk/public
until test -z "$(mount | grep DISKSTATION)"; do
sleep 1
done
drawicon Icon=nfs_unmount
fi

Was nicht funktioniert:

Klicke ich das Icon DiskStation an, passiert Nichts.
Das 'hinterlegte' Programm hat nicht den kdesu Aufruf
Da liegt wohl der Fehler und das bekomme ich nicht :?:

Joachim
 

oc2pus

Ultimate Guru
@JiachimF:
1.) nutze die CODE Tags, sonst kann man das so schwer lesen
2.) nutze die EDIT Taste um deine Postings zu erwewitern und poste nicht so Sachen wie "ja das werde ich dann mal probieren", das interessiert hier keinen und wir gehen davon aus, das du das tun wirst :mrgreen:

wenn du so mounten willst, solltest du das deinem User oder der Gruppe mit visudo einrichten, dann dürfen die das auch ohne root-Password.
Stichwort: sudo

ODER

du musst deine Einträge in der /etc/fstab anpassen.
Stichwort: users in den Optionen

==> nutze die Suchfunktion zu diesem Problem
 

abgdf

Guru
Hallo Joachim,

Deine Anpassungen sehen doch schon recht gut aus.

Du kannst visudo verwenden. Noch besser wäre vielleicht ein Eintrag Deines Laufwerks in die Datei /etc/fstab, der "user" enthält.
Schau Dir mal bitte Deine /etc/fstab an und suche gegebenenfalls nach fstab auf meiner Seite.

Poste doch bitte mal Deine Ausgabe von "mount".

Warum übernimmt bei Dir eigentlich nicht hal das Mounten ?
Hast Du vielleicht diesen Tip

http://www.linux-club.de/viewtopic.php?t=52657

verwendet ?

Viele Grüße
 
OP
J

Joachim F

Newbie
abgdf schrieb:
Poste doch bitte mal Deine Ausgabe von "mount".
nach dem Mounten :
Code:
//DISKSTATION/public on /disk/public type smbfs (0)
vor dem Mounten fehlt diese Zeile

fstab Eintrag :
Code:
//DISKSTATION/public  /disk/public      smbfs    auto,uid=1000,gid=100,rw,username=xy,password=xx 0 0

Habe visudo gewählt und dabei gleich vim kennengelernt :)
folgende Script Zeilen - von m_m.sh - haben sich daraufhin gändert :
Code:
file=/home/pu/Desktop/mm.desktop 
iname=DiskStation 
script=/home/pu/bin/m_m.sh
:?: das hinterlegte Icon Script ruft sich selber auf?

Code:
sudo /bin/mount -t smbfs -o  uid=1000,gid=100,rw,password=p //DISKSTATION/public /disk/public
es wird ohne Nachfrage gemountet, Dank visudo - funktioniert

Code:
sudo /bin/fuser -k /disk/public;/bin/fuser -k /disk/public/*;/bin/fuser -k /disk/public/*/*;/bin/fuser -k /disk/public/*/*/* 
sudo umount /disk/public
Funktioniert auch, bin mir aber bzgl. der "fuser" Zeile sehr unsicher. Hintergrund :
Bevor ich DIGIKAM starte, mounte ich die DISKSTATION und kann dann die Bilder exportieren. Das Unmounten der DISKSTATION geht nur über fuser.

Zum Script selber :
Ein Icon liegt auf dem Desktop, das nach dem Anklicken mountet - unmountet und sich gleichzeitig verändert, so dass der aktuelle Zustand angezeigt wird.
Schönheitsfehler : Nach dem Anklicken rödelt die Eieruhr ca. 1 Min. herum, obwohl Alles bereits ausgeführt wurde. :?:

Warum übernimmt bei Dir eigentlich nicht hal das Mounten ?
Übersteigt meine Linux-Kenntnisse, das vorherige war schwer genug und somit Dank an Dich für das Script plus Kommentar und der Moderator wird hoffentlich auch zufrieden sein :D
 

abgdf

Guru
Hallo Joachim,

geschafft mit vim umzugehen - Respekt !

das hinterlegte Icon Script ruft sich selber auf?

Nein, aber der Name des Skripts muß in die .desktop-Icon-Datei hineingeschrieben werden, weil sich das Icon ja darauf beziehen soll.

Schönheitsfehler : Nach dem Anklicken rödelt die Eieruhr ca. 1 Min. herum, obwohl alles bereits ausgeführt wurde.

Es handelt sich um die KDE-Programmstartanzeige. Diese kannst Du im KDE-Kontrollzentrum "kcontrol" unter Erscheinungsbild/Programmstart-Anzeige nach Deinen Wünschen anpassen.

Ansonsten freut mich, daß das Skript bei Dir läuft.

Viele Grüße
 

abgdf

Guru
Hallo Joachim,

wenn Du den Eintrag in Deiner /etc/fstab von

Code:
//DISKSTATION/public  /disk/public      smbfs    auto,uid=1000,gid=100,rw,username=xy,password=xx 0 0

zu

Code:
//DISKSTATION/public  /disk/public      smbfs    auto,user,uid=1000,gid=100,rw,username=xy,password=xx 0 0

ändertest, solltest Du ohne visudo auskommen.

Ein weiteres Problem ist, daß das Icon nicht "stimmt", wenn ein anderer Prozeß umountet, etwa beim System-Herunterfahren.
Man könnte ein zweites Skript schreiben, das nicht mountet, sondern nur prüft, ob das Laufwerk da ist oder nicht und das Icon entsprechend umstellt. Wäre dem ersten Skript sehr ähnlich, z.B. könnte die Funktion übernommen werden.

Dieses Skript könnte dann durch Eintrag in die Datei /etc/X11/xinit/xinitrc bzw. ~/.xinitrc, wenn diese Datei existiert, beim Start von KDE jeweils einmal ausgeführt werden.

Viele Grüße
 
Oben