Wie kann ich in Ubuntu Unity 16.04 die Standby-Funktion schnell deaktivieren?

16

Was ist der schnellste Weg, um die Standby-Funktion beim Schließen des Deckels schnell zu deaktivieren? Ich mag dieses Verhalten sehr, aber besonders beim Abspielen von Musik möchte ich meinen Deckel schließen, ohne mein Gerät in den Standby-Modus zu versetzen.

Ich möchte diese Funktion jedoch nicht dauerhaft deaktivieren, sondern sie nur vorübergehend deaktivieren, bis ich beispielsweise mit dem Musikhören fertig bin.

Vielleicht gibt es einen ähnlichen Indikator wie Koffein ?

Bildbeschreibung hier eingeben

Orschiro
quelle
Sind Ihre Einstellungen für Wechselstrom und Batterie ähnlich?
Jacob Vlijm
Es gibt noch keinen solchen Indikator. Es gibt Möglichkeiten, aber sie erfordern root-Zugriff, sudowie in diesem Beitrag gezeigt. askubuntu.com/q/15520/295286 . Ich werde sehen, was getan werden kann
Sergiy Kolodyazhnyy
Darf ich fragen, welche Art von Systemversion Sie verwenden? 16.04
Sergiy Kolodyazhnyy
Lieber Jacob und Serg, danke für die ersten Kommentare und Lösungen! Jacobs Drehbuch funktioniert großartig. Es wäre fantastisch, wenn dies ein kleiner Indikator wäre. Ich mag nur visuelle GUIs. :-) Einstellungen sind für Wechselstrom und Batterie ähnlich. Ich habe meine Frage bearbeitet, um zu verdeutlichen, dass ich Unity 16.04 verwende.
Orschiro
Kann / wird gemacht. GUI wird jedoch etwas länger dauern.
Jacob Vlijm

Antworten:

19

Das folgende Skript schaltet die Aktion zum Schließen des Deckels zwischen "nichts" und "Anhalten" um:

#!/usr/bin/env python3
import subprocess

key = ["org.gnome.settings-daemon.plugins.power",
       "lid-close-ac-action", "lid-close-battery-action"]

currstate = subprocess.check_output(["gsettings", "get",
    key[0], key[1]]).decode("utf-8").strip()

if currstate == "'suspend'":
    command = "'nothing'"
    subprocess.Popen(["notify-send", "Lid closes with no action"])
else:
    command = "'suspend'"
    subprocess.Popen(["notify-send", "Suspend will be activated when lid closes"])

for k in [key[1], key[2]]:
    subprocess.Popen(["gsettings", "set", key[0], k, command])

... und benachrichtigen, was der aktuell eingestellte Zustand ist:

Bildbeschreibung hier eingeben

Wie benutzt man

Einfach:

  • Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter toggle_lid.py
  • Hinzufügen zu einer Tastenkombination: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:

    python3 /path/to/toggle_lid.py
    

Erläuterung

Der aktuelle Status der Aktionseinstellung zum Schließen des Deckels kann mit den Befehlen abgerufen werden.

gsettings get org.gnome.settings-daemon.plugins.power lid-close-ac-action

(on power) und

gsettings get org.gnome.settings-daemon.plugins.power lid-close-battery-action

(batteriebetrieben)

Das Skript liest den aktuellen Status und setzt das Gegenteil ('suspend' / 'nothing') mit dem Befehl:

gsettings get org.gnome.settings-daemon.plugins.power lid-close-ac-action '<action>'

Optional (zusätzlich)

Optional / zusätzlich können Sie eine Anzeige als Detektor ausführen, um den aktuellen Status der Deckeleinstellung anzuzeigen. Wird sich zeigen:

Bildbeschreibung hier eingeben

... in der Kontrollleiste wird, wenn das Aufhängen beim Schließen des Deckels verhindert wird, ein grauer angezeigt, wenn nicht.

Bildbeschreibung hier eingeben

Das Drehbuch

#!/usr/bin/env python3
import subprocess
import os
import time
import signal
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('AppIndicator3', '0.1')
from gi.repository import Gtk, AppIndicator3, GObject
from threading import Thread

key = ["org.gnome.settings-daemon.plugins.power",
       "lid-close-ac-action", "lid-close-battery-action"]

currpath = os.path.dirname(os.path.realpath(__file__))

def runs():
    # The test True/False
    return subprocess.check_output([
        "gsettings", "get", key[0], key[1]
        ]).decode("utf-8").strip() == "'suspend'"

