Wie kann ich mit notify-osd eine Benachrichtigung auf dem Bildschirm erhalten, wenn ich das Ladegerät ein- oder ausstecke?
battery
notification
notify-osd
kernel_panic
quelle
quelle
Antworten:
Das Umschalten zwischen Wechselstrom und Batteriestrom sollte ein Ereignis auf dem D-Bus -Systembus erzeugen . Führen Sie aus
dbus-monitor --system
und beobachten Sie, welche Ereignisse auf Ihrem System generiert werden.Wenn Sie upower laufen lassen, erhalten Sie spezialisiertere Benachrichtigungen von
upower -m
.Sie können auch Ereignisse von erhalten
acpi_listen
.Führen Sie dieses Skript aus, wenn Sie Benachrichtigungen anzeigen möchten, oder fügen Sie es Ihrem Sitzungsstart hinzu.
quelle
dbus
Einige Leute berichteten, dass meine frühere udev-Lösung die Benachrichtigung zu oft gesendet hat, als das Netzkabel eingesteckt war. Ich konnte das nicht reproduzieren, aber ich habe dieses Python-Skript geschrieben, um dbus anstelle von udev zu verwenden. Speichern Sie es als
.py
Datei irgendwo auf Ihrer Festplatte. Markieren Sie die ausführbare Datei, indem Sie Folgendes ausführen:und fügen Sie es wie hier beschrieben zu Ihren Startanwendungen hinzu . Für dieses Skript muss das Paket
acpi
installiert sein.udev
Mit ein wenig Experimentieren (und ein wenig Hilfe) konnte ich eine udev- Regel verwenden, um dies zu erreichen. Einige Leute haben berichtet, dass es die Benachrichtigung manchmal mehr als einmal sendet, aber ich hatte keine Probleme. YMMV.
Erstellen Sie ein Skript mit folgenden Inhalten:
Ersetzen
some_user
durch Ihren Benutzernamen. Markieren Sie die ausführbare Datei, indem Sie Folgendes ausführen:Ersetzen
/path/to/script.sh
durch den Pfad, in dem Sie das Skript gespeichert haben.Als nächstes erstellen Sie eine Datei mit dem
/etc/udev/rules.d
Namen10-power.rules
:Ersetzen Sie ihn erneut durch
/path/to/script.sh
den Pfad zu dem zuvor erstellten Skript.Laden Sie nun die udev-Regeln neu, indem Sie Folgendes ausführen:
Ziehen Sie das Netzkabel ab. Sie sollten eine Benachrichtigung erhalten.
quelle
XAUTHORITY
mit einigen Display - Manager wie gdm.dbus-monitor
. Siehe meine Antwort.Skriptquelle
Das Skript abrufen
Das Skript wird auch meinem Github hinzugefügt . Diese Version wird ein bisschen mehr aktualisiert und weiterentwickelt.
Sie können es erhalten, indem Sie Folgendes tun:
sugo apt-get install git
cd /opt
git clone https://github.com/SergKolo/sergrep.git
Das Skript befindet sich im
/opt/sergrep
Verzeichnis mit dem Namennotify_ac_change.sh
Konzeptentwicklung
Die wichtigsten Fragen lauten: "Wie überprüfen wir das Vorhandensein des Netzteils?" und "Wie erkennen wir Veränderungen?"
Nun, dieses Problem wurde vor langer Zeit von anderen Entwicklern gelöst. Ubuntu wird standardmäßig mit einem Skript namens on_ac_power geliefert , das in gespeichert ist
/usr/bin/on_ac_power
. Das Netzteil kann unter verschiedenen Subsystemen im Kernel (ACPI oder APM) erwähnt werden, aber dieses Skript vereinfacht unsere Arbeit - die Autoren haben viele mögliche Variationen behandelt. Es gibt nur den Exit-Status zurück, sodass es für die Verwendung inif
Anweisungen geeignet ist .Warum ist
on_ac_power
eine gute Wahl? Weil es auf der Überprüfung mehrerer Subsysteme beruht. Es bietet auch einen Befehl, der einfach genug ist, um damit zu arbeiten - das Ergebnis ist entweder wahr oder falsch.Wir haben also ein Tool zur Anwesenheitserkennung, aber was ist mit der Logik? Wir müssen das Vorhandensein abfragen und Veränderungen im Zustand feststellen. Was wir tun können, ist, den Exit-Status von zu speichern
on_ac_power
und den aktuellen Status kontinuierlich mit dem zu vergleichen, was wir gespeichert haben, sobald er sich ändert - Benachrichtigung senden, Status erneut speichern und erneut vergleichen, Schleife. Grundidee ist die Verwendung von Flags.Kurz gesagt, wir initialisieren einen Snapshot des Status und fragen dann kontinuierlich nach Änderungen vom Snapshot ab. Sobald eine Änderung eintritt, benachrichtigen Sie den Snapshot und setzen Sie ihn zurück.
quelle