Ocultar janelas de aplicativos, senha para torná-las visíveis novamente
Uma versão editada de este script ocultará (completamente) / mostrará as interfaces (janelas) do qualquer aplicativo, listado na seção head do script (alternar).
Possui proteção de senha "leve", já que a senha é armazenada no script. A combinação de teclas para executar o script será outra barreira que impedirá o acesso com muita facilidade. Isso provavelmente será suficiente na situação que você mencionou, mas você terá que decidir.
Comousar
Oscriptusa
xdotool
ewmctrl
:sudoapt-getinstallxdotoolwmctrl
Emseguida,copieoscriptabaixoemumarquivovazio,salve-ocomo
password_app.py
,alteresequiserasenhaatual"Monkey" na linha:if passw == "Monkey":
-
Na seção principal do script, adicione os aplicativos dos quais você precisa / deseja ocultar a interface. Como exemplo, eu configurei:
applications = ["gedit", "thunderbird"]
-
Teste-o pelo comando:
python3 /path/to/password_app.py
Você precisa da senha para ocultar e mostrar sua interface:
-
Se tudo funcionar bem, adicione-o a uma combinação de teclas de atalho: Escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:
python3 /path/to/password_app.py
O script
#!/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
Notas
- Isso não impede que os usuários abram novas instâncias dos aplicativos; eles ocultam os atuais. Tudo pode ser feito no entanto com codificação adicional:).
- Se outro usuário puder abrir uma nova instância de um aplicativo listado, a execução do script adicionará primeiro essas janelas às janelas ocultas. As janelas Todas aparecerão na próxima execução do script.