일정 시간 동안 활동이 없으면 화면이 잠기지만 덮개를 닫으면 잠금 화면이 표시되지 않음

일정 시간 동안 활동이 없으면 화면이 잠기지만 덮개를 닫으면 잠금 화면이 표시되지 않음

Unity와 함께 Ubuntu 16.04를 실행하고 싶습니다.

  • 노트북을 5분 동안 손대지 않은 채로 두면 화면을 꺼주세요
  • 활동이 없어 화면을 끈 후 1분 후에 화면을 잠급니다.

  • 노트북 덮개를 닫을 때 즉시 화면을 잠그지 말고 덮개가 여전히 열려 있는 것처럼 행동하고 5+1분(또는 유사) 후에 잠깁니다.

~ 안에시스템 설정 → 밝기 및 잠금, 설정된 경우잠그다적절한 시간(1분)을 설정 하고 ON비활성화하면 화면이 꺼진 후 그에 따라 화면이 잠깁니다. 그러나 뚜껑을 닫으면 즉시 화면이 잠기는데, 이는 원하지 않습니다.
이를 설정하면 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

이제 우리는 우리 자신의 절차를 처리하기 때문입니다.

그 다음에:

  1. 스크립트는 를 사용하여 xprintidle유휴 시간을 확인합니다.

    sudo apt-get install xprintidle
    
  2. 스크립트를 빈 파일에 복사하고 다른 이름으로 저장하세요.set_times.py
  3. 스크립트의 헤드 섹션에서 화면을 끄는 유휴 시간(초)을 설정합니다.

    # set screen off after x seconds
    off = 300
    

    화면을 잠그는 시간:

    # lock screen after x seconds
    lock = 360
    

    이 시간은 서로 독립적으로 설정되며 원하는 순서로 둘 다 설정할 수 있습니다(먼저 잠근 다음 끄거나 그 반대).

    ~할 수 있다시간 "분해능"을 설정합니다. 유휴 시간이 확인되는 빈도입니다(따라서 설정 시간은 반올림됩니다).

    # check idle every x seconds
    res = 3
    

    하지만 너도 그럴 수도 있지

  4. 테스트 - 실행해 보세요:

    python3 /path/to/set_times.py
    
  5. 모든 것이 제대로 작동하면 시작 응용 프로그램(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분 후에 화면이 잠깁니다.

  • 스크립트의 추가 부담은 0입니다.

관련 정보