skrypt powiadamiający o odcięciu zasilania

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
MonaLu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 114
Rejestracja: 23 cze 2010, 17:27
Płeć: Kobieta
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

skrypt powiadamiający o odcięciu zasilania

Post autor: MonaLu »

Cześć,

Znalazłam tu http://andyk.pg.gda.pl/skrypty/#Skrypt_ ... _o_poczcie skrypt, za którego pomocą chciałabym wyświetlać powiadomienie o rozłączeniu zasilacza. Bateria jest kompletna dętka i po odłączeniu prądu starcza jej jak raz, aby biegiem podłączyć "zerwany" kabel. W dodatku kłamie, że jest pełna, więc komp nawet nie ma czasu się zahibernować, a inne ustawienia zasilania nie są wystarczająco nachalne no i szkoda mi dysku, żeby tak ciągle pady zaliczał, jak mi dzieć po zasilaczu przejedzie... Aha, no clou wątku, to oczywiście, że ja z tego skryptu nic nie rozumiem, jak mam przetłumaczyć na komputerowe "jak odłączony kabel" i co w tym skrypcie tym zastąpić? :pt36:
Z góry dzięki za wszelką pomoc!
Ostatnio zmieniony 03 paź 2013, 15:53 przez MonaLu, łącznie zmieniany 3 razy.
spart
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 02 paź 2013, 06:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Architektura: x86_64

Re: powiadomienie o zasilaniu

Post autor: spart »

Odpowiednie odwołanie do odpięcia kabla znajduje się już w systemie w /etc/acpi/events/battery

Kod: Zaznacz cały

# /etc/acpi/events/battery
# Called when AC power goes away and we switch to battery

event=battery
action=/etc/acpi/power.sh
w skrypcie /etc/acpi/power.sh dodaj linijkę do jakiegoś programu np. speaker-test -t wav -wRear_Right.wav -l5

Kod: Zaznacz cały

#!/bin/sh
speaker-test -t wav -wRear_Right.wav -l5

test -f /usr/share/acpi-support/key-constants || exit 0

. /usr/share/acpi-support/policy-funcs

if [ -z "$*" ] && ( [ `CheckPolicy` = 0 ] || CheckUPowerPolicy ); then
    exit;
fi

pm-powersave $*
Awatar użytkownika
MonaLu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 114
Rejestracja: 23 cze 2010, 17:27
Płeć: Kobieta
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Re: powiadomienie o zasilaniu

Post autor: MonaLu »

spart pisze: w skrypcie /etc/acpi/power.sh dodaj linijkę do jakiegoś programu np. speaker-test -t wav -wRear_Right.wav -l5
Dzięki, spart. Nie mogłam sobie poradzić ze speaker-testem, więc wrzuciłam odwołanie do vlc, co jednocześnie da sygnał wizualny. Ale albo trochę przesadziłam, albo czas reakcji nie jest wystarczający (odczekałam tylko 9 sekund, nie wiem dokładnie jak długo bateria wytrzymuje, a nie chciałam go jeszcze wysadzić). Teraz mój power.sh wygląda tak:

Kod: Zaznacz cały

#!/bin/sh

vlc osiol.mp3

test -f /usr/share/acpi-support/key-constants || exit 0

. /usr/share/acpi-support/policy-funcs

if [ -z "$*" ] && ( [ `CheckPolicy` = 0 ] || CheckUPowerPolicy ); then
    exit;
fi

pm-powersave $*
Nie wiem, czy *natychmiastowa* reakcja w ogóle jest możliwa? Hm, w sumie to on natychmiast przechodzi na baterię, a po jakichś 2 sekundach robi takie jakby "pryk", więc vlc te powinien od razu wyskoczyć, nawet z dwusekundowym opóźnieniem na uruchomienie... To co tam nie gra (poza oslem na vlc)?

PS osioł z terminala gra.
Specjalistka od automagicznej samonaprawy sprzętu. ;)

#Bywają takie chwile w życiu człowieka, kiedy żadne radio nie gra jego ulubionej piosenki.
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: ethanak »

zacznijmy od tego, że vlc się nie odpali bo nie wie gdzie. teoretycznie można poinformować go że aktualny display to :0, ale nie jestem pewien czy to zadziała.
z drugiej strony jeśli nawet zadziała (czy zmienisz polecenie np. na play który displaya nie wymaga) kochane PA nie pozwoli na odegranie dźwięku przez innego użytkownika niż ten który jest aktualnie zalogowany, czyli w naszym przypadku roota...
jeśli masz tylko jednego użytkownika można to obejść:

