Comment désactiver rapidement le couvercle de veille dans Ubuntu Unity 16.04?

16

Quelle est la manière la plus rapide de désactiver rapidement la fonction de veille lors de la fermeture du couvercle? J'aime beaucoup ce comportement mais surtout quand je joue de la musique, je voudrais fermer mon couvercle sans mettre ma machine en veille.

Cependant, je ne souhaite pas désactiver définitivement cette fonction, mais la désactiver temporairement jusqu'à ce que j'aie fini d'écouter de la musique, par exemple.

Peut-être existe-t-il un indicateur similaire à la caféine ?

entrez la description de l'image ici

orschiro
la source
Vos paramètres sont-ils similaires pour le courant alternatif et la batterie?
Jacob Vlijm
Il n'y a pas encore un tel indicateur. Il existe des moyens, mais ils nécessitent un accès root avec sudocomme indiqué dans ce post. askubuntu.com/q/15520/295286 . Je vais voir ce qui peut être fait
Sergiy Kolodyazhnyy
Puis-je vous demander quel type de version du système vous utilisez? 16.04
Sergiy Kolodyazhnyy
Cher Jacob et Serg, merci pour les premiers commentaires et solutions! Le script de Jacob fonctionne très bien. Ce serait fantastique si c'était un petit indicateur. J'aime juste les interfaces graphiques visuelles. :-) Les paramètres sont similaires pour le courant alternatif et la batterie. J'ai modifié ma question pour indiquer clairement que j'utilise Unity 16.04.
orschiro
Peut / sera fait. L'interface graphique prendra cependant un peu plus de temps.
Jacob Vlijm

Réponses:

19

Le script ci-dessous fera basculer l'action de fermeture du couvercle entre "rien" et "suspendre":

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

... Et notifiez quel est l'état actuellement défini:

entrez la description de l'image ici

Comment utiliser

Simplement:

  • Copiez le script dans un fichier vide, enregistrez-le sous toggle_lid.py
  • Ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:

    python3 /path/to/toggle_lid.py
    

Explication

L'état actuel du paramètre d'action de fermeture du couvercle peut être récupéré par la ou les commandes

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

(sous tension), et

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

(sur la batterie)

Le script lit l'état actuel et définit le contraire («suspendre» / «rien») avec la commande:

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

En option (en plus)

En option / en plus, vous pouvez exécuter un indicateur en tant que détecteur pour montrer quel est l'état actuel du réglage du couvercle. Il montrera:

entrez la description de l'image ici

... dans le panneau, si la suspension sera empêchée lors de la fermeture du couvercle, il affichera un gris sinon.

entrez la description de l'image ici

Le script

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

Comment utiliser

  1. Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous show_state.py
  2. Copiez les deux icônes ci-dessous (clic droit -> enregistrer sous), et enregistrez-les dans un seul et même répertoire que show_proc.py, et exactement nommé comme indiqué ci-dessous

    green.png

    entrez la description de l'image ici

    nocolor.png

    entrez la description de l'image ici

  3. Maintenant testée show_state.pypar la commande:

    python3 /path/to/show_state.py
    

    et changer l'état actuel en appuyant sur le raccourci que vous définissez la première section de cette réponse.

  4. Si tout fonctionne correctement, ajoutez les éléments suivants aux applications de démarrage:

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

Remarque

L'indicateur-détecteur ci-dessus est une version éditée de cette réponse . En changeant simplement le test dans la fonction runs()(et éventuellement les icônes de panneau correspondantes), vous pouvez l'utiliser pour afficher l'état de tout ce qui est Trueou False.

Jacob Vlijm
la source
Excellente solution avec l'indicateur! Une question: pourquoi avez-vous choisi une icône transparente ?
orschiro
@orschiro Je considère (ed) le ste où la fermeture du couvercle sera suspendue comme situation par défaut . Le vert à titre indicatif, vous pouvez fermer le couvercle sans action (s). Il peut cependant s'agir de n'importe quelle icône. Suggestions?
Jacob Vlijm
Peut-être comme le vert mais en gris délavé? Il est légèrement irritant de voir un espace vide dans la barre d'indicateur en raison de la transparence de l'icône.
orschiro
@orschiro haha, maintenant je vois ce que tu veux dire :). édité.
Jacob Vlijm
5

Une autre option serait de passer de "Suspendre" à "Ne rien faire" dans les paramètres Ubuntu - Puissance:

Paramètres Ubuntu - Alimentation

PS: cela ne fournit pas d'indicateur dans la zone des notifications mais est plus simple que de créer un script pour les nouveaux utilisateurs.

PPS: Dans cet instantané d'écran, l'onduleur est pour Cable Modem + Sony Android TV, pas pour l'ordinateur portable qui a une batterie ... HAHA.

WinEunuuchs2Unix
la source
Eh, d'accord. Manuelle, prend quelques clics ici et là. Mais assez décent.
Sergiy Kolodyazhnyy
@Serg J'aime vraiment le script publié par Jacob. Jouera probablement avec lui un jour après avoir rendu Ubuntu 16.04 / Kernel 4.7.2 plus stable sur mon système. En effet, ma suspension sur la fermeture du couvercle n'a même jamais fonctionné de la boîte de mise à niveau 14.04 à 16.04 ... a dû configurer un paramètre dans systemd qui suppose que lorsque le couvercle est fermé, vous voulez que le téléviseur reste actif et que vous souhaitiez simplement assombrir l'écran de l'ordinateur portable. Avec le recul, j'aurais dû publier des instructions pour cela aussi!
WinEunuuchs2Unix
Oui, avant le 16.04, ces options ne fonctionnaient pas vraiment pour moi.
Personnellement,