锁定个别应用程序的界面

锁定个别应用程序的界面

我可以锁定特定应用程序的界面而不锁定整个屏幕吗?在工作中,能够在离开办公桌时保持某些应用程序打开非常有用,因为同事经常访问我的桌面来添加更改。但是,我想锁定 pidgin/skype/firefox/thunderbird,以便它保持登录状态,但如果没有单独的密码,则无法使用/查看。

答案1

隐藏应用程序窗口,输入密码即可再次显示

编辑版本这个脚本将(完全)隐藏/显示界面(窗口)任何应用程序,列在脚本的头部部分(切换)。

它具有“温和”密码保护,因为密码存储在脚本中。运行脚本的组合键将是另一个阻止轻易访问的障碍。在您提到的情况下,这可能就足够了,但您必须决定。

在此处输入图片描述

如何使用

  1. 该脚本同时使用了xdotoolwmctrl

    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当您需要阅读邮件时进入该用户,如果不需要则保持关闭状态...

相关内容