web-dev-qa-db-ja.com

10分間中断されたときに中断から復帰するときにのみパスワードを要求する

通常、ラップトップはサスペンド状態でロックされますが、サスペンド状態から復帰した後にパスワードを入力するのは非常に面倒なユースケースがあるため、単にサスペンドしたときではありません。適切な妥協案は、ラップトップが10分以上前に中断された場合にのみログインパスワードを要求することです。どうすればいいですか?

Ubuntu 16.04をUnityで使用しています。

11
UTF-8

/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を「スリープ」モードにすると、このスクリプトは現在のタイムスタンプを保存し、システムを再開するときに、現在のタイムスタンプと古いタイムスタンプをチェックします。あなたは画面を「lightdm」ロックします。さもなければ何もしません。

最後のステップ:

「システム設定」->「明るさとロック」を開きます。ロック画面の処理はスクリプトに任せているため、サスペンドから復帰した後のパスワードの要求を無効にします。

enter image description here

再起動またはシャットダウンした後でも、パスワードを入力する必要があります。

7
Ravexina

システムが短時間中断された場合にセッションをロック解除するスクリプトを/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
0
lemonsqueeze