如何在Ubuntu Unity 16.04中快速禁用备用盖子?


16

关闭盖子时,快速禁用待机功能的最快方法是什么?我非常喜欢这种行为,但是特别是在播放音乐时,我想关闭机盖而不将机器切换到待机状态。

但是,我不想永久禁用此功能,而只是暂时将其关闭,直到我听完音乐为止。

也许有类似咖啡因的指标?

在此处输入图片说明


您的交流和电池设置是否相似?
雅各布·弗利姆

尚无此类指标。有很多方法,但是它们要求具有root访问权限,sudo如本文中所示。 askubuntu.com/q/15520/295286。我会看到有什么办法可以解决
Sergiy Kolodyazhnyy,2016年

请问您使用的是哪种系统版本?16.04
Sergiy Kolodyazhnyy

尊敬的Jacob和Serg,谢谢您的第一条评论和解决方案!雅各的剧本很棒。如果这只是一个小指标,那将是很棒的。我只是喜欢视觉GUI。:-)交流电和电池的设置相似。我编辑了问题以明确说明我正在使用Unity 16.04。
orschiro

可以/将要完成。但是,GUI将花费更长的时间。
雅各布·弗利姆

Answers:


19

下面的脚本将在“ nothing”和“ suspend”之间切换关闭动作:

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

...并通知当前设置的状态是什么:

在此处输入图片说明

如何使用

只是:

  • 将脚本复制到一个空文件中,另存为 toggle_lid.py
  • 将其添加到快捷键:选择:“系统设置”>“键盘”>“快捷方式”>“自定义快捷方式”。单击“ +”并添加命令:

    python3 /path/to/toggle_lid.py
    

说明

可以通过以下命令检索闭合动作设置的当前状态

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

(通电),并且

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

(电池)

该脚本读取当前状态,并使用以下命令设置相反的状态(“ suspend” /“ nothing”):

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

可选地(附加地)

可选地/附加地,您可以将指示器作为检测器运行,以显示盖设置的当前状态。它会显示:

在此处输入图片说明

...在面板上,如果可以防止在关闭盖子时悬挂,则如果没有,它将显示为灰色。

在此处输入图片说明

剧本

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

如何使用

  1. 将上面的脚本复制到一个空文件中,另存为 show_state.py
  2. 复制以下两个图标(右键单击->另存为),然后将它们保存在与相同的目录下show_proc.py,并按如下所示精确命名

    green.png

    在此处输入图片说明

    nocolor.png

    在此处输入图片说明

  3. 现在,show_state.py通过以下命令进行测试:

    python3 /path/to/show_state.py
    

    并通过设置此答案第一部分的快捷方式更改当前状态。

  4. 如果一切正常,请将以下内容添加到启动应用程序:

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

注意

上方的检测器指示器是该答案的编辑版本。只需在功能改变测试runs()(任选与根据面板图标),你可以用它来显示的状态什么TrueFalse


指示器的出色解决方案!一个问题:您为什么决定使用透明图标
orschiro

@orschiro我认为关闭盖子的Ste会因为 默认情况下,。绿色指示表示您无需采取任何行动即可合上盖子。它可以是任何图标。有什么建议吗?
雅各布·弗利姆

也许像绿色的,但渐渐变成灰色?由于图标的透明性,在指示器栏中看到空白会有些令人不快。
orschiro

@orschiro哈哈,现在我明白你的意思了:)。编辑。
雅各布·弗利姆

5

另一个选项将在Ubuntu设置-电源中从“挂起”更改为“什么都不做”:

Ubuntu设置-电源

PS:在通知区域中没有提供指示器,但是比为新用户创建脚本要简单。

PPS:在此屏幕快照中,UPS用于电缆调制解调器+ Sony Android TV,而不是用于带电池的笔记本电脑...哈哈。


嗯好 手动方式,需要在这里和那里单击几下。但是还算不错。
Sergiy Kolodyazhnyy

@Serg我实际上很喜欢Jacob的脚本。在使系统上的Ubuntu 16.04 / Kernel 4.7.2更稳定之后的某天,它可能会使用它。的确,我的盖子关闭暂停功能从来没有从14.04到16.04升级盒中解决过...必须在systemd中设置一个参数,该参数假定盖子关闭时您希望电视保持活动状态并且只是想使笔记本电脑的屏幕变暗。事后看来,我也应该为此发布说明!
WinEunuuchs2Unix

是的,在16.04之前,这些选项对我而言实际上并不起作用。我个人希望将文件编辑发布为答案,但Jacob击败了我:)
Sergiy Kolodyazhnyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.