Bagaimana saya bisa dengan cepat menonaktifkan tutup siaga di Ubuntu Unity 16.04?

16

Apa cara tercepat untuk menonaktifkan fitur siaga saat menutup tutupnya? Saya sangat menyukai perilaku ini, tetapi terutama ketika memainkan musik, saya ingin menutup penutup saya tanpa mengubah mesin saya ke siaga.

Namun, saya tidak ingin menonaktifkan fitur ini secara permanen tetapi hanya mematikannya sementara sampai saya selesai mendengarkan musik, misalnya.

Mungkin ada indikator yang mirip dengan Kafein ?

masukkan deskripsi gambar di sini

orschiro
sumber
Apakah pengaturan Anda serupa untuk ac dan baterai?
Jacob Vlijm
Belum ada indikator seperti itu. Ada cara, tapi mereka membutuhkan akses root dengan sudoseperti yang ditunjukkan dalam posting ini. askubuntu.com/q/15520/295286 . Saya akan melihat apa yang bisa dilakukan
Sergiy Kolodyazhnyy
Bolehkah saya bertanya, versi sistem seperti apa yang Anda gunakan? 16.04
Sergiy Kolodyazhnyy
Dear Jacob and Serg, terima kasih atas komentar dan solusi pertama! Tulisan Yakub sangat bagus. Akan luar biasa jika ini adalah indikator kecil. Saya hanya suka GUI visual. :-) Pengaturan serupa untuk ac dan baterai. Saya mengedit pertanyaan saya untuk menjelaskan bahwa saya menggunakan Unity 16.04.
orschiro
Dapat / akan dilakukan. Namun GUI akan memakan waktu sedikit lebih lama.
Jacob Vlijm

Jawaban:

19

Script di bawah ini akan mengaktifkan aksi tutup antara "tidak ada" dan "ditangguhkan":

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

... Dan beri tahu kondisi yang saat ini ditetapkan:

masukkan deskripsi gambar di sini

Cara Penggunaan

Secara sederhana:

  • Salin skrip ke file kosong, simpan sebagai toggle_lid.py
  • Tambahkan ke tombol cara pintas: pilih: Pengaturan Sistem> "Keyboard"> "Pintasan"> "Pintasan Khusus". Klik "+" dan tambahkan perintah:

    python3 /path/to/toggle_lid.py
    

Penjelasan

Keadaan saat ini dari pengaturan tindakan tutup dapat diambil dengan perintah (s)

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

(berkuasa), dan

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

(pada baterai)

Script membaca keadaan saat ini, dan mengatur yang sebaliknya ('menangguhkan' / 'tidak ada') dengan perintah:

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

Opsional (tambahan)

Secara opsional / tambahan, Anda dapat menjalankan indikator sebagai detektor untuk menunjukkan kondisi pengaturan tutup saat ini. Ini akan menunjukkan:

masukkan deskripsi gambar di sini

... di panel, jika penangguhan akan dicegah saat menutup tutupnya, itu akan menunjukkan yang abu-abu jika tidak.

masukkan deskripsi gambar di sini

Naskah

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

Cara Penggunaan

  1. Salin skrip di atas ke dalam file kosong, simpan sebagai show_state.py
  2. Salin kedua ikon di bawah ini (klik kanan -> simpan sebagai), dan simpan dalam satu dan direktori yang sama dengan show_proc.py, dan persis bernama seperti yang ditunjukkan di bawah ini

    green.png

    masukkan deskripsi gambar di sini

    nocolor.png

    masukkan deskripsi gambar di sini

  3. Sekarang uji coba show_state.pydengan perintah:

    python3 /path/to/show_state.py
    

    dan ubah status saat ini dengan menekan pintasan yang Anda atur pada bagian pertama dari jawaban ini.

  4. Jika semua berfungsi dengan baik, tambahkan yang berikut ke aplikasi startup:

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

Catatan

Indikator detektor di atas adalah versi yang diedit dari jawaban ini . Cukup dengan mengubah tes dalam fungsi runs()(dan opsional ikon panel yang sesuai), Anda dapat menggunakannya untuk menunjukkan keadaan apa pun yang Trueatau False.

Yakub Vlijm
sumber
Solusi luar biasa dengan indikator! Satu pertanyaan: Mengapa Anda memutuskan untuk ikon transparan ?
orschiro
@orschiro Saya menganggap (ed) ste di mana tutup-tutup akan ditangguhkan sebagai situasi default . Yang hijau sebagai indikasi Anda dapat menutup tutupnya tanpa tindakan. Namun itu bisa menjadi ikon apa pun. Saran?
Jacob Vlijm
Mungkin seperti yang hijau tetapi abu-abu pudar? Agak menyebalkan melihat ruang kosong di bilah indikator karena transparansi ikon.
orschiro
@orschiro haha, sekarang saya mengerti maksud Anda :). diedit.
Jacob Vlijm
5

Opsi lain akan berubah dari "Tangguhkan" menjadi "Jangan Lakukan" di Pengaturan Ubuntu - Power:

Pengaturan Ubuntu - Power

PS: Ini tidak memberikan indikator di area notifikasi tetapi lebih sederhana daripada membuat skrip untuk pengguna baru.

PPS: Dalam snapshot layar ini UPS untuk Cable Modem + Sony Android TV, bukan laptop yang memiliki baterai ... HAHA.

WinEunuuchs2Unix
sumber
Eh, baiklah. Cara manual, butuh beberapa klik di sana-sini. Tapi lumayan layak.
Sergiy Kolodyazhnyy
@Serg Saya benar-benar menyukai skrip yang diposting oleh Jacob. Mungkin akan bermain dengannya beberapa hari setelah saya membuat Ubuntu 16.04 / Kernel 4.7.2 lebih stabil di sistem saya. Memang penangguhan saya pada tutup tutup bahkan tidak pernah berhasil dari kotak upgrade 14,04 ke 16,04 ... harus menyiapkan parameter dalam systemd yang mengasumsikan ketika tutupnya ditutup Anda ingin TV tetap aktif dan hanya ingin meredupkan layar laptop. Di belakang saya harus memposting instruksi untuk itu juga!
WinEunuuchs2Unix
Ya, sebelum 16,04 opsi-opsi itu tidak benar-benar bekerja untuk saya. Saya pribadi ingin memposting pengeditan file sebagai jawaban, tetapi Yakub telah mengalahkan saya untuk itu :)
Sergiy Kolodyazhnyy