Ubuntu 16.04をUnityで実行します。
非アクティブのために画面をオフにしてから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で画面をロックするにはどうすればよいですか?
以下のバックグラウンドスクリプトは、説明したとおりに正確に機能します。
#!/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
私たちは今、私たち自身の手順を大事にしているからです。
then:
スクリプトはxprintidle
を使用して、アイドル時間を確認します
Sudo apt-get install xprintidle
set_times.py
として保存しますスクリプトのheadセクションで、画面をオフにするアイドル時間(秒単位)を設定します。
# set screen off after x seconds
off = 300
そして、画面をロックする時間:
# lock screen after x seconds
lock = 360
これらの時間は互いに独立して設定されます。両方を好きな順序で設定できます(最初にロックしてから、スイッチを切る、またはその逆)
あなたはcan時間「解像度」、アイドル時間をチェックする頻度を設定します(したがって、設定時間は四捨五入されます):
# check idle every x seconds
res = 3
あなたもそうかもしれない
テスト実行:
python3 /path/to/set_times.py
すべてが正常に機能する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加コマンドを追加します。
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分後に画面をロックします。
スクリプトの追加の負担はゼロです。