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 »

Ano niestety ma, z których największą jest chyba totalny brak formatowania wyświetlanych informacji, ale prace idą w dobrym kierunku. :-)
Na forum programistycznym poprosiłem o zmodyfikowanie skryptu z posta NR.16.
Założenia były takie aby skrypt wyświetlał TYLKO dyski zewnętrzne podłączane do systemu przez USB, ale z tego co widzę nie do końca się to udało, ponieważ skrypt wymaga pewnych założeń, zależnych od indywidualnych uwarunkowań systemowych i niestety nie może być skryptem uniwersalnym.
Skrypt po modyfikacjach wygląda tak:

Kod: Zaznacz cały

#!/bin/bash

df -l | grep media | grep -ve 'sd[ab]' | while read line ; do
    device=`echo $line | awk '{ print $1 }'`
    mount=`echo $line | sed 's/.*\(\/media\/.*\)/\1/' | sed 's/ /\\\ /g'`
     if [ -n "$mount" ]; then
    echo '${if_mounted '$mount'}${color}'$mount' ${color #555555}('$device')${color #00cc00} ${goto 220}${color #00cc00}${fs_free '$mount'} Free ${color #78af78}${fs_bar 9,135 '$mount'}${color #00cc00}${fs_free_perc '$mount'}%${color #78af78}
       ${diskiograph '$device' 15,0 000000 aaaa00}${endif}'
    fi    
done
Tak czy owak działa z małym ale.....
To ale odnosi się w zasadzie do wszystkich skryptów o których mowa w tym wątku, a mianowicie.
Po uruchomieniu w conky wszystko pracuje normalnie i teraz podłączam dysk zewnętrzny, zostaje on wykryty, jego reprezentacja wyświetlona na pulpicie, konsola milczy, czyli jak na razie pełnia szczęścia.
Problem pojawia się po odłączeniu tego dysku ponieważ wtedy pojawia się w konsoli komunikat:

Kod: Zaznacz cały

Conky: statfs '/media/DISK_IMG': No such file or directory
No tego dysku rzeczywiście nie ma tylko w jaki sposób poinformować o tym fakcie conky'iego, skrypt lub system??
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 »

Ano niestety ma, z których największą jest chyba totalny brak formatowania wyświetlanych informacji, ale prace idą w dobrym kierunku.
Można wybrać co chcesz wyświetlać i z TOTALnego skryptu zrobić cząstkowe ... np. dla name, free, used i total size ... wtedy można dowolnie formatować poszczególne wyświetlane wartości ...

Można z wyniku :

Kod: Zaznacz cały

domek@domek-desktop:~$ df -h
System plików            rozm. użyte dost. %uż. zamont. na
/dev/sda2             7,9G  3,1G  4,4G  41% /
tmpfs                 505M     0  505M   0% /lib/init/rw
varrun                505M  200K  505M   1% /var/run
varlock               505M     0  505M   0% /var/lock
udev                  505M  2,8M  502M   1% /dev
tmpfs                 505M  592K  504M   1% /dev/shm
lrm                   505M  2,0M  503M   1% /lib/modules/2.6.27-11-generic/volatile
/dev/sda3              66G   34G   29G  55% /home
/dev/sdb1             7,5G  2,5G  5,0G  34% /media/CRUZER
wyświetlać tylko dane z linii z "media", dostaniesz wtedy wyniki wyłącznie dla zewnętrznych ...
Problem pojawia się po odłączeniu tego dysku ponieważ wtedy pojawia się w konsoli komunikat:

Kod: Zaznacz cały

Conky: statfs '/media/DISK_IMG': No such file or directory
No tego dysku rzeczywiście nie ma tylko w jaki sposób poinformować o tym fakcie conky'iego, skrypt lub system??
Komunikat nie będzie się wyświetlał, jeśli dodać do tego wymyślnego skryptu polecenie przeładowania conky kiedy zajdzie warunek było/nie ma ...
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
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 »

igotit4free pisze:Komunikat nie będzie się wyświetlał...
A można prosić o bardziej szczegółową receptę pod tytułem gdzie i co konkretnie dodać?
Próbuję się z tym uporać, poczytałem mana conkiego, wiem ,a przynajmniej tak mi się wydaje, jak działa komenda if_....else....endif
Dodaję stosowny zapis do samego skryptu, dodaję go również do pliku konfiguracyjnego conky, ale za każdym razem konsola wie lepiej , że No such file.....

