Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
DeletedUser-WgoBa
Beitrag
von DeletedUser-WgoBa » 23.10.2021 13:56:23
Hi,
ich versuche gerade auf meinem Desktop (KDE, XFce) dieses Script für die Batterie-Überwachung via User-Crontab zu starten:
Code: Alles auswählen
#!/bin/bash
BATTERY=`acpi | awk '{print $4}' | cut -c 1-2`
STATUS=`acpi | awk '{print $3}'| cut -c 1-4`
if [[ $BATTERY -ge 80 ]] && [[ $STATUS == "Char" ]]
then
notify-send --urgency=critical --expire-time=5000 -i /usr/share/icons/Adwaita/256x256/legacy/battery-full.pn "Battery is loaded with $BATTERY%!" "The laptop can be taken from the charging current!"
elif [[ $BATTERY -le 40 ]] && [[ $STATUS == "Disc" ]]
then
notify-send --urgency=critical --expire-time=5000 -i /usr/share/icons/Adwaita/256x256/legacy/battery-caution.png "Battery has reached $BATTERY%!" "The laptop must be connected to the charging current!"
fi
exit
Der Crontab-Eintrag ist auf alle 5 Minuten eingestellt:
Das Script startet aber nicht, sondern nur wenn es direkt manuell aufgerufen wird. Das ist aber nicht Sinn und Zweck.
Viele Grüße
Kaheto
Zuletzt geändert von DeletedUser-WgoBa am 24.10.2021 10:27:31, insgesamt 1-mal geändert.
-
tobo
- Beiträge: 2349
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 23.10.2021 15:11:43
Kaheto hat geschrieben: 23.10.2021 13:56:23
Der Crontab-Eintrag ist auf alle 5 Minuten eingestellt:
Alle 2 Minuten.
Das Script startet aber nicht [...]
Das ist doch aber nur deine Vermutung, weil du kein notify-send siehst? Cron hat erstmal keine Verbindung zum Bildschirm, sondern schreibt in Dateien - verwende mal ein "DISPLAY=:0" vor deinen beiden notify-send.
-
DeletedUser-WgoBa
Beitrag
von DeletedUser-WgoBa » 23.10.2021 17:17:42
tobo hat geschrieben: 23.10.2021 15:11:43
Das ist doch aber nur deine Vermutung, weil du kein notify-send siehst? Cron hat erstmal keine Verbindung zum Bildschirm, sondern schreibt in Dateien - verwende mal ein "DISPLAY=:0" vor deinen beiden notify-send.
Danke für den Hinweis, der ist aber nicht zielführend. Das hilft auch nicht
Code: Alles auswählen
*/2 * * * * export DISPLAY=:0 && /usr/local/bin/batteryCheck.sh
-
tobo
- Beiträge: 2349
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 23.10.2021 18:09:35
Kaheto hat geschrieben: 23.10.2021 17:17:42
Danke für den Hinweis, der ist aber nicht zielführend.
Bei mir würde das (#1) funktionieren.
Vielleicht ist es abhängig von deiner Umgebung - jedenfalls würde ich dann erstmal dazu raten, dass du überprüfst, ob das Skript tatsächlich ausgeführt wird (z.B. mit einen date >> "${HOME}/FILE" oben im Skript).
Zuletzt geändert von
tobo am 23.10.2021 19:22:32, insgesamt 1-mal geändert.
-
DeletedUser-WgoBa
Beitrag
von DeletedUser-WgoBa » 23.10.2021 18:55:23
Das habe ich bereits auch gecheckt. In der /var/log/syslog wird
Code: Alles auswählen
Oct 23 18:50:01 ticket CRON[9932]: (kaheto) CMD (export DISPLAY=:0 && notify-send 'testing')
Oct 23 18:50:01 ticket dbus-daemon[9865]: [session uid=1000 pid=9863] Activating service name='org.freedesktop.Notifications' requested by ':1.6' (uid=1000 pid=9933 comm="notify-send testing ")
ausgeführt. Ich habe das mit
getestet.
Bzw.
Code: Alles auswählen
Oct 23 19:02:01 mombasa CRON[3875]: (kaheto) CMD (export DISPLAY=:0 && /usr/local/bin/batteryCheck.sh)
-
tobo
- Beiträge: 2349
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 23.10.2021 19:08:30
Ok, wie vermutet liegt es an der Darstellungsfläche für notify-send. Das muss dann jemand beantworten, der deine Umgebung besser einschätzen kann.
-
DeletedUser-WgoBa
Beitrag
von DeletedUser-WgoBa » 23.10.2021 19:21:42
tobo hat geschrieben: 23.10.2021 19:08:30
Ok, wie vermutet liegt es an der Darstellungsfläche für notify-send. Das muss dann jemand beantworten, der deine Umgebung besser einschätzen kann.
Scheint so der Fall zu sein, denn auf xcfe da funktioniert "export DISPLAY=:0" im Script.
-
DeletedUser-WgoBa
Beitrag
von DeletedUser-WgoBa » 24.10.2021 10:27:05
Die Lösung liegt in einem Sicherheitsfeature von KDE5 (siehe her:
https://www.linuxquestions.org/question ... 175692441/) und es gilt "DBUS_SESSION_BUS_ADDRESS" für diesen einen Benutzer zu modifizieren. Im Script ist also folgender Code hinzuzufügen:
Code: Alles auswählen
username=$(/usr/bin/whoami)
pid=$(ps -u $username e | grep -m 1 DBUS_SESSION_BUS_ADDRESS | awk '{print $1}')
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//')
export DBUS_SESSION_BUS_ADDRESS=$dbus
Unter diesen Umständen funktioniert das Script auch via Cronjob auf KDE5.
-
tijuca
- Beiträge: 302
- Registriert: 22.06.2017 22:12:20
Beitrag
von tijuca » 24.10.2021 10:59:11
Diese Variable gibt es für jeden eingeloggten Benutzer in den Umgebungsvariablen.
Code: Alles auswählen
$ env | grep DBUS
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
Wenn man dann auch noch systemd benutzt dürfte diese so oder so auch der systemd-timer Unit zur Verfügung stehen wenn in dieser angibt, dass der Aufruf für/als $(USER) ausgeführt werden soll. Ist meine Vermutung, habe das jetzt nicht getestet.