Як можна швидко відключити кришку очікування в Ubuntu Unity 16.04?


16

Який найшвидший спосіб швидко відключити функцію очікування при закриванні кришки? Мені дуже подобається така поведінка, але особливо під час відтворення музики я хотів би закрити кришку, не переключаючи машину в режим очікування.

Однак я не хочу остаточно відключати цю функцію, а просто тимчасово вимикаю її, доки, наприклад, не закінчу прослуховування музики.

Можливо, є показник, подібний до кофеїну ?

введіть тут опис зображення


Чи схожі ваші налаштування для змінного струму та акумулятора?
Яків Влійм

Такого показника ще немає. Є способи, але для них потрібен кореневий доступ, sudoяк показано в цій публікації. askubuntu.com/q/15520/295286 . Я побачу, що можна зробити
Сергій Колодяжний,

Чи можу я запитати, яку версію системи ви використовуєте? 16.04
Сергій Колодяжний

Шановні Якоб і Серг, дякую за перші коментарі та рішення! Якоб сценарій чудово працює. Було б фантастично, якби це був невеликий показник, хоча. Мені просто подобаються візуальні графічні інтерфейси. :-) Налаштування подібні для змінного струму та акумулятора. Я відредагував своє запитання, щоб зрозуміти, що я використовую Unity 16.04.
orschiro

Можна / буде зроблено. GUI, однак, займе трохи більше часу.
Яків Влійм

Відповіді:


19

Сценарій нижче буде перемикати дію закритої кришки між "нічого" та "призупинити":

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

(на батареї)

Сценарій читає поточний стан і встановлює протилежне ("призупинити" / "нічого") командою:

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()(і необов'язково відповідно до значків панелі), ви можете використовувати його для показу стану будь-якого, що є Trueабо False.


Відмінне рішення з індикатором! Одне запитання: чому ви вирішили отримати прозорий значок ?
orschiro

@orschiro Я вважаю (редакцією) сті, де закриття кришки зупиниться як ситуація за замовчуванням . Зелений як вказівка ​​ви можете закрити кришку без дій. Однак це може бути будь-яка ікона. Пропозиції?
Яків Влійм

Можливо, як зелений, але в бледно-сірому? Злегка дратує бачити порожнє місце на індикаторній панелі через прозорість значка.
orschiro

@orschiro ха-ха, зараз я бачу, що ти маєш на увазі :). відредаговано.
Яків Влійм

5

Іншим варіантом буде зміна з "Призупинити" на "Не робити нічого" в налаштуваннях Ubuntu - Power:

Налаштування Ubuntu - живлення

PS: Це не забезпечує показника в області сповіщень, але простіше, ніж створення сценарію для нових користувачів.

PPS: На цьому знімку екрана UPS призначений для кабельного модему + Sony Android TV, а не ноутбука, який має батарею ... HAHA.


Е, гаразд. Уручну, тут і там проводяться кілька клацань. Але досить пристойний.
Сергій Колодяжний

@Serg Мені справді подобається сценарій, розміщений Яковом. Ймовірно, з нею пограють через день після того, як я стану Ubuntu 16.04 / Kernel 4.7.2 стабільнішим у своїй системі. Дійсно, моє призупинення закриття кришки ніколи не виходило з вікна оновлення 14.04 - 16.04 ... довелося встановити параметр у systemd, який передбачає, що коли кришка закрита, ви хочете, щоб телевізор залишався активним і просто хотіли затьмарити екран ноутбука. Заднім поглядом я також повинен був розмістити інструкції до цього!
WinEunuuchs2Unix

Так, до 16.04 ці варіанти не дуже працювали для мене. Я особисто хотів опублікувати редагування файлів як відповідь, але Яків побив мене до цього :)
Сергій Колодяжний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.