Root a demanda, lanzador de escritorio, captura nueva y ajustes

- Root: no se pide la contraseña al arrancar (echaba para atras). Se pide
  solo la primera vez que una accion necesita sudo, y se cachea. --candado
  para el modo seguro. Aviso de root prominente en el README.
- install.sh crea un lanzador de escritorio (jarvis.desktop) con el icono
  naranja: aparece en el menu de aplicaciones para arrancar con un clic.
- Captura del panel reemplazada por una mas limpia (solo la ventana).
- Quitado "Probado en ..." del README (informacion del equipo).
- ventanas.sh: aviso claro segun el compositor en Wayland.
This commit is contained in:
sito 2026-08-16 16:20:27 +02:00
parent a0b9afe2f9
commit 3a2a1bb111
8 changed files with 118 additions and 33 deletions

View file

@ -33,11 +33,14 @@ class Manos:
def __init__(self, catalogo=None, al_ejecutar=None):
self.catalogo = catalogo or Catalogo([PROPIO, CATALOGO])
self.al_ejecutar = al_ejecutar
# Root para la sesion: cuando el usuario desbloquea el candado con su
# contraseña, esa misma queda aqui y el cerebro puede hacer sudo hasta
# que caduque. Sin desbloquear, no hay root: el candado es la puerta.
# Root para la sesion: la primera vez que una accion necesita sudo se
# pide la contraseña, y queda aqui hasta que caduque (15 min). No se
# pide al arrancar: solo cuando de verdad hace falta.
from manos.sudo_root import GestorRoot
self.root = GestorRoot([])
# El panel conecta aqui como pedir la contraseña de root cuando haga
# falta (muestra el dialogo). Sin panel (modo terminal) se queda en None.
self.al_pedir_root = None
# ------------------------------------------------------------- catalogo
@ -93,8 +96,15 @@ class Manos:
# hay contraseña: el root queda cerrado hasta que el usuario desbloquee.
if necesita_root(comando):
if not self.root.sesion_activa():
return ("eso necesita root y el candado no esta abierto. "
"Desbloquee con su contraseña y lo repito.")
# No hay root todavia: se pide la contraseña AHORA (una vez), no
# al arrancar. El panel muestra el dialogo; el usuario la teclea
# y repite la orden, que ya correra con la sesion abierta.
if self.al_pedir_root:
self.al_pedir_root(comando)
return ("Esto necesita permiso de administrador, señor. "
"Introduzca su contraseña y repitamelo.")
return ("eso necesita permiso de administrador y no hay panel "
"para pedir la contraseña.")
try:
r = self.root.ejecuta(comando, timeout=60)
except Exception as e: