Пароль требуется только при пробуждении из режима ожидания при приостановке на 10 минут

11

Я обычно хочу, чтобы мой ноутбук был заблокирован, когда он приостановлен, но не когда я просто приостановил его, потому что есть случай использования, в котором ввод моего пароля после того, как мой ноутбук проснулся от приостановки, является довольно громоздким. Хороший компромисс - запрашивать пароль для входа, только если ноутбук был заблокирован более 10 минут назад. Как мне это сделать?

Я использую Ubuntu 16.04 с Unity.

UTF-8,
источник
Нравится функция Android «Блокировка через x минут»?
YouAGitForNotUsingGit
@AndroidDev В значительной степени да.
UTF-8

Ответы:

7

Создайте файл внутри с /lib/systemd/system-sleep/именем, например lightdm:

sudo touch /lib/systemd/system-sleep/lightdm

сделать этот файл исполняемым:

sudo chmod +x /lib/systemd/system-sleep/lightdm

Каждый раз, когда вы «приостанавливаете» или «возобновляете» свою Ubuntu, этот скрипт будет запускаться.

Откройте его, используя нужный текстовый редактор, например:, sudo nano /lib/systemd/system-sleep/lightdmи вставьте в него следующие строки, а затем сохраните его:

#!/bin/sh
set -e

case "$1" in
   pre)

    #Store current timestamp (while suspending)
    /bin/echo "$(date +%s)" > /tmp/_suspend 
    ;;

   post)
      #Compute old and current timestamp
      oldts="$(cat /tmp/_suspend)"
      ts="$(date +%s)"

      #Prompt for password if suspended > 10 minutes
      if [ $((ts-oldts)) -ge 600 ];
       then
         export XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0
         /usr/bin/dm-tool lock
      fi

      /bin/rm /tmp/_suspend
   ;;
esac

Что оно делает?

Когда вы переводите Ubuntu в «спящий» режим, этот скрипт будет сохранять текущие временные метки, затем при возобновлении системы он будет проверять старые временные метки с текущей, если разница будет больше, чем «600» секунд (10 минут), которые он покажет у вас "lightdm" экран блокировки в противном случае он ничего не делает.

Для последнего шага:

откройте «настройки системы» -> «Яркость и блокировка». Отключите запрос пароля после пробуждения из режима ожидания, потому что мы оставляем обработку экрана блокировки скрипту.

введите описание изображения здесь

После перезагрузки или выключения вам все равно необходимо ввести пароль.

Ravexina
источник
1
Очень приятно +1. Я должен отметить, комментарий #Remove password prompetдолжен прочитать#Prompt for password if suspended > 10 minutes
WinEunuuchs2Unix
@ WinEunuuchs2Unix Спасибо, что указали на это, я сначала написал что-то еще, потом забыл изменить комментарий :-)
Ravexina
0

Добавьте сценарий, /lib/systemd/system-sleep/чтобы разблокировать сеанс, если система была приостановлена ​​на короткое время:

cd /lib/systemd/system-sleep/
sudo touch     unlock_early_suspend
sudo chmod 755 unlock_early_suspend
sudo -H gedit     unlock_early_suspend

С этим содержанием:

#!/bin/bash
# Don't ask for password on resume if computer has been suspended for a short time

# Max duration of unlocked suspend (seconds)
SUSPEND_GRACE_TIME=600

file_time()      {  stat --format="%Y" "$1";  }

unlock_session()
{
    # Ubuntu 16.04
    sleep 1; loginctl unlock-sessions
}

# Only interested in suspend/resume events here. For hibernate etc tweak this
if [ "$2" != "suspend" ]; then  exit 0;  fi

# Suspend
if [ "$1" = "pre" ]; then  touch /tmp/last_suspend;  fi

# Resume
if [ "$1" = "post" ]; then
    touch /tmp/last_resume
    last_suspend=`file_time /tmp/last_suspend`
    last_resume=`file_time /tmp/last_resume`
    suspend_time=$[$last_resume - $last_suspend]

    if [ "$suspend_time" -le $SUSPEND_GRACE_TIME ]; then
        unlock_session
    fi
fi
lemonsqueeze
источник
1
Изначально я думал, что ваш путь (активная разблокировка) более элегантен, чем ответ другого (который активно блокируется). Но потом я заметил, что у вас есть странное свойство: если я активно блокирую свой экран, я хочу, чтобы он был заблокирован до тех пор, пока не будет введен пароль. Однако ваш сценарий разблокирует экран, если компьютер был приостановлен на короткое время, пока экран уже заблокирован. Вот почему я принял другой ответ.
UTF-8
На самом деле это было бы проблемой =)
lemonsqueeze
-2

Я могу помочь вам с этим. Сначала зайдите в настройки. Выберите этот параметр:

Brightness_ и блокировки

Появится выпадающее меню с надписью «Отключение экрана».

Screen_Turns_Off

После нажатия на выпадающее меню измените обе настройки, чтобы они выглядели так:

Экран блокировки

BJsgoodlife
источник
Это не работает. Я установил время на 30 секунд для тестирования. Таким образом , мне пришлось вводить пароль даже после приостановки работы компьютера всего на 5 секунд. Таким образом , я получил право на свой рабочий стол даже после приостановки работы компьютера на 3 минуты.
UTF-8
Извините, я забыл шаг.
BJsgoodlife
Это не оставляет компьютер в разблокированном состоянии в течение предварительно определенного количества минут после того, как приостановка инициируется, как указано OP. Фактически, это блокирует это немедленно, когда приостановка запущена.
b_laoshi