EDIT:
Oczywiście próbowałem też wywoływać skrypt poleceniem:
${execpi 3 /ścieżka do pliku}, niestety rezulat ten sam.
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 »

Kurcze, zdawało mi się to łatwiejsze, nie umiem znaleźć zdarzenia do którego odnieść automatyczny restart conky ... pozostaje ręcznie przez :

Kod: Zaznacz cały

killall conky && conky
Myślę, że nasze próby ulepszenia conky już jakiś czas temu wyszły poza ramy zakreślone przez twórców tej aplikacji ;-) ... a już na pewno nie da się pogodzić konstrukcji opartej na df z gadżetami typu bar.

Ja próbuję rozwinąć poniższy skrypt ... jest w pełni automatyczny, po odmontowaniu nośników nie zostają żadne resztki ani zgłoszenia w konsoli, formatowanie wyników też jest proste poprzez ich zagnieżdżanie przy odpowiednich fontach, kolorach itp. =>Hau, hau ... pośpieszyłem się z tym stwierdzeniem, muszę to dopracować ;)
Nie mam tylko pomysłu jak w wyniku tego wyrażenia zapobiec wyświetlaniu "/media/".

Kod: Zaznacz cały

domek@domek-desktop:~$ df -h | grep /media | awk '{ print $6,$3,$2 }'
/media/CRUZER 3,2G 7,5G
/media/PENNY 322M 2,0G
Windows 10 @ GA-P67A-D3-B3, i3-2100 3.10GHz, 8GB RAM, Gigabyte HD6850 1GB RAM
Android 7.0 @ Motorola Moto G4+
Hagal
Sędziwy Jeż
Sędziwy Jeż
Posty: 41
Rejestracja: 11 sty 2009, 01:35
Płeć: Mężczyzna
Środowisko graficzne: Brak

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

Post autor: Hagal »

igotit4free pisze:Nie mam tylko pomysłu jak w wyniku tego wyrażenia zapobiec wyświetlaniu "/media/".

Kod: Zaznacz cały

domek@domek-desktop:~$ df -h | grep /media | awk '{ print $6,$3,$2 }'
/media/CRUZER 3,2G 7,5G
/media/PENNY 322M 2,0G
Tak? :

Kod: Zaznacz cały

domek@domek-desktop:~$ df -h | grep /media | awk '{ print $6,$3,$2 }' | sed 's/\/media\///'
Nie toleruję zmuszania do reklam...
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 »

Dzięki piękne, działa :clap:

http://krasnoludy.republika.pl/090221.png

Wciskałem to wykluczenie chyba wszędzie i dostawałem coraz to bardziej zaskakujące wyniki:bag:
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
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 »

igotit4free pisze: Myślę, że nasze próby ulepszenia conky już jakiś czas temu wyszły poza ramy zakreślone przez twórców tej aplikacji
Spójrz na to:

Obrazek

to oczywiście trick, tych ikon nie wyświetla conky, ale ten przykład doskonale obrazuje jakie są oczekiwania użytkowników i pewnie da do myślenia twórcom tej aplikacji.

Co do skryptu to szukam w miarę uniwersalnego rozwiązania, które po prostu będzie działać zgodnie z moimi oczekiwaniami. Skryptowi, który zaprezentowałem wyżej niewiele brakuje do tego.....szukam dalej rozwiązania.

P.S.
Nie wszystkie dyski w /media/... to będą dyski zewnętrzne.
W kompie mam dwa dyski wewnętrzne, z których "ten drugi" zamontowany jest własnie w /media/.., a i jedna z partycji pierwszego tamże.:-)
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 »

zet120 pisze:Spójrz na to:

Obrazek

to oczywiście trick, tych ikon nie wyświetla conky, ale ten przykład doskonale obrazuje jakie są oczekiwania użytkowników i pewnie da do myślenia twórcom tej aplikacji.
Grubo ... w tym przykładzie Conky nie ma już wiele wspólnego z określeniem "a light-weight system monitor" ;-) Z tym, że co do założeń twórców i oczekiwań użytkowników to idea jest taka, że każdy w miarę potrzeb i umiejętności coś od siebie dodaje. I to jest w tym najlepsze:-).
Nie wszystkie dyski w /media/... to będą dyski zewnętrzne.
W kompie mam dwa dyski wewnętrzne, z których "ten drugi" zamontowany jest własnie w /media/.., a i jedna z partycji pierwszego tamże.:-)
Mogę bazować tylko na własnej konfiguracji i w niej "media" posłużył jako punkt zaczepienia dla dalszych działań.
Ten skrypt z posta # 21 wymaga jakichś dodatkowych warunków ? Stworzyłem odpowiedni plik, umieściłem go gdzie trzeba i nadałem mu prawa ale nic się w związku z nim w conky nie wyświetla: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
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 »