class Indicator():
    def __init__(self):
        self.app = 'show_proc'
        iconpath = currpath+"/nocolor.png"
        self.indicator = AppIndicator3.Indicator.new(
            self.app, iconpath,
            AppIndicator3.IndicatorCategory.OTHER)
        self.indicator.set_status(AppIndicator3.IndicatorStatus.ACTIVE)       
        self.indicator.set_menu(self.create_menu())
        self.update = Thread(target=self.check_runs)
        # daemonize the thread to make the indicator stopable
        self.update.setDaemon(True)
        self.update.start()     

    def check_runs(self):
        # the function (thread), checking for the process to run
        runs1 = None
        while True:
            time.sleep(1)
            runs2 = runs()
            # if there is a change in state, update the icon
            if runs1 != runs2:
                if runs2:
                    # set the icon to show
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/nocolor.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
                else:
                    # set the icon to hide
                    GObject.idle_add(
                        self.indicator.set_icon,
                        currpath+"/green.png",
                        priority=GObject.PRIORITY_DEFAULT
                        )
            runs1 = runs2

    def create_menu(self):
        menu = Gtk.Menu()
        # quit
        item_quit = Gtk.MenuItem('Quit')
        item_quit.connect('activate', self.stop)
        menu.append(item_quit)
        menu.show_all()
        return menu

    def stop(self, source):
        Gtk.main_quit()

Indicator()
GObject.threads_init()
signal.signal(signal.SIGINT, signal.SIG_DFL)
Gtk.main()

Wie benutzt man

  1. Kopieren Sie das obige Skript in eine leere Datei und speichern Sie es unter show_state.py
  2. Kopieren Sie die beiden folgenden Symbole (Rechtsklick -> Speichern unter) und speichern Sie sie in ein und demselben Verzeichnis wie show_proc.pyund mit genau den unten angegebenen Namen

    green.png

    Bildbeschreibung hier eingeben

    nocolor.png

    Bildbeschreibung hier eingeben

  3. Führen Sie nun show_state.pyden folgenden Befehl aus:

    python3 /path/to/show_state.py
    

    und ändern Sie den aktuellen Status durch Drücken der Verknüpfung, die Sie im ersten Abschnitt dieser Antwort festgelegt haben.

  4. Wenn alles funktioniert, fügen Sie den Startanwendungen Folgendes hinzu:

    /bin/bash -c "sleep 15 && python3 /path/to/show_state.py"
    

Hinweis

Der Detektor-Indikator oben ist eine bearbeitete Version dieser Antwort . Durch einfaches Ändern des Tests in der Funktion runs()(und optional der entsprechenden Bedienfeldsymbole) können Sie den Status von allem anzeigen , was Trueoder ist False.

Jacob Vlijm
quelle
Hervorragende Lösung mit dem Indikator! Eine Frage: Warum haben Sie sich für ein transparentes Symbol entschieden ?
Orschiro
@orschiro Ich betrachte den Punkt, an dem das Schließen des Deckels unterbrochen wird, als Standardeinstellung . Die grüne als Hinweis Sie können den Deckel ohne Aktion (en) schließen. Es kann jedoch jedes Symbol sein. Vorschläge?
Jacob Vlijm
Vielleicht wie das Grüne, aber in verblassendem Grau? Aufgrund der Transparenz des Symbols ist es etwas irritierend, einen leeren Bereich in der Indikatorleiste zu sehen.
Orschiro
@orschiro haha, jetzt verstehe ich was du meinst :). bearbeitet.
Jacob Vlijm
5

Eine andere Option wäre, in den Ubuntu-Einstellungen von "Suspend" zu "Do Nothing" zu wechseln - Power:

Ubuntu-Einstellungen - Power

PS: Dies bietet keinen Indikator im Benachrichtigungsbereich, ist aber einfacher als das Erstellen eines Skripts für neue Benutzer.

PPS: In diesem Bildschirmschnappschuss ist die USV für Kabelmodem + Sony Android TV, nicht für den Laptop mit Akku ... HAHA.

WinEunuuchs2Unix
quelle
Äh, ok. Manueller Weg, dauert ein paar Klicks hier und da. Aber ziemlich anständig.
Sergiy Kolodyazhnyy
@ Serg Mir gefällt das Skript von Jacob. Wird wahrscheinlich irgendwann damit spielen, nachdem ich Ubuntu 16.04 / Kernel 4.7.2 auf meinem System stabiler gemacht habe. In der Tat hat meine Unterbrechung beim Schließen des Deckels noch nie bei der Upgrade-Box von 14.04 auf 16.04 geklappt ... ich musste einen Parameter in systemd einrichten, der davon ausgeht, dass beim Schließen des Deckels der Fernseher aktiv bleiben und einfach den Laptop-Bildschirm dimmen soll. Im Nachhinein hätte ich auch dazu Anweisungen geben sollen!
WinEunuuchs2Unix
Ja, vor 16.04 funktionierten diese Optionen nicht wirklich für mich. Ich persönlich wollte die Dateibearbeitung als Antwort posten, aber Jacob hat mich geschlagen :)
Sergiy Kolodyazhnyy