개별 애플리케이션의 인터페이스 잠금

개별 애플리케이션의 인터페이스 잠금

전체 화면을 잠그지 않고 특정 애플리케이션의 인터페이스를 잠글 수 있나요? 동료들이 변경 사항을 추가하기 위해 종종 내 데스크탑에 액세스하므로 책상을 떠날 때 특정 응용 프로그램을 열어 둘 수 있으면 직장에서 매우 유용할 것입니다. 그러나 pidgin/skype/firefox/thunderbird를 잠그고 로그인 상태를 유지하지만 별도의 비밀번호 없이는 사용할 수 없거나 볼 수 없도록 하고 싶습니다.

답변1

응용 프로그램 창을 숨기고 다시 표시하려면 비밀번호를 입력하세요.

편집된 버전이 스크립트인터페이스(창)를 (완전히) 숨기거나 표시합니다.어느스크립트의 헤드 섹션에 나열된 애플리케이션(토글)

비밀번호는 스크립트 내부에 저장되므로 "온건한" 비밀번호 보호 기능을 갖추고 있습니다. 스크립트를 실행하기 위한 키 조합은 접근을 너무 쉽게 막는 또 다른 장벽이 될 것입니다. 당신이 언급한 상황에서는 그것만으로도 충분할 것입니다. 하지만 결정해야 할 것입니다.

여기에 이미지 설명을 입력하세요

사용하는 방법

  1. 스크립트는 xdotool및 다음을 모두 사용합니다 wmctrl.

    sudo apt-get install xdotool wmctrl
    
  2. 그런 다음 아래 스크립트를 빈 파일에 복사하고 다른 이름으로 저장한 후 password_app.py줄에 현재 비밀번호 "Monkey"를 추가하려면 다음과 같이 변경하세요.

    if passw == "Monkey":
    
  3. 스크립트의 헤드 섹션에 인터페이스를 숨기려는/필요한 응용 프로그램을 추가하십시오. 예를 들어 다음과 같이 설정했습니다.

    applications = ["gedit", "thunderbird"]
    
  4. 다음 명령으로 테스트 실행해 보세요.

    python3 /path/to/password_app.py
    

    인터페이스를 숨기거나 표시하려면 비밀번호가 필요합니다.

  5. 모든 것이 제대로 작동하면 단축키 조합에 추가하십시오. 시스템 설정 > "키보드" > "단축키" > "사용자 정의 단축키"를 선택하십시오. "+"를 클릭하고 다음 명령을 추가합니다.

    python3 /path/to/password_app.py
    

스크립트

#!/usr/bin/env python3
import subprocess
import getpass
import os
import time

#---
applications = ["gedit", "thunderbird"]
#---

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()

def toggle():
    windowlist = os.environ["HOME"]+"/"+".windowlist.txt"
    user = getpass.getuser()
    wlist = [l for l in get("wmctrl -lp").splitlines()]
    procs = sum([[p.split()[0] for p in get("ps -u "+user).splitlines() if app in p] for app in applications], [])
    matches = sum([[l.split()[0] for l in wlist if p in l] for p in procs], [])
    if len(matches) != 0:
        with open(windowlist, "a+") as out:
            for match in matches:
                out.write(match+"\n")
                subprocess.Popen(["/bin/bash", "-c", "xdotool windowunmap "+match])
    else:
        try:
            with open(windowlist) as r:
                for l in r.readlines():
                    subprocess.Popen(["/bin/bash", "-c", "xdotool windowmap "+l])
            os.remove(windowlist)
        except FileNotFoundError:
            pass

try:
    cmd = "zenity --entry --title='Restricted!' --text='Enter your _password:'"
    passw = subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8").strip()
    if passw == "Monkey":
        time.sleep(1)
        toggle()
except subprocess.CalledProcessError:
    pass

노트

  • 사용자가 여는 것을 막지는 않습니다.새로운 인스턴스현재 응용 프로그램을 숨깁니다. 그러나 추가 코딩을 통해 모든 작업을 수행할 수 있습니다 :).
  • 다른 사용자가 나열된 응용 프로그램의 새 인스턴스를 열 수 있는 경우 스크립트를 실행하면 먼저 해당 창이 숨겨진 창에 추가됩니다.모두그러면 다음에 스크립트를 실행할 때 창이 표시됩니다.

답변2

다음과 같은 추가 사용자 권한을 활용하도록 설계된 애플리케이션 System Settings-User accounts ~할 수 있다이 작업을 수행.

그렇게 설계되지 않은 Thunderbird와 같은 애플리케이션은 즉시 사용할 수 없습니다. 따라서 두 가지 가능성이 있습니다.

  1. 프로그래밍 기술을 쌓고 직접 기능을 추가하세요.
  2. Thunderbird용으로 다른 사용자를 생성하고 su메일을 읽어야 할 경우 해당 사용자에 추가하고 그렇지 않은 경우에는 닫아 두십시오.

관련 정보