Ano własnie to ów brak uniwersalności.:-)
Skrypt wykrywa wszystkie dyski zamontowane w /media/... za wyjątkiem dev/sda i dev/sdb.
O ile poznałem Twój system spróbuj usunąć w pierwszej linijce literę b

Kod: Zaznacz cały

df -l | grep media | grep -ve 'sd[ab]' | while read line ; do
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 »

Że też wcześniej nie zauważyłem tego wątku.

conky-usb-mass-storage-device.sh ( pierwsza niezoptymalizowana wersja )

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point

for x in $(hal-find-by-property --key storage.bus --string usb)
do
	if (hal-device "$x" |grep "storage\.drive_type = 'disk'" > /dev/null);
	then
		_bminor=$(hal-device "$x" |grep "block\.minor" |sed -e "s/'//g" |cut -d\  -f5)
		_index[$_bminor]=$_bminor
		_vendor[$_bminor]=$(hal-device "$x" |grep "info\.vendor" |sed -e "s/'//g" |cut -d\  -f5)
		_product[$_bminor]=$(hal-device "$x" |grep "info\.product" |sed -e "s/'//g" |cut -d\  -f5)
		_info_udi=$(hal-device "$x" |grep "info\.udi" |sed -e "s/'//g" |cut -d\  -f5)
		_udi=$(hal-find-by-property --key info.parent --string $(echo "$_info_udi"))
		_device=$(hal-device "$_udi" |grep "block\.device" |sed -e "s/'//g" |cut -d\  -f5)
		y=$(df -h |grep $(echo "$_device"))
		if [ "$y" ]
		then
			set $y
			_device[$_bminor]="$1"
			_mount_point[$_bminor]="$6"
			_space_used[$_bminor]="$3"
			_space_free[$_bminor]="$4"
			_percent_used[$_bminor]="$5"
			_space_available[$_bminor]="$2"
		fi
	fi
done

