Jak mogę szybko wyłączyć wyłączanie pokrywy gotowości w Ubuntu Unity 16.04?

16

Jaki jest najszybszy sposób szybkiego wyłączenia funkcji gotowości podczas zamykania pokrywy? Bardzo podoba mi się to zachowanie, ale szczególnie podczas odtwarzania muzyki chciałbym zamknąć pokrywę bez przełączania urządzenia w tryb gotowości.

Nie chcę jednak na stałe wyłączać tej funkcji, ale tymczasowo ją wyłączać, aż na przykład skończę słuchać muzyki.

Może istnieje wskaźnik podobny do kofeiny ?

wprowadź opis zdjęcia tutaj

orschiro
źródło
Czy twoje ustawienia są podobne dla ac i baterii?
Jacob Vlijm
Nie ma jeszcze takiego wskaźnika. Istnieją sposoby, ale wymagają dostępu do konta root, sudojak pokazano w tym poście. askubuntu.com/q/15520/295286 . Zobaczę, co da się zrobić
Sergiy Kolodyazhnyy
Czy mogę zapytać, jakiej wersji systemu używasz? 16.04
Sergiy Kolodyazhnyy
Drogi Jakubie i Sergie, dziękuję za pierwsze komentarze i rozwiązania! Skrypt Jakuba działa świetnie. Byłoby jednak fantastycznie, gdyby był to mały wskaźnik. Po prostu lubię wizualne GUI. :-) Ustawienia są podobne dla ac i baterii. Zredagowałem swoje pytanie, aby wyjaśnić, że korzystam z Unity 16.04.
orschiro
Można / będzie zrobione. GUI zajmie jednak trochę więcej czasu.
Jacob Vlijm,

Odpowiedzi:

19

Poniższy skrypt przełącza akcję zamykania między „nic” i „zawieszenie”:

#!/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])

... i powiadom jaki jest aktualnie ustawiony stan:

wprowadź opis zdjęcia tutaj

Jak używać

Po prostu:

  • Skopiuj skrypt do pustego pliku i zapisz go jako toggle_lid.py
  • Dodaj go do klawisza skrótu: wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:

    python3 /path/to/toggle_lid.py
    

Wyjaśnienie

Bieżący stan ustawienia akcji zamykania pokrywy można odczytać za pomocą polecenia

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

(przy zasilaniu) i

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

(na baterii)

Skrypt odczytuje bieżący stan i ustawia coś przeciwnego („zawiesić” / „nic”) za pomocą polecenia:

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

Opcjonalnie (dodatkowo)

Opcjonalnie / dodatkowo możesz uruchomić wskaźnik jako wykrywacz, aby pokazać aktualny stan ustawienia pokrywki. Pokaże:

wprowadź opis zdjęcia tutaj

... w panelu, jeśli zawieszenie zostanie uniemożliwione po zamknięciu pokrywy, pokaże szary, jeśli nie.

wprowadź opis zdjęcia tutaj

Scenariusz

#!/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()

Jak używać

  1. Skopiuj powyższy skrypt do pustego pliku i zapisz go jako show_state.py
  2. Skopiuj obie ikony poniżej (kliknij prawym przyciskiem myszy -> zapisz jako) i zapisz je w jednym i tym samym katalogu jako show_proc.py, i dokładnie nazwane tak, jak wskazano poniżej

    green.png

    wprowadź opis zdjęcia tutaj

    nocolor.png

    wprowadź opis zdjęcia tutaj

  3. Teraz uruchom show_state.py- polecenie:

    python3 /path/to/show_state.py
    

    i zmień bieżący stan, naciskając skrót, który ustawiłeś pierwszą część tej odpowiedzi.

  4. Jeśli wszystko działa poprawnie, dodaj następujące aplikacje startowe:

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

Uwaga

Powyższy wskaźnik detektora jest zredagowaną wersją tej odpowiedzi . Po prostu zmieniając test w funkcji runs()(i opcjonalnie odpowiednie ikony panelu), możesz go użyć, aby pokazać stan wszystkiego , co jest Truelub False.

Jacob Vlijm
źródło
Doskonałe rozwiązanie ze wskaźnikiem! Jedno pytanie: dlaczego zdecydowałeś się na przezroczystą ikonę ?
orschiro
@orschiro Uważam (ed) ste, gdzie zamknięcie pokrywy zostanie zawieszone za sytuację domyślną . Zielony jako wskazówka, że możesz zamknąć pokrywę bez żadnych działań. Może to jednak być dowolna ikona. Propozycje?
Jacob Vlijm,
Może jak zielony, ale w odcieniu szarości? To trochę irytujące widzieć puste miejsce na pasku wskaźników ze względu na przezroczystość ikony.
orschiro
@orschiro haha, teraz rozumiem, co masz na myśli :). edytowane.
Jacob Vlijm,
5

Inną opcją może być zmiana z „Zawieś” na „Nie rób nic” w Ustawieniach Ubuntu - Moc:

Ustawienia Ubuntu - Moc

PS: Nie zapewnia to wskaźnika w obszarze powiadomień, ale jest prostsze niż tworzenie skryptu dla nowych użytkowników.

PPS: W tej migawce ekranu zasilacz UPS jest przeznaczony dla modemu kablowego + telewizora Sony Android TV, a nie laptopa z baterią ... HAHA.

WinEunuuchs2Unix
źródło
Eh, Ok. Sposób ręczny, kilka kliknięć tu i tam. Ale całkiem przyzwoite.
Sergiy Kolodyazhnyy
@Serg Naprawdę podoba mi się skrypt opublikowany przez Jacoba. Prawdopodobnie będę z nim grał pewnego dnia po tym, jak poprawię stabilność Ubuntu 16.04 / Kernel 4.7.2 w moim systemie. Rzeczywiście, moje zawieszenie przy zamykaniu pokrywy nigdy nie zadziałało nawet z pola aktualizacji 14.04 do 16.04 ... musiałem ustawić parametr w systemie, który zakłada, że ​​kiedy pokrywa jest zamknięta, chcesz, aby telewizor pozostawał aktywny i po prostu chciał przyciemnić ekran laptopa. Z tyłu powinienem też zamieścić instrukcje!
WinEunuuchs2Unix
Tak, przed 16.04 te opcje tak naprawdę nie działały dla mnie. Ja osobiście chciałem opublikować edycję pliku jako odpowiedź, ale Jacob mnie pobił :)
Sergiy Kolodyazhnyy