Como posso desativar rapidamente a tampa do modo de espera no Ubuntu Unity 16.04?

16

Qual é a maneira mais rápida de desativar rapidamente o recurso de espera ao fechar a tampa? Eu gosto muito desse comportamento, mas principalmente ao tocar música, gostaria de fechar a tampa sem mudar a máquina para o modo de espera.

No entanto, não desejo desativar permanentemente esse recurso, mas apenas desativá-lo temporariamente até que eu termine de ouvir música, por exemplo.

Talvez haja um indicador semelhante à cafeína ?

insira a descrição da imagem aqui

orschiro
fonte
Suas configurações são semelhantes para corrente alternada e bateria?
Jacob Vlijm
Ainda não existe esse indicador. Existem várias maneiras, mas elas exigem acesso root sudocomo mostrado nesta postagem. askubuntu.com/q/15520/295286 . Mas vou ver o que pode ser feito #
Sergiy Kolodyazhnyy
Posso perguntar, que tipo de versão do sistema você está usando? 16.04
Sergiy Kolodyazhnyy
Caros Jacob e Serg, obrigado pelos primeiros comentários e soluções! O roteiro de Jacob funciona muito bem. Seria fantástico se este fosse um pequeno indicador. Eu apenas gosto de GUIs visuais. :-) As configurações são semelhantes para corrente alternada e bateria. Editei minha pergunta para deixar claro que estou usando o Unity 16.04.
precisa saber é o seguinte
Pode / será feito. A GUI, no entanto, levará um pouco mais de tempo.
Jacob Vlijm

Respostas:

19

O script abaixo alternará a ação de fechar a tampa entre "nada" e "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])

... E notifique qual é o estado atualmente definido:

insira a descrição da imagem aqui

Como usar

Simplesmente:

  • Copie o script em um arquivo vazio, salve-o como toggle_lid.py
  • Adicione-o a uma tecla de atalho: escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando:

    python3 /path/to/toggle_lid.py
    

Explicação

O estado atual da configuração da ação de fechar a tampa pode ser recuperado pelo (s) comando (s)

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

(ligado), e

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

(com bateria)

O script lê o estado atual e define o oposto ('suspend' / 'nothing') com o comando:

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

Opcionalmente (adicionalmente)

Opcionalmente / adicionalmente, você pode executar um indicador como detector para mostrar qual é o estado atual da configuração da tampa. Ele mostrará:

insira a descrição da imagem aqui

... no painel, se a suspensão for impedida ao fechar a tampa, mostrará uma cinza se não.

insira a descrição da imagem aqui

O 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()

Como usar

  1. Copie o script acima em um arquivo vazio, salve-o como show_state.py
  2. Copie os dois ícones abaixo (clique com o botão direito do mouse -> salvar como) e salve-os no mesmo diretório show_proc.pye exatamente com o nome indicado abaixo

    green.png

    insira a descrição da imagem aqui

    nocolor.png

    insira a descrição da imagem aqui

  3. Agora teste-executado show_state.pypelo comando:

    python3 /path/to/show_state.py
    

    e altere o estado atual pressionando o atalho para definir a primeira seção desta resposta.

  4. Se tudo funcionar bem, adicione o seguinte aos aplicativos de inicialização:

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

Nota

O indicador detector acima é uma versão editada desta resposta . Simplesmente alterando o teste na função runs()(e opcionalmente nos ícones do painel), você pode usá-lo para mostrar o estado de qualquer coisa que seja Trueou False.

Jacob Vlijm
fonte
Excelente solução com o indicador! Uma pergunta: por que você decidiu por um ícone transparente ?
Orschiro
@orschiro Considero (ed) o ste em que o fechamento da tampa será suspenso como a situação padrão . O verde como indicação, você pode fechar a tampa sem ação (s). No entanto, pode haver qualquer ícone. Sugestões?
Jacob Vlijm
Talvez como o verde, mas cinza desbotado? É um pouco irritante ver um espaço vazio na barra de indicadores devido à transparência do ícone.
Orschiro
@orschiro haha, agora entendo o que você quer dizer :). editado.
Jacob Vlijm
5

Outra opção seria mudar de "Suspender" para "Não fazer nada" nas configurações do Ubuntu - Power:

Configurações do Ubuntu - Poder

PS: isso não fornece um indicador na área de notificações, mas é mais simples do que criar um script para novos usuários.

PPS: Nesta captura de tela, o no-break é para Cable Modem + Sony Android TV, não para o laptop que possui bateria ... HAHA.

WinEunuuchs2Unix
fonte
Ok. Maneira manual, leva alguns cliques aqui e ali. Mas bastante decente.
Sergiy Kolodyazhnyy
@Erg Eu realmente gosto do script postado por Jacob. Provavelmente vou jogar com ele algum dia depois que eu tornar o Ubuntu 16.04 / Kernel 4.7.2 mais estável no meu sistema. Na verdade, minha suspensão na tampa nunca funcionou na caixa de atualização 14.04 para 16.04 ... tinha que configurar um parâmetro no systemd que pressupõe que, quando a tampa estiver fechada, você deseja que a TV permaneça ativa e simplesmente ofereça a tela do laptop. Em retrospectiva, eu deveria ter postado instruções para isso também!
WinEunuuchs2Unix
Sim, antes das 16.04, essas opções não funcionavam realmente para mim. Pessoalmente, eu queria postar a edição do arquivo como resposta, mas Jacob me venceu :) #
Sergiy Kolodyazhnyy