Conky - zastosowanie komend "if_..."

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: zet120 »

Przyznam, że rozwiązania problemu z błędem po odłączeniu dysku szukam od jakiego czasu i jak dotąd bezskutecznie, wierzę jednak, że w końcu się uda.
Na jednym forum zaproponowano mi rozwiązanie pt. "stłucz pan termometr nie będziesz pan miał gorączki":

Kod: Zaznacz cały

conky -c ~/Pulpit/test > /dev/null 2>&1
Nooo, przy takim wywołaniu conkiego błędów oczywiście nie ma. :-)
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: dk75 »

No niestety to jest jakaś właściwość Conkego wbudowana przez programistów, że zamiast zatrzymać dla siebie informację, że danego katalogu/urządzenia nie ma to co 15s flooduje konsolę.

Spróbuj w swoim ".conkyrc" dopisać

Kod: Zaznacz cały

${if_mounted /media/disk}${fs_bar /media/disk}$endif
a zobaczysz ten błąd i bez podłączania żadnego pena do USB, więc to nie wina mojego skryptu



a teraz nowa, ulepszona wersja ( jeszcze bez AWK ) ale ma mniej zbędnego kodu i nie ma problemów z punktami montowania ze spacją w środku:

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point
_index=100

for x in $(hal-find-by-property --key access_control.type --string removable-block)
do
	_mp=; _mp=$(hal-device "$x" |grep "volume\.mount_point" |cut -d\' -f2)
	if [ "$_mp" ];
	then
		_index=$[--_index]; _array_index[$_index]=$_index
		_mount_point[$_index]="$_mp"
		_device=$(hal-device "$x" |grep "access_control\.file" |cut -d\' -f2)
		_udi=$(hal-device "$x" |grep "block\.storage_device" |cut -d\' -f2)
		#	_dvendor=$(hal-device "$_udi" |grep "info\.vendor" |cut -d\' -f2)
		_dproduct=$(hal-device "$_udi" |grep "info\.product" |cut -d\' -f2)
		#	if [ "$_dvendor" ]; then _name[$_index]="${_name[$_index]} $_dvendor"; fi
		if [ "$_dproduct" ]; then _name[$_index]="${_name[$_index]} $_dproduct"
		else _name[$_index]="${_name[$_index]} $(hal-device $x |grep "info\.product" |cut -d\' -f2)"; fi
		_name[$_index]="${_name[$_index]/\ }"
		y=$(df -h |grep $(echo "$_device"))
		if [ "$y" ]
		then
			set $y
			_device[$_index]="$1"
			_space_used[$_index]="$3"
			_space_free[$_index]="$4"
			_percent_used[$_index]="$5"
			_space_available[$_index]="$2"
		fi
	fi
done

for x in "${_array_index[@]}"
do
	echo
	echo -e "\${font :size=8:weight=bold}${_name[$x]}:"
	echo -e "\${font :size=8:weight=bold}\${tab 16}device\${tab 54}= ${_device[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}mount point\${tab 54}= ${_mount_point[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space used\${tab 54}= ${_space_used[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space free\${tab 54}= ${_space_free[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}percent used\${tab 54}= ${_percent_used[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space available\${tab 54}= ${_space_available[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}\${fs_bar 8,145 ${_mount_point[$x]}}"
done

exit 0
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
Awatar użytkownika
igotit4free
Przyjaciel
Przyjaciel
Posty: 6453
Rejestracja: 29 paź 2008, 22:51
Płeć: Mężczyzna
Architektura: x86_64
Lokalizacja: KRK

Odp: Conky - zastosowanie komend "if_..."

Post autor: igotit4free »

U mnie bez zmian ... także poprawiona wersja wyświetla informacje jedynie o urządzeniu podpiętym jako pierwsze, na podpinanie kolejnych nie reaguje.
Przykładowo wpinam pena, jest info. Wpinam drugiego, nic.
Podpinam telefon który ma "pamięć" i "pamięć na karcie", jest info tylko o tej pierwszej ... WTF?:pt36:
Windows 10 @ GA-P67A-D3-B3, i3-2100 3.10GHz, 8GB RAM, Gigabyte HD6850 1GB RAM
Android 7.0 @ Motorola Moto G4+
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: dk75 »

Ok.
Podepnij wszystkie swoje urządzenia/karty/peny/dyski i gdy się zamontują uruchom raz skrypt z załącznika a potem wstaw tutaj plik "/tmp/conky-removable.dbg.log"


PS: nowa poprawiona wersja - literówki, te najgorsze bo niby nic nie znaczące ale jednak...

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point
_index=100

for x in $(hal-find-by-property --key access_control.type --string removable-block)
do
	_mp=; _mp=$(hal-device "$x" |grep "volume\.mount_point" |cut -d\' -f2)
	if [ "$_mp" ]
	then
		_index=$[--_index]
		_array_index[$_index]=$_index
		_mount_point[$_index]="$_mp"
		_dev=$(hal-device "$x" |grep "access_control\.file" |cut -d\' -f2)
		_udi=$(hal-device "$x" |grep "block\.storage_device" |cut -d\' -f2)
		#	_dvendor=$(hal-device "$_udi" |grep "info\.vendor" |cut -d\' -f2)
		_dproduct=$(hal-device "$_udi" |grep "info\.product" |cut -d\' -f2)
		#	if [ "$_dvendor" ]; then _name[$_index]="${_name[$_index]} $_dvendor"; fi
		if [ "$_dproduct" ]; then _name[$_index]="${_name[$_index]} $_dproduct"
		else _name[$_index]="${_name[$_index]} $(hal-device $x |grep "info\.product" |cut -d\' -f2)"; fi
		_name[$_index]="${_name[$_index]/\ }"
		y=$(df -h |grep $(echo "$_dev"))
		if [ "$y" ]
		then
			set $y
			_device[$_index]="$1"
			_space_used[$_index]="$3"
			_space_free[$_index]="$4"
			_percent_used[$_index]="$5"
			_space_available[$_index]="$2"
		fi
	fi
	
done

for x in "${_array_index[@]}"
do
	echo
	echo -e "\${font :size=8:weight=bold}${_name[$x]}:"
	echo -e "\${font :size=8:weight=bold}\${tab 16}device\${tab 54}= ${_device[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}mount point\${tab 54}= ${_mount_point[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space used\${tab 54}= ${_space_used[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space free\${tab 54}= ${_space_free[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}percent used\${tab 54}= ${_percent_used[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}space available\${tab 54}= ${_space_available[$x]}"
	echo -e "\${font :size=8:weight=bold}\${tab 16}\${fs_bar 8,145 ${_mount_point[$x]}}"
done

exit 0
Załączniki
conky-removable-media-debug.sh.tar.gz
(749 Bajtów) Pobrany 66 razy
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
norvoles
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1113
Rejestracja: 04 sty 2008, 20:58
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: norvoles »

Przepraszam, że odświeżam temat, ale mam problem ze skryptem post wyżej. Po odpaleniu wypluwa:
norvoles@norvoles-desktop:~$ sh ~/.conky/conky-removable-media-debug.sh
/home/norvoles/.conky/conky-removable-media-debug.sh: 3: declare: not found
/home/norvoles/.conky/conky-removable-media-debug.sh: 4: declare: not found
/home/norvoles/.conky/conky-removable-media-debug.sh: 48: Bad substitution
O ile pierwszy i drugi błąd da się usunąć, przez wywalenie 3 i 4 linii (co i tak nic nie daje), to ten ostatni jest dla mnie kompletnie niezrozumiały. Ma ktoś pomysł co z tym zrobić?
Ten błąd dotyczy 'done' w drugiej pętli.
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: dk75 »

Sorry ale to jest skrypt dla 8.10

W 9.10 kompletnie zmieniono HAL i klucze wewnątrz i po prostu żaden volumen nie posiada klucza "access_control.type" we właściwościach. Nawet samych właściwości nie ma. :wall:
Jak znajdę czas to napiszę nową wersję dla 9.10.


<style="zielona szkółka">

Jeśli ciągle chcesz czytać dalej to nie możesz tego skryptu uruchamiać przez SH gdyż standardowo w Ubuntu SH to jest DASH shell a skrypt jest napisany dla BASH shell i są między nimi pewne różnice w arytmetyce, logice i wbudowanych funkcjach.
Jeśli koniecznie chcesz uruchomić skrypt aby go sprawdzić to zrób to przez

Kod: Zaznacz cały

bash ~/.conky/conky-removable-media-debug.sh
albo nadaj mu uprawnienia wykonywania

Kod: Zaznacz cały

chmod +X ~/.conky/conky-removable-media-debug.sh
i wtedy wystarczy

Kod: Zaznacz cały

~/.conky/conky-removable-media-debug.sh
</style>


Ale jak już pisałem ten skrypt niczego nie wykryje.
Poza tym skopiowałeś z sekcji <CODE> i używasz normalny skrypt ale nazwałeś go DEBUG gdy wersja debug była w załączniku wiadomości :teeh:
(debug zapisywała trochę informacji w "/tmp" nie robiąc tak naprawdę nic więcej)
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
Awatar użytkownika
zet120
Wytworny Kaczor
Wytworny Kaczor
Posty: 280
Rejestracja: 31 maja 2008, 07:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Openbox
Architektura: x86_64

Odp: Conky - zastosowanie komend "if_..."

Post autor: zet120 »

Obecnie na Ubuntu 9.10 do wykrywania dysków zewnętrznych i wewnętrznych używam:

Kod: Zaznacz cały

#!/usr/bin/perl
#perl script to determin mounted fs for conky
# wywołanie w conky ${execp ~/Pulpit/dysk.pl}

$filesystems = `df | grep /dev/`;
@location = split(/\n/, $filesystems);

for $i (0 .. $#location) {
    if ( substr($location[$i], 0, 5) eq '/dev/' ) {
        substr($location[$i], 0, 56) = "";
        $loc[$a] = $location[$i];
        $a++;
    }
}

for $i (0 .. $#loc) {
    print '${if_mounted ', $loc[$i], '}${color ', &whatcolor($loc[$i]),'}', '${fs_bar 14 ', $loc[$i], '}${color}',"\n";
    print '${voffset -16}${color blue} ', $loc[$i], ' ${fs_used ', $loc[$i], '} / ${fs_size ', $loc[$i], '}${alignr 3}${fs_used_perc ', $loc[$i], '}%${else}${voffset -16}${endif}', "\n";
}


sub whatcolor {
    my (@ops) = @_;
    my ($status) = `df $ops[0] | grep /dev/ | cut -c52-54`;
    my ($color);
    if ($status > 95) {      # CRITICAL
        $color = 'red';
    } elsif ($status > 85) { # DANGER
        $color = 'orange';
    } elsif ($status > 75) { # WARNING
        $color = 'yellow';
    } else {                 # GOOD
        $color = 'green';
    }
    return $color;
}
Działa stabilnie, koloruje wykres w zależności od zajętości dysku, słowem OK.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość