it-swarm.com.de

Wie kann ich ein Skript ausführen, wenn das Netzteil angeschlossen oder ausgeschaltet ist?

Aus irgendeinem Grund wird die Bildschirmhelligkeit meines Laptops nicht aktualisiert, wenn ich das Netzteil ein- oder ausstecke. Ich habe mir einige Lösungen für dieses Problem angesehen, aber keine davon schien gut zu funktionieren. Anstatt zu verzweifeln und aufzugeben, habe ich mich entschlossen, dies in eine Lernerfahrung zu verwandeln und zu prüfen, ob ich kein Skript schreiben kann, das dies für mich erledigt.

Ich habe versucht, es selbst herauszufinden, natürlich mit etwas Hilfe aus dem Internet, aber ich bin ziemlich neu im Bash-Scripting und in Ubuntu im Allgemeinen, also bin ich nicht weit gekommen.

Was ich herausfinden konnte, war, dass ich den Zustand der Batterie finden kann mit

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

es hängt davon ab, ob das Netzteil eingesteckt ist oder nicht. Ich weiß nicht, ob das überhaupt nützlich ist, aber es ist irgendwie cool, und ich wusste vorher nicht, wie ich grep verwenden soll Spaß.

Wie auch immer, gibt es einen sauberen Weg, dies zu tun? Mit "sauberer Weg" meine ich nur einen Weg, den jemand mit begrenzter Erfahrung mit Bash-Skripten verstehen könnte.

Eine ähnliche Frage, die ich gefunden habe und die eine gute Antwort hatte, ist diese , die folgendes besagt:

Wenn Sie das Netzteil einstecken/ausstecken, werden die Skripte in /etc/pm/power.d mit> einem Argument aufgerufen: "true" (wenn Sie mit einer Batterie arbeiten) oder "false" (wenn Sie mit dem Netzteil arbeiten) .

Das Problem ist, dass ich nicht weiß, wie ich von einem Skript aus auf dieses Argument zugreifen kann. Also, ich denke, es läuft alles auf ein ziemlich einfaches Problem hinaus, aber ich dachte, ich würde die Frage trotzdem posten, falls die Leute bessere Lösungen hätten.

8
Jasper

Sie können on_ac_power verwenden, um ein Skript auszuführen, wenn die Stromversorgung ein- oder ausgeschaltet ist.

Versuchen Sie Folgendes in einem Terminal.

_$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)
_

Darauf aufbauend können Sie Ihr Skript erstellen als

_#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done
_

EDIT:  [vorgeschlagen von KasiyA ]

cron job wäre eine bessere Idee, um das Skript in regelmäßigen Abständen auszuführen als mit einer Endlosschleife.

Speichern Sie Ihr Skript als _myscript.sh_ und fügen Sie den folgenden Inhalt ein:

_#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi
_

Machen Sie das Skript von einem Terminal aus ausführbar, _chmod +x /path/to/myscript.sh_. Öffnen Sie Ihr persönliches crontab als _EDITOR=gedit crontab -e_ und fügen Sie die folgende Zeile hinzu, um Ihr Skript jede Minute auszuführen.

_* * * * * /path/to/myscript.sh 
_
5
souravc