我可以锁定特定应用程序的界面而不锁定整个屏幕吗?在工作中,能够在离开办公桌时保持某些应用程序打开非常有用,因为同事经常访问我的桌面来添加更改。但是,我想锁定 pidgin/skype/firefox/thunderbird,以便它保持登录状态,但如果没有单独的密码,则无法使用/查看。
答案1
隐藏应用程序窗口,输入密码即可再次显示
编辑版本这个脚本将(完全)隐藏/显示界面(窗口)任何应用程序,列在脚本的头部部分(切换)。
它具有“温和”密码保护,因为密码存储在脚本中。运行脚本的组合键将是另一个阻止轻易访问的障碍。在您提到的情况下,这可能就足够了,但您必须决定。
如何使用
该脚本同时使用了
xdotool
和wmctrl
:sudo apt-get install xdotool wmctrl
然后只需将下面的脚本复制到一个空文件中,将其保存为
password_app.py
,并在行中更改当前密码“Monkey”:if passw == "Monkey":
在脚本的头部,添加你需要/想要隐藏界面的应用程序。例如,我设置:
applications = ["gedit", "thunderbird"]
通过命令测试运行:
python3 /path/to/password_app.py
您需要密码来隐藏和显示界面:
如果一切正常,请将其添加到快捷键组合中:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:
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 这样没有经过上述设计的应用程序无法开箱即用。因此,您有两种选择:
- 重拾你的编程技能并自行添加功能
- 为 Thunderbird 创建一个不同的用户,
su
当您需要阅读邮件时进入该用户,如果不需要则保持关闭状态...