
Ubuntu 16.04をUnityで動かすには
- ノートパソコンを5分間放置したら画面をオフにする
画面をオフにして 1 分間操作しないと、画面がロックされます。
ノートパソコンの蓋を閉じたときに、すぐに画面をロックするのではなく、蓋がまだ開いているかのように動作し、5 + 1 分後 (または同様の時間) にロックします。
でシステム設定 → 明るさとロック設定されている場合ロックに設定しON、適切な時間 (1 分) を設定すると、非アクティブのために画面がオフになった後、それに応じて画面がロックされます。ただし、蓋を閉じるとすぐに画面がロックされるため、これは望ましくありません。
に設定すると、OFF蓋を閉じても画面はロックされませんが、非アクティブのために画面をオフにした後もロック解除されたままになります。
すでに dconf で両方の「lid-close-actions」を「nothing」に設定しています。
$ gsettings get org.gnome.settings-daemon.plugins.power lid-close-ac-action
'nothing'
$ gsettings get org.gnome.settings-daemon.plugins.power lid-close-battery-action
'nothing'
蓋の位置に関係なく、ユーザーが一定時間操作を行わなかった場合にのみ Ubuntu で画面をロックするにはどうすればよいでしょうか?
答え1
以下のバックグラウンドスクリプトは、あなたが説明したとおりに動作します。
- x秒後に画面をオフにする
- y秒後に画面をロックする
スクリプト
#!/usr/bin/env python3
import subprocess
import time
# set screen off after x seconds
off = 300
# lock screen after x seconds
lock = 360
# check idle every x seconds
res = 3
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8").strip()
def test(t, threshold):
return int(t)/1000 < threshold
testoff1 = True
testlock1 = True
t1 = 0
while True:
time.sleep(res)
t2 = get("xprintidle")
testoff2 = test(t2, off); testlock2 = test(t2, lock)
if (testoff2, testoff1) == (False, True):
subprocess.Popen(["xset", "dpms", "force", "off"])
if (testlock2, testlock1) == (False, True):
subprocess.Popen(["gnome-screensaver-command", "-l"])
testoff1 = testoff2; testlock1 = testlock2
使い方
あなたが言及したように、既存の蓋のアクションをオフにする必要があります。
gsettings set org.gnome.settings-daemon.plugins.power lid-close-ac-action 'nothing'
そして:
gsettings set org.gnome.settings-daemon.plugins.power lid-close-battery-action 'nothing'
さらに:
gsettings set org.gnome.desktop.screensaver lock-enabled false
そして
gsettings set org.gnome.desktop.session idle-delay 0
今では私たち自身の手続きを管理するようになったからです。
それから:
スクリプトは
xprintidle
、アイドル時間をチェックするために を使用しますsudo apt-get install xprintidle
- スクリプトを空のファイルにコピーし、
set_times.py
スクリプトのヘッド セクションで、画面をオフにするアイドル時間 (秒単位) を設定します。
# set screen off after x seconds off = 300
画面をロックするまでの時間:
# lock screen after x seconds lock = 360
これらの時間はそれぞれ独立して設定されており、好きな順序で設定できます(最初にロックしてから電源をオフにするか、その逆)。
あなたできる時間の「解像度」を設定します。これは、アイドル時間をチェックする頻度です (設定された時間は次のように切り上げられます):
# check idle every x seconds res = 3
でも、
テスト実行します:
python3 /path/to/set_times.py
すべて正常に動作する場合は、スタートアップ アプリケーションに追加します: Dash > スタートアップ アプリケーション > 追加。次のコマンドを追加します:
python3 /path/to/set_times.py
コンセプトの説明
- このコマンドは
xprintidle
、現在のアイドル時間(マウスやキーボードからの入力がない)を返します。 - 次にスクリプトは、時間を設定するより小さい定義された閾値、数秒前の状態と比較します。
状態の変化 (True --> False) があった場合、任意のアクションを実行できます。これは、画面をオフにするスイッチの両方に対して実行され、次を実行します。
xset dpms force off
ロック画面で実行中:
gnome-screensaver-command -l
ノート
もちろん、電源を切って画面をロックする時間を作ることもできます議論スクリプトを実行するには:
#!/usr/bin/env python3 import subprocess import time import sys off = int(sys.argv[1]) if len(sys.argv) > 1 else 300 lock = int(sys.argv[2]) if len(sys.argv) > 2 else off + 60 # check idle every x seconds res = int(sys.argv[3]) if len(sys.argv) > 3 else 5 def get(cmd): return subprocess.check_output(cmd).decode("utf-8").strip() def test(t, threshold): return int(t)/1000 < threshold testoff1 = True testlock1 = True t1 = 0 while True: time.sleep(res) t2 = get("xprintidle") testoff2 = test(t2, off); testlock2 = test(t2, lock) if (testoff2, testoff1) == (False, True): subprocess.Popen(["xset", "dpms", "force", "off"]) if (testlock2, testlock1) == (False, True): subprocess.Popen(["gnome-screensaver-command", "-l"]) testoff1 = testoff2; testlock1 = testlock2
次に実行します:
python3 /path/to/set_times.py 300 360
5 分後に画面がオフになり、6 分後に画面がロックされます。
スクリプトの追加負担はゼロです。