if [ ${#_mount_point[@]} -gt 0 ];
then
	for x in "${_index[@]}"
	do
		if [ "${_mount_point[$x]}" ]
		then
			echo
			echo -e "\${font :size=8}${_vendor[$x]} ${_product[$x]} :"
			echo -e "\${tab 16}device\${tab 64}= ${_device[$x]}"
			echo -e "\${tab 16}mount point\${tab 64}= ${_mount_point[$x]}"
			echo -e "\${tab 16}space used\${tab 64}= ${_space_used[$x]}"
			echo -e "\${tab 16}space free\${tab 64}= ${_space_free[$x]}"
			echo -e "\${tab 16}percent used\${tab 64}= ${_percent_used[$x]}"
			echo -e "\${tab 16}space available\${tab 64}= ${_space_available[$x]}\$font"
		fi
	done
fi
exit 0

wywołanie w conky poprzez

Kod: Zaznacz cały

${execpi 5 /usr/local/bin/conky-usb-mass-storage-device.sh}
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 »

Bardzo przyjemny skrypt.:clap:
W tej wersji nie reaguje jednak na podpięcie kolejnych napędów ...
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 »

To nie jest skrypt docelowy.
To jest tylko pierwszy szkic idei i byłem bardzo nastawiony na "USB" - myślę, ze docelowo lepiej będzie to zrobić ze wszystkimi "wolumenami usuwalnymi" ( "removable-block" - a więc i karty pamięci w czytnikach oraz np. CD-ROM/DVD )
To jak skrypt reaguje na urządzenie zależne jest od dostępnych "właściwości" - a niestety jest pełen bałagan. Tzn. są ustalone odpowiednie pola ale jedni producenci używają jednych a drudzy innych właściwości do identyfikacji sprzętu a część się duplikuje.
Przykładowy skrypt powstał na podstawie PenDrive Transcend oraz dysku Seagate SATA 2,5" w obudowie USB Unitek i to mi działa ( 6MB )

Tak więc podłącz tak wiele dysków USB ile masz i podeślij na forum w załączniku wynik komendy:

Kod: Zaznacz cały

 hal-device > hal-query.txt && tar cvjf hal-query.tar.bz2 hal-query.txt
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 »

Brawo!
To pierwszy skrypt ( a testowałem jak do tej pory kilkanaście), przy który conky po odłączeniu zewnętrznego dysku nie "marudzi", że nie ma dysku. :-)
U mnie działają oba czyli aktualnie wszystkie zewnętrzne dyski:

Obrazek

Mam jednak pytanie jak usunąć w punkcie montowania słowo media?
Odpowiedź w zasadzie znajduje się w tym wątku:

Kod: Zaznacz cały

..| sed 's/\/media\///'
ale jak i gdzie zastosowac w tym skrypcie.
Drugie pytanko to jak umieścić standardowy fs_bar pokazujący ilość wolnego miejsca na dysku zewnętrznym?
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 »

zet120 pisze:Brawo!
Mam jednak pytanie jak usunąć w punkcie montowania słowo media?
Odpowiedź w zasadzie znajduje się w tym wątku:

Kod: Zaznacz cały

..| sed 's/\/media\///'
ale jak i gdzie zastosowac w tym skrypcie.
Drugie pytanko to jak umieścić standardowy fs_bar pokazujący ilość wolnego miejsca na dysku zewnętrznym?

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point

for x in $(hal-find-by-property --key storage.bus --string usb)
do
	if (hal-device "$x" |grep "storage\.drive_type = 'disk'" > /dev/null);
	then
		_bminor=$(hal-device "$x" |grep "block\.minor" |sed -e "s/'//g" |cut -d\  -f5)
		_index[$_bminor]=$_bminor
		_vendor[$_bminor]=$(hal-device "$x" |grep "info\.vendor" |sed -e "s/'//g" |cut -d\  -f5)
		_product[$_bminor]=$(hal-device "$x" |grep "info\.product" |sed -e "s/'//g" |cut -d\  -f5)
		_info_udi=$(hal-device "$x" |grep "info\.udi" |sed -e "s/'//g" |cut -d\  -f5)
		_udi=$(hal-find-by-property --key info.parent --string $(echo "$_info_udi"))
		_device=$(hal-device "$_udi" |grep "block\.device" |sed -e "s/'//g" |cut -d\  -f5)
		y=$(df -h |grep $(echo "$_device"))
		if [ "$y" ]
		then
			set $y
			_device[$_bminor]="$1"
			_mount_point[$_bminor]="$6"
			_space_used[$_bminor]="$3"
			_space_free[$_bminor]="$4"
			_percent_used[$_bminor]="$5"
			_space_available[$_bminor]="$2"
		fi
	fi
done

if [ ${#_mount_point[@]} -gt 0 ];
then
	for x in "${_index[@]}"
	do
		if [ "${_mount_point[$x]}" ]
		then
			echo
			echo -e "\${font :size=8}${_vendor[$x]} ${_product[$x]} :"
			echo -e "\${tab 16}device\${tab 64}= ${_device[$x]}"
			echo -e "\${tab 16}mount point\${tab 64}= ${_mount_point[$x]/\/media}"
			echo -e "\${tab 16}space used\${tab 64}= ${_space_used[$x]}"
			echo -e "\${tab 16}space free\${tab 64}= ${_space_free[$x]}"
			echo -e "\${tab 16}percent used\${tab 64}= ${_percent_used[$x]}"
			echo -e "\${tab 16}space available\${tab 64}= ${_space_available[$x]}\$font"
			echo -e "\${tab 16}\${fs_bar 8,100 ${_mount_point[$x]}}"
		fi
	done
fi
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
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 »

Dziękuję za odpowiedź.:-)
Niestety podczas dalszych testów skrypt zaczął zachowywać się dosyć klasycznie czyli po fizycznym odłączeniu jednego z dysków zewnętrznych (konkretnie /media/Test conky twierdzi, że:

Kod: Zaznacz cały

Conky: statfs '/media/Test': No such file or directory
Czy tylko u mnie?
Awatar użytkownika
molibden
Piegowaty Guziec
Piegowaty Guziec
Posty: 26
Rejestracja: 18 kwie 2006, 15:40
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

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

Post autor: molibden »

U mnie conky nie wywala tego błędu, natomiast czasami po odłączeniu urządzenia, otrzymuję taki komunikat:

Kod: Zaznacz cały

process 10266: arguments to dbus_message_new_method_call() were incorrect, assertion "_dbus_check_is_valid_path (path)" failed in file dbus-message.c line 1074.
This is normally a bug in some application using the D-Bus library.
libhal.c 529 : Couldn't allocate D-BUS message
(null): (null)
Użycie: grep [OPCJA]... WZORZEC [PLIK] ...
Napisz `grep --help' żeby dowiedzieć się więcej.
W kapitaliźmie wszyscy gotowi są zawsze na najgorsze, u nas na najlepsze.
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 »

Podpięte dwa peny, aparat Minolta i telefon Sony Ericsson.
Tutaj ten plik tekstowy, mam nadzieję że będzie pomocny.
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 »

zet120 pisze:Dziękuję za odpowiedź.:-)
Niestety podczas dalszych testów skrypt zaczął zachowywać się dosyć klasycznie czyli po fizycznym odłączeniu jednego z dysków zewnętrznych (konkretnie /media/Test conky twierdzi, że:

Kod: Zaznacz cały

Conky: statfs '/media/Test': No such file or directory
Czy tylko u mnie?

Podejrzewam, że to "$fs_bar" - Conky jest odświeżane co 1s a skrypt jest uruchamiany co 5s i może zajść taka sytuacja, że urządzenie będzie już odłączone, Conky odświeży BAR i nie znajdzie urządzenia a skrypt wywołanie skasuje dopiero za 4s i w tym czasie Conky będzie waliło błędami. Trzeba dodać wewnątrz "$if_mounted" aby nie tylko skrypt ale i sam Conky mógł zadecydować o tym czy wyświetlać czy nie dane urządzenie.

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point

for x in $(hal-find-by-property --key storage.bus --string usb)
do
	if (hal-device "$x" |grep "storage\.drive_type = 'disk'" > /dev/null);
	then
		_bminor=$(hal-device "$x" |grep "block\.minor" |sed -e "s/'//g" |cut -d\  -f5)
		_index[$_bminor]=$_bminor; _pointer[$_bminor]=$x
		_vendor[$_bminor]=$(hal-device "$x" |grep "info\.vendor" |sed -e "s/'//g" |cut -d\  -f5)
		_product[$_bminor]=$(hal-device "$x" |grep "info\.product" |sed -e "s/'//g" |cut -d\  -f5)
		_info_udi[$_bminor]=$(hal-device "$x" |grep "info\.udi" |sed -e "s/'//g" |cut -d\  -f5)
		_udi=$(hal-find-by-property --key info.parent --string $(echo "${_info_udi[$_bminor]}"))
		_device=$(hal-device "$_udi" |grep "block\.device" |sed -e "s/'//g" |cut -d\  -f5)
		y=$(df -h |grep $(echo "$_device"))
		if [ "$y" ]
		then
			set $y
			_device[$_bminor]="$1"
			_mount_point[$_bminor]="$6"
			_space_used[$_bminor]="$3"
			_space_free[$_bminor]="$4"
			_percent_used[$_bminor]="$5"
			_space_available[$_bminor]="$2"
		fi
	fi
done

if [ ${#_mount_point[@]} -gt 0 ];
then
	for x in "${_index[@]}"
	do
		if [ "${_mount_point[$x]}" ]
		then
			echo
			echo -e "\${if_mounted ${_mount_point[$x]}}\${font :size=8:weight=bold}${_vendor[$x]} ${_product[$x]} :"
			echo -e "\${font :size=8:weight=bold}\${tab 16}device\${tab 64}= ${_device[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}mount point\${tab 64}= ${_mount_point[$x]/\/media}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space used\${tab 64}= ${_space_used[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space free\${tab 64}= ${_space_free[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}percent used\${tab 64}= ${_percent_used[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space available\${tab 64}= ${_space_available[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}\${fs_bar 8,145 ${_mount_point[$x]}}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}Pointer:\${tab 40}${_pointer[$x]/\/org\/freedesktop\/Hal\/devices\/storage_serial_}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}Info_UDI:\${tab 40}${_info_udi[$x]/\/org\/freedesktop\/Hal\/devices\/storage_serial_}\$endif"
		fi
	done
fi
exit 0

molibden pisze:U mnie conky nie wywala tego błędu, natomiast czasami po odłączeniu urządzenia, otrzymuję taki komunikat:
Spróbuj, może nowa wersja będzie działać lepiej. Prawdę mówiąc tak miałem gdy dałem wywołanie "hal-find-by-property" w "for" pomiędzy cudzysłowami - cały raport robiło jako jedną linię i "grep" głupiał. Ale czemu teraz się to dzieje to nie mam zielonego.
W "łykend" mam zamiar zagłębić się w tutoriale "awk" i wtedy rzucę w kąt trójcę "grep,sed,cut" aby zmniejszyć ilość wywołań ładowania komend z dysku wewnątrz pętli i przy okazji dla zmniejszenia wywołań odczytu statusu HAL ( też chyba niezbyt dobre dla obciążenia systemu ).


igotit4free pisze:Podpięte dwa peny, aparat Minolta i telefon Sony Ericsson.
Ok. Wiem o co chodzi. Minolta i Sony mają inne wartości w polu przez które mój skrypt rozpoznaje czy dany wpis w HAL to urządzenie czy wolumin - a tylko woluminy nas interesują.
Dzięki twojemu statusowi HAL będę mógł poszukać innej ( wspólnej wszystkim urządzeniom ) właściwości do odróżnienia woluminu od urządzenia.
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 »

W niedzielę będę miał trochę czasu to też na to spojrzę, fajną bazę do testowania i nauki stworzyłeś. Dobra robota.:clap:
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 »

nowa wersja - wykrywa więcej urządzeń ( nie wszystko co podłączone do USB ma klasę USB ) oraz lepiej radzi sobie z pustymi nazwami urządzeń.
conky-removable-media.sh

Kod: Zaznacz cały

#!/bin/bash

declare -a _index
declare -a _mount_point

for x in $(hal-find-by-property --key access_control.type --string removable-block)
do
	if (hal-device "$x" |grep "info\.category = 'volume'" > /dev/null);
	then
		_bminor=$(hal-device "$x" |grep "block\.minor" |sed -e "s/'//g" |cut -d\  -f5)
		_index[$_bminor]=$_bminor
		_device=$(hal-device "$x" |grep "access_control\.file" |sed -e "s/'//g" |cut -d\  -f5)
		_udi=$(hal-device "$x" |grep "block\.storage_device" |sed -e "s/'//g" |cut -d\  -f5)
		_dvendor=$(hal-device "$_udi" |grep "info\.vendor" |sed -e "s/'//g" |cut -d\  -f5)
		_dproduct=$(hal-device "$_udi" |grep "info\.product" |sed -e "s/'//g" |cut -d\  -f5)
		if [ "$_dvendor" ]; then _name[$_bminor]="${_name[$_bminor]} $_dvendor"; fi
		if [ "$_dproduct" ]; then _name[$_bminor]="${_name[$_bminor]} $_dproduct"
		else _name[$_bminor]="${_name[$_bminor]} $(hal-device $x |grep "info\.product" |sed -e "s/'//g" |cut -d\  -f5)"; fi
		_name[$_bminor]="${_name[$_bminor]/\ }"
		y=$(df -h |grep $(echo "$_device"))
		if [ "$y" ]
		then
			set $y
			_device[$_bminor]="$1"
			_mount_point[$_bminor]="$6"
			_space_used[$_bminor]="$3"
			_space_free[$_bminor]="$4"
			_percent_used[$_bminor]="$5"
			_space_available[$_bminor]="$2"
		fi
	fi
done

if [ ${#_mount_point[@]} -gt 0 ];
then
	for x in "${_index[@]}"
	do
		if [ "${_mount_point[$x]}" ]
		then
			echo
			echo -e "\${if_mounted ${_mount_point[$x]}}\${font :size=8:weight=bold}${_name[$x]} :"
			echo -e "\${font :size=8:weight=bold}\${tab 16}device\${tab 48}= ${_device[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}mount point\${tab 48}= ${_mount_point[$x]}\$endif"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space used\${tab 48}= ${_space_used[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space free\${tab 48}= ${_space_free[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}percent used\${tab 48}= ${_percent_used[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}space available\${tab 56}= ${_space_available[$x]}"
			echo -e "\${font :size=8:weight=bold}\${tab 16}\${fs_bar 8,145 ${_mount_point[$x]}}\$endif"
		fi
	done
fi
exit 0

UWAGA!
Przy używaniu "fs_bar" po odmontowaniu urządzenia w konsoli conky będzie floodował błędem "Conky: statfs '/media/disk': No such file or directory" - na razie nie wiem jak to obejść.
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
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

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