Kod: Zaznacz cały

su - nazwausera -c "/usr/bin/play /tam/gdzie/mieszka/osiol.mp3"
(czy jakoś tak, teraz nie sprawdzę)
masz do tego zainstalować sox i format mp3 do soxa.
spart
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 02 paź 2013, 06:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: spart »

Bardziej by pasowało cvlc ale tak jak pisze kolega trzeba kombinować.
Moje rozwiązanie działa po rebocie, nie zostawiaj pustego miejsca po #!/bin/sh, po odłączeniu kabla reakcja jest natychmiastowa.

Możesz wrzucić dowolny dzwięk wav i wskazać speaker-test żeby go odtwarzał z tym że musi to być dźwięk jednokanałowy
Użyłem do tego programu SoundConverter, próbkowanie na 48000Hz, zaznaczona opcja “wymuszenie dźwięku jednokanałowego”
Awatar użytkownika
MonaLu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 114
Rejestracja: 23 cze 2010, 17:27
Płeć: Kobieta
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: MonaLu »

Juhuuu, pokombinowałam, zrozumiałam i działa! Nawet przed zalogowaniem! I po wpięciu kabla! ;) Jak rozumiem na końcu oznacza, że dźwięk ma być odtworzony 5 razy? Raz by wystarczył, ale co mi tam, zrobię se dwa! :D Dzięki serdeczne!
Specjalistka od automagicznej samonaprawy sprzętu. ;)

#Bywają takie chwile w życiu człowieka, kiedy żadne radio nie gra jego ulubionej piosenki.
Awatar użytkownika
mucha090
Zakręcona Traszka
Zakręcona Traszka
Posty: 775
Rejestracja: 15 mar 2008, 11:05
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Brak
Architektura: x86_64
Lokalizacja: Kielce, Poland
Kontakt:

Re: [SOLVED]skrypt powiadamiający o odcięciu zasilania

Post autor: mucha090 »

ja to na twoim miejscu bym dał polecenie

Kod: Zaznacz cały

pm-suspend

wiesz no lepiej uśpić system i po tym podłączyć kabel zasilania niż martwić się że nagle bateria padnie i cała praca pójdzie na marne
Awatar użytkownika
MonaLu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 114
Rejestracja: 23 cze 2010, 17:27
Płeć: Kobieta
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: MonaLu »

Nie no, bez jaj, na kompie to nie jak w piekarni, mogę się na chwilę oderwać, żeby podłączyć kabel, który znów taki długi nie jest, żebym musiała robić kilometry... Ale notuję na przyszłość, jak już bateria będzie jakby jej nie było! (Choć wtedy pewnie jednak wyskoczę z tych 200-300 stów, a może to już będzie mniej..? ;))

Edit:
Przy okazji się wykryły 2 rzeczy:
1. Jak się mu da "wyłącz", a potem zamiast potwierdzić "anuluj", to komp się restartuje.
2. Osioł ryczy przy uruchamianiu, nawet przy wpiętym kablu... To albo cos nie gra, albo jak zastosuję się do rady mucha090, to komp mi się nigdy nie uruchomi... A tak bez żartów, to też niedobrze, bo czasem faktycznie zapomnę, że rozpięłam, startuję, loguję i on pada. Jak będzie zawsze ryczał na start, to się uodpornię i znów nie będzie działać! :o
Ostatnio zmieniony 05 paź 2013, 10:52 przez MonaLu, łącznie zmieniany 1 raz.
Specjalistka od automagicznej samonaprawy sprzętu. ;)

#Bywają takie chwile w życiu człowieka, kiedy żadne radio nie gra jego ulubionej piosenki.
spart
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 02 paź 2013, 06:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: spart »

Osioł ma ryczeć podczas uruchamiania taki jego urok ;) ale może uda się go wyciszyć, dodaj parametr sleep 30 całość może wyglądać tak

Kod: Zaznacz cały

sleep 30 && speaker-test -t wav -wRear_Right.wav -l5
reakcja będzie opóźniona o 30 sekund
Awatar użytkownika
ethanak
Wygnańcy
Posty: 3054
Rejestracja: 04 gru 2007, 13:19
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Bielsko-Biała
Kontakt:

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: ethanak »

