Jak mogę otrzymać powiadomienie na ekranie za pomocą powiadomienia-osd, kiedy podłączam / odłączam ładowarkę?
battery
notification
notify-osd
kernel_panic
źródło
źródło
Odpowiedzi:
Przełączanie między zasilaniem AC i akumulatorem powinno generować zdarzenie na magistrali systemowej D-Bus . Uruchom
dbus-monitor --system
i obserwuj, jakie zdarzenia są generowane w twoim systemie.Jeśli masz wyższą wydajność , otrzymujesz bardziej wyspecjalizowane powiadomienia od
upower -m
.Możesz także otrzymywać wydarzenia od
acpi_listen
.Uruchom ten skrypt, jeśli chcesz zacząć widzieć powiadomienia, lub dodaj go do uruchamiania sesji.
źródło
dbus
Niektóre osoby zgłosiły, że moje wcześniejsze rozwiązanie udev wysłało powiadomienie zbyt wiele razy, gdy kabel zasilający był podłączony. Nie mogłem tego odtworzyć, ale napisałem ten skrypt Pythona, aby używać dbus zamiast udev. Zapisz go jako
.py
plik gdzieś na dysku twardym. Zaznacz plik wykonywalny, uruchamiając:i dodaj go do aplikacji startowych zgodnie z opisem tutaj . Ten skrypt wymaga
acpi
zainstalowania pakietu .udev
Przy odrobinie eksperymentów (i niewielkiej pomocy) udało mi się zastosować regułę udev, aby to osiągnąć. Niektóre osoby zgłosiły, że czasami wysyła powiadomienie więcej niż raz, ale nie miałem żadnych problemów. YMMV.
Utwórz skrypt o następującej treści:
zastępując
some_user
swoją nazwę użytkownika. Zaznacz plik wykonywalny, uruchamiając:zastępując
/path/to/script.sh
ścieżką do miejsca, w którym zapisałeś skrypt.Następnie utwórz plik o
/etc/udev/rules.d
nazwie10-power.rules
z zawartością:ponownie zastępując
/path/to/script.sh
ścieżką do wcześniej utworzonego skryptu.Teraz ponownie załaduj reguły udev, uruchamiając:
Odłącz kabel zasilający. Powinieneś otrzymać powiadomienie.
źródło
XAUTHORITY
kilka menedżerów wyświetlania, takich jak gdm.dbus-monitor
. Zobacz moją odpowiedź.Źródło skryptu
Zdobycie skryptu
Skrypt został również dodany do mojego github ; ta wersja zostanie zaktualizowana i opracowana nieco więcej.
Możesz to zrobić, wykonując następujące czynności:
sugo apt-get install git
cd /opt
git clone https://github.com/SergKolo/sergrep.git
Skrypt będzie w
/opt/sergrep
katalogu o nazwienotify_ac_change.sh
Projekt koncepcji
Kluczowe pytania brzmią: „Jak sprawdzamy obecność zasilacza sieciowego?” i „Jak wykrywamy zmiany?”
Cóż, ten problem został rozwiązany dawno temu przez innych programistów. Ubuntu jest domyślnie wyposażony w skrypt o nazwie on_ac_power , w którym jest przechowywany
/usr/bin/on_ac_power
. Zasilacz można wymienić w różnych podsystemach jądra (ACPI lub APM), ale ten skrypt upraszcza naszą pracę - autorzy opisali wiele możliwych wariantów. Zwraca tylko status wyjścia, więc jest odpowiedni do użycia wif
instrukcjach.Dlaczego warto
on_ac_power
wybrać? Ponieważ polega na sprawdzeniu wielu podsystemów. Zapewnia również wystarczająco proste polecenie do pracy - wynik jest albo prawdziwy, albo fałszywy.Mamy więc narzędzie do wykrywania obecności, ale co z logiką? Musimy sondować obecność i wykryć zmianę stanu. Co możemy zrobić, to przechowywać status wyjścia
on_ac_power
i stale porównywać aktualny stan z tym, co zapisaliśmy, gdy się zmieni - wyślij powiadomienie, zapisz ponownie status i kontynuuj porównywanie, zapętlając. Podstawowym pomysłem jest użycie flag.Krótko mówiąc, inicjalizujemy migawkę stanu, a następnie stale odpytujemy o zmianę z migawki; gdy nastąpi zmiana - powiadom i przywróć migawkę.
źródło