Ubuntu_Neuling
Anmeldungsdatum: 6. August 2006
Beiträge: 253
Wohnort: Mannheim
|
Hallo liebes Forum, habe vor kurzem Conky für mich entdeckt, alles bis auf eine Kleinigkeit funktioniert:
Ich möchte, das Daten vom USB-Stick angezeigt werden, wenn einer angeschlossen ist. Hier der Code dafür:
${color #0000FF}Disk Free Total % Graph$color${font Bitstream Vera Sans Mono-8}
/ ${fs_free /} ${fs_size /}${fs_used_perc /}% ${color #FFD700}${fs_bar 6 /}$color
/home $color ${fs_free /home} ${fs_size /home} ${fs_used_perc /home}% ${color #FFD700}${fs_bar 6 /home}$color${if_existing /media/USB DISK}
USB 1$color ${fs_free /media/USB DISK} ${fs_size /media/USB DISK} ${fs_used_perc /media/USB DISK}% ${color #FFD700}${fs_bar 6 /media/USB DISK}$color${endif}$font Aber es geht nicht! Sobald ich ${if_existing /media/USB DISK} und ${endif} entferne geht alles.
Was habe ich falsch gemacht? Liebe Grüße,
UN
|
Ubuntu_Neuling
(Themenstarter)
Anmeldungsdatum: 6. August 2006
Beiträge: 253
Wohnort: Mannheim
|
Die Antwort ist einfach, wie auch banal: USB Sticks können auch anders heißen, als "USB DISK" dann werden sich auch von Conky selbstverständlich nicht angezeigt.
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, Ubuntu_Neuling schrieb: ... USB Sticks können auch anders heißen, als "USB DISK" dann werden sich auch von Conky selbstverständlich nicht angezeigt.
gibt es mittlerweile eine Möglichkeit mit Conky USB-Laufwerke anzuzeigen egal wie sie heißen? Eine direkter Pfad zum USB-Laufwerk:
${if_mounted /media/user/FAT32} FAT32 $color${fs_used /media/user/FAT32}/${fs_size /media/user/FAT32} ${fs_bar 6 /media/user/FAT32} $endif
funktioniert ohne Problem. Ein Versuch mit /dev/sdXX wie im Wiki beschrieben:
${if_mounted /dev/sdXX} FAT32 $color${fs_used /dev/sdXX}/${fs_size /dev/sdXX} ${fs_bar 6 /dev/sdXX} $endif
funktioniert nicht. Hat Jemand eine Idee? Grüßle
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, für meine Backup HDD wurde ein fester Pfad eingetragen, mit einem $else wenn die HDD nicht angeschlossen ist. ${color #009bf9}Backup HDD: ${if_mounted /media/user/linux} ${color lightgrey}${fs_used /media/user/linux}/${fs_size /media/user/linux} ${fs_bar 6 /media/user/linux} $else${color lightgrey}nicht verfügbar! $endif Das Problem mit unbekannten USB Datenträgern bleibt weiterhin, im www konnte ich bis jetzt nichts finden. Eine Antwort "Es funktioniert nicht!" würde mir schon reichen, dann kann ich die Suche einstellen. Grüßle
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, das Problem wurde mit etwas Aufwand für meine USB-Speichermedien gelöst, nicht ganz so elegant wie es sein könnte aber es funktioniert ☺. Also gibt es jetzt hier 2 Sorten USB-Speichermedien, 1x ext4 und 1x FAT32. Die Linux Teile haben den Label linux und die FAT32 den Label FAT32. Meine Backup-Laufwerke hatten schon immer den Label linux, also wenigstens die konnten bleiben wie sie sind. Alle USB-Speichermedien wurden neu partitioniert und formatiert, mache waren recht störrisch bei dieser Aktion. Alles wird gut! Conky bekam 6 Einträge für USB Laufwerke, 3 für Linux und 3 für FAT32, sollte bei 4x USB und 1x SD bei meinem Laptop reichen. Wie es aussieht kann man auf dem Bild im Anhang sehen. Grüßle
- Bilder
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, Naubaddi schrieb: das Problem wurde mit etwas Aufwand für meine USB-Speichermedien gelöst, nicht ganz so elegant wie es sein könnte aber es funktioniert ☺.
Es sieht schon etwas besser aus, unbekannte USB-Speichermedien werden erkannt und in Conky angezeigt. Das Ganze funktioniert mit 3 Shell-Skripten, immer noch nicht die sauberste Lösung aber es funktioniert. Für meinen Conky wurden 3x 3 Skripte für 3 USB-Speichermedien erstellt, der einzige Unterschied bei den Skripten ist: "sdb1" für den ersten Stick, "sdc1" für den zweiten Stick und "sdd1" für den dritten Stick. Funktioniert natürlich nur wenn der erste USB-Stick sdb1 ist. Wenn Jemand eine bessere Idee hat, immer her damit! Es werden 3 Skripte für die Anzeige von einem USB-Speichermedium in ~/.conky angelegt damit es in Conky ordentlich angezeigt werden kann: Der Name von dem USB-Speichermedium:
| #!/bin/bash
# Den Namen von "/dev/sdb1" in Conky anzeigen
#
dummy=$(df /dev/sdb1 --output=target)
target=${dummy##*/}
if [ "$target" = "" ]; then #
echo "sdb1: nicht vorhanden "
else
echo $target": "
fi
|
Der Speicherplatz auf dem USB-Speichermedium:
| #!/bin/bash
# Den Speicherplatz von "/dev/sdb1" in Conky anzeigen
#
dummy=$(df /dev/sdb1 --output=used -h)
used=${dummy##* }
dummy=$(df /dev/sdb1 --output=size -h)
size=${dummy##* }
echo $used/$size
|
Einen Balken für den Speicherplatz auf dem USB-Speichermedium:
| #!/bin/bash
# Den benutzten Speicherplatz von "/dev/sdb1" mit "execbar" in Conky anzeigen
#
dummy=$(df /dev/sdb1 --output=pcent)
pcent=${dummy##* }
dummy=${pcent%%%*}
pcent=$dummy
echo $pcent
|
Und zum Schluß die Zeile für Conky:
${color #009bf9}${execi 1 ~/.conky/sdb1.sh}${color #009bf9}${color lightgrey}${execi 1 ~/.conky/sdb1mem.sh} ${execbar 6 ~/.conky/sdb1bar.sh} Grüßle, Naubaddi
|
alterpinguin
Anmeldungsdatum: 24. Mai 2014
Beiträge: 786
|
ist vielleicht zu spät als Info. Es gibt den Befehl "findmnt" und der hat die Option "-D" zur Anzeige der Belegung ähnlich von "df". "findmnt" lässt sich nicht nur auf Devicenamen von disks anwenden, sondern auch auf die ge-mount-eten Verzeichnisse. Also z.B. so was:
:~$ findmnt -D /media/User1/BlueE2
SOURCE FSTYPE SIZE USED AVAIL USE% TARGET
/dev/sdb2 ext4 302,2G 301,4G 834,5M 100% /media/User1/BlueE2 Die Abfrage nach einem nicht vorhandenen mount-point ergibt kein Ergebnis, d.h. die "leere Anzeige". edit: und noch ein Nachtrag, Du kannst dem script-Aufruf in conky auch Argumente übergeben und im script auswerten. D.h. ein Aufruf mit
freespace sdb1: ${execi 3 myscript.sh sdb1 free}
kann im script dann nach sdb1 schauen und den Wert für freien Speicherplatz zurückgeben. Dann hättest Du im Prinzip nur ein script, das das Argument intern auswertet. Und schau Dir doch mal die Auslastung an, die Dein conky mit so vielen script-Aufrufen produziert. Falls Du auf die bar-Anzeige verzichtest, dann könntest Du diese Anzeige von Namen und Gesamtspeicherplatz/Frei sogar von einem einzigen script erledigen lassen (das kann auch die Farbcodes ausgeben und den Zeilenvorschub).
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, alterpinguin schrieb: ist vielleicht zu spät als Info...
es ist nie zu spät, findmnt kannte ich noch nicht und es kommt bestimmt ein/der Tag an dem es gebraucht wird. Grüßle, Naubaddi
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, alterpinguin schrieb: ...edit: und noch ein Nachtrag...
den Nachtrag sehe ich erst jetzt, das ist ja 😎 , bis auf die Farbänderung konnte es umgesetzt werden. Es sind nur noch 3 Skripte nötig in meinem Fall, nicht mehr 9.
Die Skripte werden nur noch aufgerufen wenn ein Speichermedium am USB-Port hängt, habe festgestellt das zumindest ${if_existing /dev/sdb1 funktioniert. Conky verbraucht im Moment ca. 0,75% Prozessorleistung, mit angeschlossenen USB-Speichermedien ca. 1,25% also 0,5% für die Skripte, das ist doch nicht zuviel? Grüßle, Naubaddi
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, Naubaddi schrieb: ...bis auf die Farbänderung konnte es umgesetzt werden. Es sind nur noch 3 Skripte nötig in meinem Fall, nicht mehr 9...
auch das funktioniert jetzt, es sind nur noch 2 Skripte 👍 😎 . Skript 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | #!/bin/bash
#
# Dieses Skript ist für Conky!
#
# 1. Textfarben ändern.
# 2. Den Namen von "/dev/sdX1" anzeigen
# 3. Den Speicherplatz (benutzt/gesammt) von "/dev/sdX1" anzeigen
#
sdX1=$1
dummy=$(df /dev/$sdX1 --output=target)
target=${dummy##*/}
dummy=$(df /dev/$sdX1 --output=used -h)
used=${dummy##* }
dummy=$(df /dev/$sdX1 --output=size -h)
size=${dummy##* }
echo '${color '#009bf9'}'$target": "'${color 'lightgrey'}'$used/$size
|
Skript 2:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | #!/bin/bash
#
# Dieses Skript ist für Conky!
#
# Es zeigt den benutzten Speicherplatz von "/dev/sdX1" mit "execbar" an.
#
sdX1=$1
dummy=$(df /dev/$sdX1 --output=pcent)
pcent=${dummy##* }
dummy=${pcent%%%*}
pcent=$dummy
echo $pcent
|
Die Zeile für Conky:
${if_existing /dev/sdb1}${execpi 1 ~/.conky/sdX1.sh sdb1} ${execbar 6 ~/.conky/bar.sh sdb1}$else${color #009bf9}sdb1:${color lightgrey} nicht vorhanden$endif Grüßle, Naubaddi
|
alterpinguin
Anmeldungsdatum: 24. Mai 2014
Beiträge: 786
|
das geht natürlich auch in einem script. Einmal mit einem zweiten Argument und ob es nur die Prozentzahl ausgeben soll und dann natürlich indem ein script alles ausgibt. Also nicht nur wie Du es bei den ersten Werten mit der Farbcodierung gemacht hast, sondern auch für die "bar-Anzeige". Der Trick wäre ein anderes Programm zur Ausgabe der Prozentzahl zu nutzen, also so was:
#!/bin/sh
#
#echo "got $*"
SIZE=200GB
PCENT="75"
echo -n "\${color1}sdb1\${color} $SIZE \${execbar 6 /bin/echo $PCENT}" und dann kannst Du das einzige script z.B. mit dem findmnt, statt mehreren df Abfragen aufpeppen.
Ein Beispiel mit array Variablen braucht die bash:
#!/bin/bash
# z.B. sdb1
DEVICE="/dev/$1"
# findmnt liefert: /dev/sdb1 ext4 91,2G 55,4G 35,8G 61% /media/Username/MyExt8
STR=$(findmnt -n -D --source $DEVICE)
array=( $STR )
DUMMY=${array[5]}
PCENT=${DUMMY%%%*}
SIZE=${array[2]}
USED=${array[3]}
.... etc. ..
# und die Ausgabe dann
echo -n "\${color1}$DEVICE\${color} $SIZE / $USED \${execbar 6 /bin/echo $PCENT}"
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, alterpinguin schrieb: das geht natürlich auch in einem script... ...Der Trick...
der Trick gefällt mir 👍 😎 , besten dank für Deine Tricks und Hilfen! Es sieht mit einem Skript welches 1x von Conky aufgerufen wird und sdX1: nicht vorhanden oder bis zu 3 USB-Laufwerke anzeigt schon sehr gut aus. Im Moment experimentiere ich mit for... und while... um es etwas kompakter zu bekommen, bis jetzt nicht sehr erfolgreich 😉 . Die Zeile für Conky:
${execpi 1 ~/.conky/usb.sh} Das Skript (fast fertig):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 | #!/bin/bash
#
# Dieses Skript ist für Conky!
#
# 1. Die Textfarben ändern.
# 2. Den Namen von "/dev/sdX1" anzeigen.
# 3. Den Speicherplatz (benutzt/gesammt) von "/dev/sdX1" anzeigen.
# 4. Den Speicherplatz von "/dev/sdX1" als Balken anzeigen.
#
# findmnt liefert: /dev/sdb1 ext4 91,2G 55,4G 35,8G 61% /media/Username/xy
#
sdX1="sdb1"
nix=0
STR=$(findmnt -n -D --source /dev/$sdX1)
array=( $STR )
dummy=${array[6]}
target=${dummy##*/}
used=${array[3]}
size=${array[2]}
dummy=${array[5]}
pcent=${dummy%%%*}
if [ "$target" = "" ]; then
echo -n
else
echo "\${color #009bf9}$target:\${color lightgrey} $used/$size $pcent% \${execbar 6 /bin/echo $pcent}"
nix=`expr $nix + 1`
fi
sdX1="sdc1"
STR=$(findmnt -n -D --source /dev/$sdX1)
array=( $STR )
dummy=${array[6]}
target=${dummy##*/}
used=${array[3]}
size=${array[2]}
dummy=${array[5]}
pcent=${dummy%%%*}
if [ "$target" = "" ]; then
echo -n
else
echo "\${color #009bf9}$target:\${color lightgrey} $used/$size $pcent% \${execbar 6 /bin/echo $pcent}"
nix=`expr $nix + 1`
fi
sdX1="sdd1"
STR=$(findmnt -n -D --source /dev/$sdX1)
array=( $STR )
dummy=${array[6]}
target=${dummy##*/}
used=${array[3]}
size=${array[2]}
dummy=${array[5]}
pcent=${dummy%%%*}
if [ "$target" = "" ]; then
echo -n
else
echo "\${color #009bf9}$target:\${color lightgrey} $used/$size $pcent% \${execbar 6 /bin/echo $pcent}"
nix=`expr $nix + 1`
fi
if [ "$nix" = "0" ]; then
echo "\${color #009bf9}sdX1:\${color lightgrey} nicht vorhanden"
fi
|
Grüßle, Naubaddi
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, Naubaddi schrieb: ...Im Moment experimentiere ich mit for... und while... um es etwas kompakter zu bekommen, bis jetzt nicht sehr erfolgreich 😉 ...
erledigt mit while... und case...", jetzt läuft es richtig rund 😀 .
Grüßle, Naubaddi
|
Naubaddi
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 744
|
Hi, irgendwie konnte ich im vorherigen Post das Skript nicht einfügen, jetzt funktioniert es. Die unveränderte Zeile für Conky:
${execpi 1 ~/.conky/usb.sh} Das kompakte Skript mit while und case:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 | #!/bin/bash
#
# Dieses Skript ist für Conky!
#
# 1. Die Textfarben ändern.
# 2. Den Namen von "/dev/sdX1" anzeigen.
# 3. Den Speicherplatz (benutzt/gesammt) von "/dev/sdX1" anzeigen.
# 4. Den Speicherplatz von "/dev/sdX1" als Balken anzeigen.
#
# findmnt liefert: /dev/sdb1 ext4 91,2G 55,4G 35,8G 61% /media/Username/xy
#
sdX1="sdb1"
nix=0
while [ "$sdX1" != "" ]
do
STR=$(findmnt -n -D --source /dev/$sdX1)
array=( $STR )
dummy=${array[6]}
target=${dummy##*/}
used=${array[3]}
size=${array[2]}
dummy=${array[5]}
pcent=${dummy%%%*}
if [ "$target" = "" ]; then
echo -n
else
echo "\${color #009bf9}$target:\${color lightgrey} $used/$size $pcent% \${execbar 6 /bin/echo $pcent}"
nix=`expr $nix + 1`
fi
case "$sdX1" in
sdb1) sdX1="sdc1" ;;
sdc1) sdX1="sdd1" ;;
sdd1) sdX1="" ;;
esac
done
if [ "$nix" = "0" ]; then
echo "\${color #009bf9}sdX1:\${color lightgrey} nicht vorhanden"
fi
|
Grüßle, Naubaddi
|
alterpinguin
Anmeldungsdatum: 24. Mai 2014
Beiträge: 786
|
also das hätte ich dann aber auch anders gemacht. Du willst mehrere Festplattendevices abfragen und dann kannst Du die doch beim Aufruf angeben. ${execpi 1 ~/.conky/usb.sh sdb1 sdc1 sdd1} und die Abfrage und das "loop" über diese Argumente erfolgt im script dann z.B. so: #!/bin/bash
#
for device in "$*"; do
echo "$device" #d.h. mach die Verarbeitung findmnt Abfrage dafür und die Ausgabe
done und Du kannst, da findmnt für ein nicht vorhandenes Festplattendevice einen "leeren Text" zurückgibt, auf diesen leeren "string" prüfen und dann ausgeben, dass die Festplattenpartition nicht vorhanden ist. (siehe Test auf bash-Abfrage ob eine Textvariable leer ist) Das hätte den Vorteil, dass Du bei anderen Festplattendevicenamen leicht eine Änderung vornehmen kannst. Aber es reicht wohl schon die Reduktion auf ein einziges script, das conky aufrufen muss. Das sollte sich in der CPU-Auslastung auch zeigen.
|