Wie führe ich ein Skript aus, wenn ich das Programm anhalte / wieder aufnehme? - Sony VAIO Ubuntu 12.04

12

Frage: Wie kann ich ein Skript zuweisen, das ausgeführt wird, wenn ich die Suspend-Option im Power-Menü auswähle?

Kontext:
Ich habe einen Sony VAIO-Laptop mit einer AMD Radeon-Grafikkarte. Ich möchte die diskrete Grafikkarte deaktivieren / aktivieren können. Ich habe kein Problem damit, aber es verursacht Probleme beim Anhalten und Fortsetzen nach dem Anhalten.

Wenn die Sitzung nach dem Anhalten wieder aufgenommen wird (mit deaktivierter diskreter DPU), dreht sich der Lüfter unkontrolliert. Ich möchte das Anhalte-Skript bearbeiten oder der Anhalte-Option im Power-Menü ein neues Skript zuweisen. Auf diese Weise kann ich die GPU vor dem Suspendieren wieder aktivieren. Power-Menü

EDIT: Nach einigen Recherchen denke ich, dass es etwas mit den Dateien in zu tun hat /etc/pm/sleep.d/?

Wenn ich dort ein benutzerdefiniertes Skript einfügen würde, würde es beim Anhalten und Fortsetzen nach dem Anhalten ausgeführt?

Wie unterscheide ich im Skript zwischen Anhalten / Wiederaufnehmen?

danielcooperxyz
quelle

Antworten:

16

Du hast recht. Sie müssen ein Skript schreiben und speichern /lib/systemd/system-sleep/(seit 2015 kümmert sich das System darum, bevor es war /etc/pm/sleep.d/). Der Unterschied zwischen Anhalten und Fortsetzen wird als Parameter für das Skript angegeben:

#!/bin/bash

case "$1" in
    suspend)
        # executed on suspend
        ;;
    resume) 
        # executed on resume
        ;;
    *)
        ;;
esac

Wenn Sie es auch für den Ruhezustand tun möchten, wären die Argumente hibernateund thaw.

André Stannek
quelle
Ich hatte dies in anderen Skripten gesehen und fragte mich, welche spezifischen Anforderungen für ein solches Skript gelten. Vielen Dank :)
Danielcooperxyz
Hallo, habe dies auf meinem Dell 5570 mit Ubuntu 14.04 versucht, um mein Touchpad einzuschalten, wenn ich es vor dem Anhalten ausgeschaltet hätte. Aus irgendeinem Grund gibt der Befehl tp_id=( )xinput list | grep -i touchpad | awk '{ print $7 }' | sed 's/id=//'() die ID nicht zurück, während dieser Befehl über die Befehlszeile ausgeführt wird. Kannst du einen Grund dafür sehen? Für andere Zwecke funktioniert Ihr Skript hervorragend. Vielen Dank!
Leo Simon
Entschuldigung, in diesem vorherigen Kommentar habe ich versucht, Backticks in das Skriptfragment einzufügen, aber die Minimarkdown-Sprache hat mich besiegt. Die () sollen durch Backticks ersetzt werden
Leo Simon
@LeoSimon Hey Leo, die Kommentare sind nicht der richtige Ort, um eine solche Folgefrage zu diskutieren. Ich schlage vor, Sie stellen eine völlig neue Frage. Auf diese Weise werden viel mehr Menschen es sehen und Ihnen helfen können :-)
André Stannek
2
Möglicherweise müssen Sie /lib/systemd/system-sleep/stattdessen verwenden.
SimonT