¿Cómo puedo desactivar rápidamente la tapa de espera en Ubuntu Unity 16.04?

16

¿Cuál es la forma más rápida de deshabilitar rápidamente la función de espera al cerrar la tapa? Me gusta mucho este comportamiento, pero especialmente al reproducir música, me gustaría cerrar la tapa sin poner mi máquina en modo de espera.

Sin embargo, no quiero deshabilitar esta función de forma permanente, sino desactivarla temporalmente hasta que termine de escuchar música, por ejemplo.

¿Quizás haya un indicador similar a la cafeína ?

ingrese la descripción de la imagen aquí

orschiro
fuente
¿Sus configuraciones son similares para CA y batería?
Jacob Vlijm
No hay tal indicador todavía. Hay formas, pero requieren acceso a la raíz sudocomo se muestra en esta publicación. askubuntu.com/q/15520/295286 . Aunque veré qué se puede hacer
Sergiy Kolodyazhnyy
¿Puedo preguntar qué tipo de versión de sistema está utilizando? 16.04
Sergiy Kolodyazhnyy
Estimados Jacob y Serg, ¡gracias por los primeros comentarios y soluciones! El guión de Jacob funciona muy bien. Sin embargo, sería fantástico si este fuera un pequeño indicador. Simplemente me gustan las GUI visuales. :-) La configuración es similar para CA y batería. Edité mi pregunta para dejar en claro que estoy usando Unity 16.04.
orschiro
Se puede / se hará. Sin embargo, la GUI llevará un poco más de tiempo.
Jacob Vlijm

Respuestas:

19

El siguiente script alternará la acción de cerrar la tapa entre "nada" y "suspender":

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

... Y notifique cuál es el estado establecido actualmente:

ingrese la descripción de la imagen aquí

Cómo utilizar

Simplemente:

  • Copie el script en un archivo vacío, guárdelo como toggle_lid.py
  • Agréguelo a una tecla de acceso directo: elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:

    python3 /path/to/toggle_lid.py
    

Explicación

Los comandos pueden recuperar el estado actual de la configuración de la acción de cierre de tapa

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

(en el poder), y

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

(en la batería)

El script lee el estado actual y establece lo contrario ('suspender' / 'nada') con el comando:

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

Opcionalmente (adicionalmente)

Opcional / adicionalmente, puede ejecutar un indicador como detector para mostrar cuál es el estado actual de la configuración de la tapa. Mostrará:

ingrese la descripción de la imagen aquí

... en el panel, si se evitará la suspensión al cerrar la tapa, se mostrará una gris si no.

ingrese la descripción de la imagen aquí

La secuencia de comandos

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

Cómo utilizar

  1. Copie el script anterior en un archivo vacío, guárdelo como show_state.py
  2. Copie los dos íconos a continuación (haga clic con el botón derecho -> guardar como) y guárdelos en el mismo directorio show_proc.pyy con el nombre exacto que se indica a continuación

    green.png

    ingrese la descripción de la imagen aquí

    nocolor.png

    ingrese la descripción de la imagen aquí

  3. Ahora prueba ejecutada show_state.pypor el comando:

    python3 /path/to/show_state.py
    

    y cambie el estado actual presionando el acceso directo que configuró en la primera sección de esta respuesta.

  4. Si todo funciona bien, agregue lo siguiente a las aplicaciones de inicio:

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

Nota

El detector-indicador anterior es una versión editada de esta respuesta . Simplemente cambiando la prueba en la función runs()(y opcionalmente los iconos del panel correspondientes), puede usarla para mostrar el estado de cualquier cosa que sea Trueo False.

Jacob Vlijm
fuente
Excelente solución con el indicador! Una pregunta: ¿Por qué decidiste un ícono transparente ?
orschiro
@orschiro Considero (ed) el ste donde se suspenderá el cierre de la tapa como la situación predeterminada . El verde como una indicación de que puede cerrar la tapa sin acción (es). Sin embargo, podría ser cualquier ícono. Sugerencias?
Jacob Vlijm
¿Tal vez como el verde pero en gris desvanecido? Es un poco irritante ver un espacio vacío en la barra indicadora debido a la transparencia del icono.
orschiro
@orschiro jaja, ahora veo lo que quieres decir :). editado
Jacob Vlijm
5

Otra opción sería cambiar de "Suspender" a "No hacer nada" en la configuración de Ubuntu - Potencia:

Configuración de Ubuntu - Energía

PD: Esto no proporciona un indicador en el área de notificaciones, pero es más simple que crear un script para nuevos usuarios.

PPS: en esta captura de pantalla, el UPS es para Cable Modem + Sony Android TV, no para la computadora portátil que tiene batería ... HAHA.

WinEunuuchs2Unix
fuente
Eh, ok De forma manual, toma unos pocos clics aquí y allá. Pero bastante decente.
Sergiy Kolodyazhnyy
@Serg En realidad me gusta el guión publicado por Jacob. Probablemente jugaré con él algún día después de hacer Ubuntu 16.04 / Kernel 4.7.2 más estable en mi sistema. De hecho, mi suspensión al cerrar la tapa nunca funcionó desde la caja de actualización de 14.04 a 16.04 ... tuve que configurar un parámetro en systemd que asume que cuando la tapa está cerrada, desea que el televisor permanezca activo y simplemente desea atenuar la pantalla de la computadora portátil. A simple vista, ¡también debería haber publicado instrucciones para eso!
WinEunuuchs2Unix
Sí, antes del 16.04 esas opciones realmente no me funcionaron. Yo personalmente quería publicar el archivo de edición como respuesta, pero Jacob me ha golpeado a ella :)
Sergiy Kolodyazhnyy