¿Puedo bloquear la interfaz de una aplicación en particular sin bloquear toda la pantalla? Sería muy útil en el trabajo poder dejar ciertas aplicaciones abiertas al salir de mi escritorio, ya que los colegas suelen acceder a mi escritorio para agregar cambios. Sin embargo, me gustaría bloquear pidgin/skype/firefox/thunderbird para que permanezca conectado pero inutilizable/no visible sin una contraseña separada.
Respuesta1
Ocultar ventanas de aplicaciones, contraseña para volver a hacerlas visibles
Una versión editada deeste guiónocultará/mostrará (completamente) las interfaces (ventanas) decualquieraplicación, que figura en la sección principal del script (alternar).
Tiene una protección de contraseña "suave", ya que la contraseña se almacena dentro del script. La combinación de teclas para ejecutar el script será otra barrera que impedirá el acceso con demasiada facilidad. Probablemente eso sea suficiente en la situación que mencionas, pero tendrás que decidir.
Cómo utilizar
El script utiliza ambos
xdotool
ywmctrl
:sudo apt-get install xdotool wmctrl
Luego simplemente copie el siguiente script en un archivo vacío, guárdelo como
password_app.py
, cámbielo si desea la contraseña actual "Monkey" en la línea:if passw == "Monkey":
En la sección principal del script, agregue las aplicaciones de las que necesita o desea ocultar la interfaz. Como ejemplo, puse:
applications = ["gedit", "thunderbird"]
Pruébelo con el comando:
python3 /path/to/password_app.py
Necesita la contraseña para ocultar y mostrar su interfaz:
Si todo funciona bien, agréguelo a una combinación de teclas de acceso directo: Elija: Configuración del sistema > "Teclado" > "Atajos" > "Atajos personalizados". Haga clic en "+" y agregue el comando:
python3 /path/to/password_app.py
La secuencia de comandos
#!/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
- Esto no impide que los usuarios abrannuevas instanciasde las aplicaciones, oculta las actuales. Sin embargo, todo se puede hacer con codificación adicional :).
- Si otro usuario puede abrir una nueva instancia de una aplicación listada, al ejecutar el script primero se agregarán esas ventanas a las ventanas ocultas.TodoWindows aparecerá en la siguiente ejecución del script.
Respuesta2
Una aplicación que ha sido diseñada para aprovechar privilegios de usuario adicionales como System Settings:User accounts poderhacer esto.
Una aplicación como Thunderbird que no ha sido diseñada así no puede ser lista para usar. Por lo tanto tienes dos posibilidades:
- Desempolve sus habilidades de programación y agregue la funcionalidad usted mismo
- Cree un usuario diferente para Thunderbird y
su
acceda al usuario cuando necesite leer el correo y manténgalo cerrado si no lo hace...