Auf meinem Dell-Laptop tritt dieser Fehler mit Kernel 3.14 auf. Als Workaround habe ich ein einfaches Skript geschrieben
/ usr / bin / Brightness-Fix:
#!/bin/bash
echo 0 > /sys/class/backlight/intel_backlight/brightnes
(und ausführbar gemacht: chmod +x /usr/bin/brightness-fix
)
und ein systemd-Dienst, der es aufruft und beim Start ausgeführt wird:
/etc/systemd/system/brightness-fix.service
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=forking
ExecStart=/usr/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
#RemainAfterExit=yes
#SysVStartPriority=99
[Install]
WantedBy=multi-user.target
und aktiviert: systemctl enable /etc/systemd/system/brightness-fix.service
Das funktioniert wie ein Zauber und ich kann die Helligkeit meines Displays wie gewünscht steuern. Das Problem tritt auf, wenn der Laptop nach dem Ruhezustand wieder in Betrieb genommen wird (z. B. beim Schließen der Lippe des Laptops): Die Helligkeitsregelung funktioniert nicht mehr, es sei denn, ich führe das obige erste Skript manuell aus:/usr/bin/brightness-fix
Wie kann ich einen anderen systemd-Dienst wie meinen oben erstellen, der zur Wiederaufnahme ausgeführt wird?
BEARBEITEN:
Laut Kommentaren unten habe ich meine brightness-fix.service
wie folgt geändert :
[Unit]
Description=Fixes intel backlight control with Kernel 3.14
[Service]
Type=oneshot
ExecStart=/usr/local/bin/brightness-fix
TimeoutSec=0
StandardOutput=syslog
[Install]
WantedBy=multi-user.target sleep.target
Außerdem habe ich echo "$1 $2" > /home/luca/br.log
mein Skript erweitert, um zu überprüfen, ob es tatsächlich ausgeführt wird. Das Skript, das es tatsächlich ausführt, wird auch beim Fortsetzen ausgeführt (post suspend
) ausgeführt, hat aber keine Auswirkung (Hintergrundbeleuchtung ist 100% und kann nicht geändert werden). Ich habe auch versucht, zu protokollieren, $DISPLAY
und zum $USER
Zeitpunkt der Wiederaufnahme sind sie leer. Ich vermute also, dass das Skript beim Aufwachen aus dem Schlaf zu früh ausgeführt wird. Irgendein Hinweis?
WantedBy=sleep.target
.../usr/local/bin
, nicht der ist/usr/bin
. Dieses Verzeichnis ist nur für den Paketmanager reserviert.sleep.target
wird das Gerät ausgeführt, wenn der Computer in den Energiesparmodus wechselt, und nicht, wenn es fortgesetzt wird. In meiner Antwort unten finden Sie eine Unit-Datei, die bei mir mit einem ähnlichen Problem funktioniert hat.Antworten:
Ich weiß, dass dies eine alte Frage ist, aber die folgende Unit-Datei hat mir geholfen, ein Skript auszuführen, wenn ich aus dem Ruhezustand zurückgekehrt bin:
Ich glaube, es ist das
After=suspend.target
, was es auf Resume laufen lässt, anstatt wenn der Computer in den Ruhezustand geht.quelle
After=suspend.target
in Unit undWantedBy=multi-user.target sleep.target
in Install .Alternativ zum Schreiben und Aktivieren einer Unit-Datei können Sie auch ein Shell-Skript (oder einen Symlink zu Ihrem Skript) einfügen
/lib/systemd/system-sleep/
.Es wird vor dem Schlafengehen / Ruhezustand und zur Wiederaufnahme der Arbeit aufgerufen.
Von
man systemd-suspend.service
:Testen Sie es mit diesem:
quelle
/usr/lib
Alle Beispiele beziehen sich jedoch auf Dateien unter/lib
system-sleep
scheint sich das Verzeichnis in zu befinden/lib/systemd/
und/usr/lib/systemd
enthält andere Sachen.Follow-up zur Antwort von mivk, bei der ich es vermeide, mit einer neuen Gerätedatei herumzuspielen (siehe meine Frage hier Wie kann ich auf Ereignisse auf dem Laptopdeckel reagieren? ). Hier ist meine Lösung; Es ist nicht 100% einfach ( seufz ), weil das System nicht stabil ist, wenn es aus dem Schlaf kommt:
Auf meiner Fedora 26 Box habe ich hier einen Symlink gesetzt:
/usr/lib/systemd/system-sleep/sleepyhead
welche Punkte hier :,/root/bin/sleepyhead
welche enthalten:Das
/root/bin/trackpoint
Skript folgt. Beachten Sie, dass der erste Schlaf kritisch ist. Das Gerät wird bei jedem Öffnen des Deckels eingerichtet, sodass es zunächst nicht vorhanden ist. Wenn ich versuche, etwas anderes als den Schlaf zu tun, dauert das Beenden des Skripts "sleepyhead" sehr lange und mein Zeiger wird für mindestens 60 Sekunden eingefroren. Beachten Sie außerdem, dass Sie das/root/bin/trackpoint
Skript nicht oben im Hintergrund platzierensleepyhead
können. Wenn Sie dies tun, wird der Prozess beimsleepyhead
Beenden abgebrochen.quelle