To akurat trochę nie tak jak tak...
Nie mam jak sprawdzić (nie mam teraz żadnego lapka w okolicy, ale pokombinuje później bo też mi się przyda) - taki scenariusz:
a) osioł ryczy pod warunkiem, że istnieje plik np. /dev/shm/osiol.enable:

Kod: Zaznacz cały

if [ -f /dev/shm/osiol.enable ] ; then
    osiol ryczy
fi
b) ponieważ w chwili startu systemu /dev/shm jest pusty, osioł będzie trzymać pysk na kłódkę
c) rc.local (albo coś w tym rodzaju) odpala:

Kod: Zaznacz cały

touch /dev/shm/osiol.enable
w każdym razie ważne aby odpalić to w momencie, gdy:
a) komputer jest podłączony do sieci przy starcie
lub
b) komputer przechodzi z baterii na sieć

Dobrze kombinuję czy jak osioł pod górkę?
spart
Piegowaty Guziec
Piegowaty Guziec
Posty: 8
Rejestracja: 02 paź 2013, 06:38
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: spart »

ha,ha.. eleganckie rozwiązanie milordzie, tylko trzeba usuwać skrypt co uruchomienie systemu
można też stworzyć skrypt w /etc/pm/power.d , tylko nie wiem co podstawić za wait może np.:

Kod: Zaznacz cały

#!/bin/sh
case $1 in
    true) #laptop_mode_battery 
        speaker-test -t wav -wRear_Right.wav -l5 #twoja komenda
	;;
    false) #laptop_mode_ac 
        wait /etc/acpi/power.sh  #twoja komenda  http://www.computerhope.com/unix/uwait.htm  
	;;
    help) help;;
    *) exit $NA ;;
esac
exit 0
https://help.ubuntu.com/community/Power ... ducedPower
Awatar użytkownika
MonaLu
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 114
Rejestracja: 23 cze 2010, 17:27
Płeć: Kobieta
Wersja Ubuntu: inny OS
Środowisko graficzne: Inne
Architektura: x86_64

Re: skrypt powiadamiający o odcięciu zasilania

Post autor: MonaLu »

Ojej, w sobotę rano osioł ryczy, a baba nie kuma... Osioł ma ryczeć kiedy:
1. Przy starcie zasilanie NIE jest podłączone,
2. Komp przechodzi na baterię.
Jak rozumiem przy uruchamianiu jest sprawdzana obecność baterii, dlatego ryczy? Odwlekanie reakcji na nic się nie zda, bo i tak zaryczy niepotrzebnie, tylko później, a jeśli przy każdym uruchamianiu miałabym usuwać lub znów tworzyć skrypt... to już wolę zerkać na zasilacz! Przynajmniej będę mogła zdjąć z monitora naklejkę "sprawdź kabel!" ;D
1...chyba, że ten skrypt

Kod: Zaznacz cały

    touch /dev/shm/osiol.enable
można wrzucić do autostartu, tak jak kiedyś "TapButton2 i 3"..?
2. ... chyba, że "wait", opóźniając reakcję, jednocześnie by powodował jej anulowanie, jeśli warunek nie jest już spełniony.

Edit after dist-upgrade:
Ku potomności uprzejmie informuję, że w 13.10 skrypt przestał działać, z tej prostej przyczyny, że w /etc/ecpi/events/ nie ma już battery a w katalogu wyżej po power.sh pozostały tylko kopie zapasowe. Jak na osobę z sygnaturki przystało, utworzyłam /etc/ecpi/events/battery, zapisałam prawidłowo power.sh, zresetowałam i.... no nie, nie śmiga właśnie, mam wrażenie, że uruchamia się dłużej i nie ryczy, jak wcześniej, przy wpiętym kablu. Ale ryczy później po wyjęciu kabla... i po wpięciu. Myślicie, ze można te obie akcje dźwiękowo rozróżnić?

Edit 2.:
W sumie to było dobrze jak ryczał na start niezależnie od kabla... bo teraz podczas uruchamiania bez kabla też nie ryczy, przypuszczam, że sprawdza eventy dopiero później, dla mojej baterii za późno...
Specjalistka od automagicznej samonaprawy sprzętu. ;)

#Bywają takie chwile w życiu człowieka, kiedy żadne radio nie gra jego ulubionej piosenki.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

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