Под управлением Ubuntu 16.04 с Единицей, я хочу это
Спустя 1 минуту после выключения экрана для неактивности, заблокируйте экран.
когда я закрываю крышку ноутбука, сразу не блокируйте экран, но действуйте как то, если крышка была все еще открыта и блокировка после 5+1 минуты (или подобна).
В Параметрах настройки системы → Яркость и Блокировка, если установленная Блокировка к НА и настраивают подходящее время (1 минута), она блокирует экран соответственно после того, как она была выключена для неактивности. Однако это также immeidately блокирует экран при закрытии крышки, которую я не хочу.
Установка его к ПРОЧЬ заставляет его не заблокировать экран при закрытии крышки, но также и оставляет разблокированным после выключения экрана для неактивности.
Я ни на "что" уже установил оба "близких действия крышки" в dconf:
$ 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
так как мы теперь заботимся о наших собственных процедурах.
затем:
Использование сценария 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
Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:
python3 /path/to/set_times.py
xprintidle
возвращает текущее время простоя (никакой вход от мыши или клавиатуры)Если существует изменение в состоянии (Верный-> Ложь), любые меры могут быть приняты. Это сделано для обоих, выключают экран, работая:
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
выключит экран после пяти минут, заблокирует экран после шесть.
Дополнительная нагрузка сценария является нулем.