Ubuntu Unity 16.04でスタンバイリッドをすばやく無効にするにはどうすればよいですか?


16

蓋を閉じるときにスタンバイ機能をすばやく無効にする最も簡単な方法は何ですか?私はこの動作が非常に好きですが、特に音楽を再生するときは、マシンをスタンバイに切り替えることなく蓋を閉じたいと思います。

ただし、この機能を永久に無効にするのではなく、たとえば音楽を聴き終わるまで一時的に無効にするだけです。

たぶん、カフェインに似たインジケータがありますか?

ここに画像の説明を入力してください


ACとバッテリーの設定は似ていますか?
ジェイコブVlijm

そのような指標はまだありません。方法はありますがsudo、この投稿に示されているように、rootアクセスが必要です。 askubuntu.com/q/15520/295286。しかし、何ができるかを見ていきます
セルギーコロディアズニー

使用しているシステムのバージョンは何ですか?16.04
Sergiy Kolodyazhnyy

親愛なるジェイコブとセルグ、最初のコメントと解決策に感謝します!ジェイコブのスクリプトは素晴らしい作品です。ただし、これが小さな指標である場合は素晴らしいでしょう。視覚的なGUIが好きです。:-)設定はACとバッテリーで似ています。Unity 16.04を使用していることを明確にするために質問を編集しました。
-orschiro

できます/できます。ただし、GUIには少し時間がかかります。
ジェイコブVlijm

回答:


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. 下の両方のアイコンをコピー(右クリック-> 名前を付けて保存)し、それらを1つの同じディレクトリに保存します。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"
    

注意

上記のDetector-Indicatorは、この回答の編集バージョンです。単に機能でテストを変更することにより、runs()(およびオプションによるパネルのアイコン)、あなたはの状態を示すためにそれを使用することができますであるTrueかをFalse


インジケーターを使用した優れたソリューション!1つの質問:なぜ透明アイコンを選択したのですか?
orschiro

@orschiroふたが閉じられる状態をデフォルトの状況として考えました。緑色のアイコンは、アクションなしで蓋を閉めることができることを示しています。ただし、どのアイコンでもかまいません。提案?
ジェイコブVlijm

緑色に似ているかもしれませんが、灰色がかっていますか?アイコンの透明性のため、インジケータバーに空のスペースが見えるのは少しイライラします。
orschiro

@orschiro haha​​、今、私はあなたの意味を見る:)。編集しました。
ジェイコブVlijm

5

別のオプションは、Ubuntu設定で「サスペンド」から「何もしない」に変更することです-電源:

Ubuntuの設定-電源

PS:これは通知領域にインジケーターを提供しませんが、新しいユーザー用のスクリプトを作成するよりも簡単です。

PPS:この画面のスナップショットでは、UPSはケーブルモデム+ Sony Android TV用であり、バッテリーを搭載したラップトップ用ではありません... HAHA。


ええ、わかりました。手動で、あちこちで数回クリックします。しかし、かなりまともです。
セルギーコロディアズニー

@Serg私は実際にジェイコブが投稿したスクリプトが好きです。おそらく、Ubuntu 16.04 / Kernel 4.7.2を私のシステムでより安定させた後、おそらくそれで遊ぶでしょう。実際、14.04から16.04へのアップグレードボックスでは、ふたを閉じるときのサスペンドは機能しませんでした...ふたを閉じたときにテレビをアクティブに保ち、ラップトップ画面を暗くしたいという前提でsystemdにパラメーターを設定する必要がありました。後から、私もそのための指示を掲載すべきでした!
WinEunuuchs2Unix

ええ、16.04以前は、これらのオプションは実際には機能しませんでした。私は個人的にファイル編集を回答として投稿したかったのですが、ジェイコブは私にそれを
beat打
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.