diff --git a/Interfaz_grafica_SO_video_nasa/componentes_sistema_grafico.html b/Interfaz_grafica_SO_video_nasa/componentes_sistema_grafico.html new file mode 100644 index 0000000..42bf603 --- /dev/null +++ b/Interfaz_grafica_SO_video_nasa/componentes_sistema_grafico.html @@ -0,0 +1,829 @@ + + +
+ + +Explicación clara y concisa de Xorg, LightDM, Slick Greeter, XFCE 4, Openbox, Polkit e Inotify en Debian 13
++ En Linux el sistema gráfico es modular: en lugar de ser un único bloque cerrado, se divide en Servidor Gráfico (Xorg), Gestor de Inicio de Sesión (LightDM + Slick Greeter) y Entorno de Escritorio / Gestor de Ventanas (XFCE 4 vs Openbox). Esa modularidad es exactamente la que aprovechamos en NA-SA Video Capture para darle al administrador un escritorio completo y al operario un modo kiosco blindado y ultrarrápido sobre la misma PC. +
+ + ++ Desde que el equipo enciende hasta que se muestra la imagen de las cámaras en pantalla, cada componente cumple una única responsabilidad bien delimitada y le pasa el control al siguiente: +
+ +Es el motor gráfico base de Linux que controla directamente la placa de video NVIDIA, dibuja píxeles en el monitor y captura los eventos físicos del teclado y mouse.
+Porque tiene soporte 100% maduro para el driver propietario de NVIDIA (CUDA Zero-Copy + NVDEC), para el SDK de la capturadora Magewell y permite controlar por código qué ventana va al frente (XRaiseWindow) y desactivar a nivel global el apagado de pantalla (DPMS false).
/etc/X11/xorg.conf.d/10-nasa-no-blanking.conf
+ Es el servicio de sistema que arranca Xorg al encender la PC, muestra la pantalla de login, valida la contraseña del usuario y lanza su sesión gráfica correspondiente.
+Porque es rápido, liviano y nos permite hacer tres cosas clave: 1) mantener una única sesión gráfica activa (allow-user-switching=false) para no bloquear la capturadora ni la GPU, 2) preseleccionar siempre al usuario nasa al iniciar, y 3) abrir entornos distintos según entre admin o nasa.
/etc/lightdm/lightdm.conf.d/60-slick-greeter.conf y 70-nasa-single-session.conf
+ LightDM no tiene interfaz visual propia; delega el dibujo de la pantalla de login en un programa llamado Greeter. Slick Greeter es la interfaz gráfica GTK3 donde se ven el fondo institucional, los usuarios y la caja de contraseña.
+Porque luce limpio y profesional con el fondo de NASA Video y el logo de VENG en el avatar de nasa. Además, le inyectamos nuestro filtro en C (slick-greeter-filter-a11y.so vía LD_PRELOAD) para forzarlo al español y ocultar del menú superior el Contraste alto y el Lector de pantalla.
/etc/lightdm/slick-greeter.conf y /usr/local/lib/slick-greeter-filter-a11y.so
+ .dmrcSon el demonio D-Bus del sistema (/var/lib/AccountsService/users/) y el archivo de perfil (~/.dmrc) que guardan qué sesión gráfica tiene asignada cada usuario y cuál es su ícono de avatar (.face).
Para que el cambio entre modo administrador y modo kiosco sea 100% automático: al escribir la clave de nasa siempre entra directo al kiosco (nasa-video-kiosk), y al escribir la clave de admin siempre entra directo a xfce, sin tocar ningún selector de sesión.
/var/lib/AccountsService/users/{admin,nasa} y ~{admin,nasa}/.dmrc
+ adminEs el entorno de escritorio completo de Debian que incluye barra de tareas, menú de aplicaciones, gestor de ventanas (xfwm4), gestor de energía y el explorador de archivos Thunar.
admin?
+ Porque las tareas de mantenimiento, compilación C++ y gestión de archivos en /datos requieren un escritorio completo, ágil y cómodo, sin la sobrecarga pesada de GNOME o KDE. Además, xfwm4 permite fijar vblank_mode=xpresent para una compatibilidad perfecta con NVIDIA.
/usr/share/xsessions/xfce.desktop y xfce4-power-manager.xml
+ nasaEs únicamente un gestor de ventanas (no tiene barra de tareas, ni íconos de escritorio, ni explorador de archivos). Solo se encarga de posicionar ventanas, darles foco y aplicar reglas definidas en un archivo XML.
+nasa?
+ Es la pieza central del Kiosco: si no hubiera gestor de ventanas, los diálogos secundarios de la app (Panel Virtual PTZ, Reproductor, Guardar imagen) no tendrían barra para moverse ni foco adecuado. Si usáramos XFCE, el operario podría salirse al sistema. Con Openbox bloqueamos todo y dejamos solo la app en pantalla completa y sus diálogos hijos arriba (<layer>above</layer>).
/etc/xdg/nasa-video-kiosk/rc.xml y menu.xml
+ Es el script (/usr/local/bin/nasa-video-kiosk-session) que Openbox ejecuta automáticamente apenas inicia la sesión del usuario nasa.
Prepara las variables de entorno (NASA_KIOSK_MODE=1), apaga el protector de pantalla de X11 y mantiene a nasa_video dentro de un bucle vigilado: si la aplicación llegara a cerrarse por cualquier fallo inesperado, la vuelve a abrir automáticamente en 1 segundo.
/usr/local/bin/nasa-video-kiosk-session y log en ~nasa/.local/state/nasa-video/kiosk.log
+ Un programa ligero en Python 3 + GTK3 + libxfce4ui-2 (/usr/local/bin/nasa-video-kiosk-panel), complementado con las acciones del menú Sistema (tecla F1) dentro de la propia aplicación Qt6.
Como en Openbox no existe el botón de apagado del escritorio, este componente brinda al operario una forma limpia, segura y con confirmación visual (al pulsar F1 o Ctrl+Alt+Supr) para Cerrar sesión, Reiniciar o Apagar, avisándole antes al Watchdog (STOP_FLAG) para que no relance la app.
/usr/local/bin/nasa-video-kiosk-panel y MainWindow.cpp
+ systemd-logind administra las sesiones de usuario y el apagado/reinicio del equipo, mientras que Polkit es el árbitro de seguridad que decide si un usuario sin privilegios tiene permiso para ejecutar una acción del sistema.
+El usuario nasa no es administrador (no tiene sudo por seguridad). Gracias a una regla específica de Polkit, le damos permiso únicamente para apagar y reiniciar el equipo sin pedir contraseña, manteniendo bloqueado cualquier otro permiso administrativo.
/etc/polkit-1/rules.d/60-nasa-kiosk-power.rules
+ /datos)Un servicio de sistema (nasa-datos-guard.service) escrito en Python 3 que utiliza la interfaz inotify del kernel Linux para detectar en milisegundos cada vez que un archivo se termina de escribir en /datos.
En Linux, si un usuario tiene permiso para crear un archivo en una carpeta, normalmente también puede borrarlo. Este guardián escucha el evento IN_CLOSE_WRITE y apenas nasa termina de grabar un video o guardar una medición, cambia su dueño a admin:nasa (0644) en carpetas con sticky bit (3775), impidiendo que nasa pueda borrarlo o modificarlo.
/usr/local/bin/nasa-datos-guard y /etc/systemd/system/nasa-datos-guard.service
+ | Decisión en el Proyecto | +Alternativa Descartada | +Por qué nuestra elección es superior para NASA Video | +
|---|---|---|
| Usar Xorg (X11) | +Wayland | +En Wayland los clientes no pueden posicionar ni elevar ventanas modales globalmente (XRaiseWindow), y la interoperabilidad directa CUDA-OpenGL + Magewell + captura de teclado global es mucho más estable y predecible sobre Xorg. |
+
Usar Openbox en la sesión nasa |
+ Usar XFCE recortado o lanzar la app sin Window Manager | +Recortar XFCE deja huecos por donde abrir paneles o atajos; y lanzar sin Window Manager rompe las barras de título y el foco de las ventanas hijas (Panel Virtual PTZ, Reproductor, Guardar archivo). Openbox resuelve ambos problemas con un solo archivo XML. | +
Mantener XFCE 4 en la sesión admin |
+ Dejar solo consola (SSH/TTY) para el administrador | +El administrador en planta puede necesitar revisar videos grabados en el propio monitor con Thunar, probar la interfaz en modo ventana o compilar localmente con todas las comodidades gráficas. | +
Sesión Xorg Única (allow-user-switching=false) |
+ Permitir múltiples sesiones gráficas simultáneas (VT7, VT8) | +Si quedan dos sesiones Xorg abiertas a la vez, la sesión en segundo plano puede retener el descriptor de la capturadora Magewell, el puerto serie RS-485 o contextos CUDA de NVIDIA. Forzar sesión única garantiza que quien inicia sesión tiene el 100% del hardware. | +
Guardián inotify + Sticky Bit en /datos |
+ Permisos estáticos estándar de carpetas Linux | +Con permisos estándar, quien tiene permiso de escritura en una carpeta para crear un video nuevo también puede borrar los videos que él mismo creó. El cambio automático de propietario al cerrar el archivo (IN_CLOSE_WRITE -> admin:nasa 0644) logra un verdadero modo "Grabar y Leer sí, Borrar nunca" para el operario. |
+
Sistema de Captura, Control PTZ y Medición en Pantalla (NA-SA Video Capture) sobre Debian 13
+
+ Este documento describe en detalle cómo está estructurado el sistema operativo Debian 13 para separar completamente el entorno de administración (usuario admin con escritorio completo XFCE 4) del entorno de operación en planta (usuario nasa en Modo Kiosco bloqueado sobre Openbox), cómo se construyó mediante scripts automatizados, cómo se protegen las grabaciones en /datos para que el operario no pueda borrar archivos y qué tecnologías intervienen en cada capa.
+
LD_PRELOAD en C y usuario nasa preseleccionado./datos.nasa_video a pantalla completa sin bordes, auto-relanzamiento en 1 s y salida exclusiva vía F1 o Ctrl+Alt+Supr.nasa-datos-guard.service que pasa cada archivo cerrado a admin:nasa (0644) impidiendo borrados por nasa.
+ El sistema corre sobre una única sesión gráfica Xorg activa a la vez (allow-user-switching=false) para garantizar acceso exclusivo y directo al hardware de captura (Magewell PCIe), decodificación por hardware (NVIDIA NVDEC + CUDA Zero-Copy OpenGL) y bus serie (RS-485 Pelco-D). Al encender el equipo, LightDM presenta Slick Greeter y enruta a cada usuario hacia un entorno gráfico totalmente distinto según su rol:
+
admin (Administrador) vs nasa (Operario)admin
+ Session=xfce en ~admin/.dmrc y en /var/lib/AccountsService/users/admin.xfwm4 (ajustado con vblank_mode=xpresent para evitar pantalla negra en NVIDIA)./datos y /datos/NA-SA_Video./datos: Es el propietario (admin:nasa) de todas las carpetas y archivos. Puede leer, copiar, mover, renombrar y eliminar cualquier grabación o captura./home/admin/repos/nasa_video compila los cambios y los publica hacia el kiosco ejecutando deploy_kiosk.sh.nasa
+ Session=nasa-video-kiosk en ~nasa/.dmrc y en /var/lib/AccountsService/users/nasa (con ícono .face de VENG).nasa_video: Se inicia en pantalla completa sin bordes (NASA_KIOSK_MODE=1), oculta Archivo -> Salir y desactiva F11, Esc y Alt+F4./datos: Puede grabar nuevos videos, guardar capturas de medición en pantalla, crear subcarpetas y reproducir videos, pero no puede borrar ni sobreescribir archivos existentes.F1 (o Ctrl+Alt+Supr) accede únicamente a Cerrar sesión, Reiniciar o Apagar con confirmación.| Característica / Parámetro | +Sesión admin (Administrador) |
+ Sesión nasa (Operario Kiosco) |
+
|---|---|---|
| Archivo de Sesión X11 | +/usr/share/xsessions/xfce.desktop |
+ /usr/share/xsessions/nasa-video-kiosk.desktop |
+
| Gestor de Ventanas (WM) | +xfwm4 (XFCE Window Manager) |
+ openbox con /etc/xdg/nasa-video-kiosk/rc.xml |
+
Modo de Ventana de nasa_video |
+ Ventana normal redimensionable (1280x720) + F11 libre |
+ Pantalla completa forzada (showFullScreen() y <fullscreen>yes</fullscreen>) |
+
| Ejecutable Utilizado | +/home/admin/repos/nasa_video/build/nasa_video |
+ ~nasa/Applications/nasa_video/nasa_video (o .AppImage) |
+
| Supervisión de Proceso (Watchdog) | +No (ejecución manual bajo demanda) | +Sí: /usr/local/bin/nasa-video-kiosk-session (relanza en 1 s) |
+
Permisos en /datos/NA-SA_Video |
+ Dueño admin: Lectura, Escritura, Modificación y Borrado |
+ Grupo nasa: Creación de nuevos archivos y lectura. Borrado bloqueado |
+
| Acceso a Terminal / Sistema | +Total (bash, sudo, apt, systemctl) |
+ Bloqueado (sin atajos a terminal, ni navegador, ni gestor de archivos) | +
| Control de Energía (Apagar / Reiniciar) | +Menú de salida de XFCE / sudo systemctl |
+ Menú F1 (Qt) o Ctrl+Alt+Supr (GTK3) autorizado vía Polkit |
+
+ El modo kiosco no depende de extensiones frágiles de navegador ni de bloquear un escritorio pesado, sino que se construyó combinando cinco piezas de ingeniería a nivel de sistema e interfaz orquestadas íntegramente por el script prepare_kiosk_test.sh y el código C++ de MainWindow.cpp:
+
| Componente Generado | +Ruta en el Sistema | +Qué hace exactamente y cómo funciona | +
|---|---|---|
| 1. Definición de Sesión XSession | +/usr/share/xsessions/nasa-video-kiosk.desktop |
+ Registra la sesión NASA Video Kiosk en LightDM. Ejecuta openbox --sm-disable --config-file /etc/xdg/nasa-video-kiosk/rc.xml --startup /usr/local/bin/nasa-video-kiosk-session. |
+
| 2. Reglas de Ventanas y Teclado Openbox | +/etc/xdg/nasa-video-kiosk/rc.xml/etc/xdg/nasa-video-kiosk/menu.xml |
+ Fija 1 solo escritorio, márgenes 0, elimina el menú raíz de clic derecho, habilita únicamente Alt+Tab (para alternar con el Panel Virtual de controlador o el Reproductor) y Ctrl+Alt+Supr. Fuerza <decor>no</decor> y <fullscreen>yes</fullscreen> en NA-SA Video Capture*, y coloca en capa superior (<layer>above</layer>) los diálogos secundarios. |
+
| 3. Script Lanzador y Watchdog | +/usr/local/bin/nasa-video-kiosk-session |
+ Exporta NASA_KIOSK_MODE=1, desactiva DPMS/salvapantallas con xset, pinta el fondo X11 en azul oscuro (#051a30) y ejecuta un bucle infinito que inicia el binario o AppImage en ~nasa/Applications/. Si el proceso termina y no existe el archivo bandera nasa-kiosk-stopping-<uid>, lo vuelve a lanzar en 1 segundo. |
+
| 4. Adaptación Nativa en la App Qt6 | +src/ui/MainWindow.cppsrc/main.cpp |
+ Detecta NASA_KIOSK_MODE=1 o USER=nasa. Abre la ventana en showFullScreen(), ignora closeEvent (bloquea Alt+F4), desactiva F11 y Esc, oculta Archivo -> Salir y lo reemplaza por Cerrar sesión..., Reiniciar... y Apagar.... Además, captura la tecla F1 (y XF86HomePage) para desplegar instantáneamente el menú Sistema. |
+
| 5. Panel de Sesión GTK3 / XFCE UI | +/usr/local/bin/nasa-video-kiosk-panel |
+ Script en Python 3 con PyGObject (GTK 3 + GdkX11) y libxfce4ui-2. Despliega un menú en la esquina superior derecha y cuadros de diálogo nativos de XFCE con cuenta regresiva de 30 segundos para Reiniciar, Apagar o Cerrar sesión cuando se invoca con Ctrl+Alt+Supr. |
+
| 6. Regla Polkit de Energía | +/etc/polkit-1/rules.d/60-nasa-kiosk-power.rules |
+ Autoriza explícitamente al usuario sin privilegios nasa a ejecutar las acciones D-Bus org.freedesktop.login1.power-off y org.freedesktop.login1.reboot sin pedir contraseña de administrador. |
+
| 7. Filtro C para Slick Greeter | +/usr/local/lib/slick-greeter-filter-a11y.so/usr/sbin/slick-greeter |
+ Generado por deploy_filter_a11y.sh. Usa dpkg-divert y LD_PRELOAD para interceptar funciones GTK en la pantalla de login, forzando el idioma español (traduce Quit... a Salir...) y ocultando del menú de accesibilidad el Lector de pantalla y Contraste alto, dejando solo el Teclado en pantalla. |
+
| 8. Bloqueo de Suspensión y Blanking | +/etc/X11/xorg.conf.d/10-nasa-no-blanking.conf/etc/systemd/sleep.conf.d/nasa-no-sleep.conf/etc/systemd/logind.conf.d/nasa-no-idle.conf |
+ Desactiva por completo el apagado de monitor (DPMS), el protector de pantalla, light-locker y los estados de suspensión/hibernación tanto en Xorg como en systemd y xfce4-power-manager. |
+
F1 / Ctrl+Alt+Supr
+ Uno de los puntos clave del diseño es cómo distinguir entre un cierre inesperado (que debe recuperarse automáticamente en 1 segundo sin intervención del operario) y una salida autorizada (Cerrar sesión, Reiniciar o Apagar). Esto se resuelve mediante un archivo bandera en memoria (/run/user/<uid>/nasa-kiosk-stopping-<uid>) que tanto la ventana principal Qt6 como el panel GTK3 escriben justo antes de ordenar el cierre:
+
nasa y admin en /datos (Protección Anti-Borrado)
+ Un requerimiento crítico del sistema es que el usuario nasa pueda grabar nuevos videos (.mp4), guardar imágenes de mediciones (.png) y crear carpetas dentro de /datos/NA-SA_Video/<Perfil>, pero que bajo ninguna circunstancia pueda borrar ni sobreescribir archivos ya generados (ni siquiera desde el cuadro de diálogo de selección de archivos de Qt). Al mismo tiempo, el usuario admin debe tener permisos totales desde XFCE.
+
3775 = setgid 2000 + sticky bit 1000 con dueño admin:nasa) junto con el demonio en tiempo real /usr/local/bin/nasa-datos-guard (ejecutado por systemd como root), el cual escucha eventos inotify del kernel Linux.
+ Base Linux estable de 64 bits ejecutando servidor gráfico Xorg en modo de sesión única (allow-user-switching=false) con flags BlankTime 0 y DPMS false.
Pantalla de login personalizada con imagen de fondo institucional, script de preselección de usuario (nasa) y biblioteca en C (slick-greeter-filter-a11y.so) inyectada vía LD_PRELOAD.
Entorno de escritorio ligero y completo para la cuenta admin, configurado con vblank_mode=xpresent en xfwm4 y montaje visible de /datos vía x-gvfs-show.
Gestor de ventanas minimalista para la cuenta nasa, configurado mediante /etc/xdg/nasa-video-kiosk/rc.xml sin bordes de ventana ni menús de sistema.
Interfaz gráfica nativa (Qt6::Widgets, Qt6::OpenGLWidgets, Qt6::Multimedia, Qt6::SerialPort) con traducción oficial al español (qtbase_es.qm) y estilos styles.qss.
Captura industrial de baja latencia con libMWCapture.so, decodificación de video por hardware NVIDIA (NVDEC) e interoperabilidad Zero-Copy CUDA-OpenGL.
Módulo de calibración con patrón damero y medición geométrica en pantalla sobre fotogramas en vivo, más panel virtual de controlador serie RS-485.
+Panel de salida con diálogos nativos libxfce4ui-2, demonio guardián de archivos con inotify sobre libc.so.6 y reglas polkit-1 para apagado/reinicio sin root.
deploy_kiosk.sh)
+ Desde la sesión admin, este comando compila el proyecto en C++ y actualiza automáticamente el binario, las librerías, las reglas de Openbox, los permisos de /datos y la sesión del usuario nasa:
+
/home/admin/repos/nasa_video/deploy_kiosk.sh
+ prepare_kiosk_test.sh --check)
+ Permite comprobar en cualquier momento la cuenta nasa, qué binario o AppImage está activo, el estado de Openbox, Slick Greeter, el servicio guardián nasa-datos-guard.service y las últimas líneas del log ~nasa/.local/state/nasa-video/kiosk.log:
+
sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --check
+
+ El script maestro admite instalar tanto el binario compilado actual como un paquete autónomo .AppImage (generado con build_appimage.sh), además de configurar Slick Greeter y su filtro de accesibilidad en español:
+
# Instalar el binario compilado y configurar toda la sesión kiosco para nasa
+sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --setup /home/admin/repos/nasa_video/build/nasa_video
+
+# Instalar y configurar Slick Greeter en LightDM con fondo corporativo
+sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --install-greeter
+
+# Compilar e inyectar el filtro de idioma español y accesibilidad para Slick Greeter
+/home/admin/repos/nasa_video/deploy_filter_a11y.sh
+ restore_greeter.sh)
+ Si por alguna prueba manual se alteraran las sesiones por defecto de LightDM o AccountsService, este script restaura nasa al modo kiosco (nasa-video-kiosk) y admin a su escritorio xfce:
+
sudo /home/admin/repos/nasa_video/restore_greeter.sh
+ Sistema de Captura, Control PTZ y Medición en Pantalla (NA-SA Video Capture) sobre Debian 13
+
+ Este documento describe en detalle cómo está estructurado el sistema operativo Debian 13 para separar completamente el entorno de administración (usuario admin con escritorio completo XFCE 4) del entorno de operación en planta (usuario nasa en Modo Kiosco bloqueado sobre Openbox), cómo se construyó mediante scripts automatizados, cómo se protegen las grabaciones en /datos para que el operario no pueda borrar archivos y qué tecnologías intervienen en cada capa.
+
LD_PRELOAD en C y usuario nasa preseleccionado./datos.nasa_video a pantalla completa sin bordes, auto-relanzamiento en 1 s y salida exclusiva vía F1 o Ctrl+Alt+Supr.nasa-datos-guard.service que pasa cada archivo cerrado a admin:nasa (0644) impidiendo borrados por nasa.
+ El sistema corre sobre una única sesión gráfica Xorg activa a la vez (allow-user-switching=false) para garantizar acceso exclusivo y directo al hardware de captura (Magewell PCIe), decodificación por hardware (NVIDIA NVDEC + CUDA Zero-Copy OpenGL) y bus serie (RS-485 Pelco-D). Al encender el equipo, LightDM presenta Slick Greeter y enruta a cada usuario hacia un entorno gráfico totalmente distinto según su rol:
+
admin (Administrador) vs nasa (Operario)admin
+ Session=xfce en ~admin/.dmrc y en /var/lib/AccountsService/users/admin.xfwm4 (ajustado con vblank_mode=xpresent para evitar pantalla negra en NVIDIA)./datos y /datos/NA-SA_Video./datos: Es el propietario (admin:nasa) de todas las carpetas y archivos. Puede leer, copiar, mover, renombrar y eliminar cualquier grabación o captura./home/admin/repos/nasa_video compila los cambios y los publica hacia el kiosco ejecutando deploy_kiosk.sh.nasa
+ Session=nasa-video-kiosk en ~nasa/.dmrc y en /var/lib/AccountsService/users/nasa (con ícono .face de VENG).nasa_video: Se inicia en pantalla completa sin bordes (NASA_KIOSK_MODE=1), oculta Archivo -> Salir y desactiva F11, Esc y Alt+F4./datos: Puede grabar nuevos videos, guardar capturas de medición en pantalla, crear subcarpetas y reproducir videos, pero no puede borrar ni sobreescribir archivos existentes.F1 (o Ctrl+Alt+Supr) accede únicamente a Cerrar sesión, Reiniciar o Apagar con confirmación.| Característica / Parámetro | +Sesión admin (Administrador) |
+ Sesión nasa (Operario Kiosco) |
+
|---|---|---|
| Archivo de Sesión X11 | +/usr/share/xsessions/xfce.desktop |
+ /usr/share/xsessions/nasa-video-kiosk.desktop |
+
| Gestor de Ventanas (WM) | +xfwm4 (XFCE Window Manager) |
+ openbox con /etc/xdg/nasa-video-kiosk/rc.xml |
+
Modo de Ventana de nasa_video |
+ Ventana normal redimensionable (1280x720) + F11 libre |
+ Pantalla completa forzada (showFullScreen() y <fullscreen>yes</fullscreen>) |
+
| Ejecutable Utilizado | +/home/admin/repos/nasa_video/build/nasa_video |
+ ~nasa/Applications/nasa_video/nasa_video (o .AppImage) |
+
| Supervisión de Proceso (Watchdog) | +No (ejecución manual bajo demanda) | +Sí: /usr/local/bin/nasa-video-kiosk-session (relanza en 1 s) |
+
Permisos en /datos/NA-SA_Video |
+ Dueño admin: Lectura, Escritura, Modificación y Borrado |
+ Grupo nasa: Creación de nuevos archivos y lectura. Borrado bloqueado |
+
| Acceso a Terminal / Sistema | +Total (bash, sudo, apt, systemctl) |
+ Bloqueado (sin atajos a terminal, ni navegador, ni gestor de archivos) | +
| Control de Energía (Apagar / Reiniciar) | +Menú de salida de XFCE / sudo systemctl |
+ Menú F1 (Qt) o Ctrl+Alt+Supr (GTK3) autorizado vía Polkit |
+
+ El modo kiosco no depende de extensiones frágiles de navegador ni de bloquear un escritorio pesado, sino que se construyó combinando cinco piezas de ingeniería a nivel de sistema e interfaz orquestadas íntegramente por el script prepare_kiosk_test.sh y el código C++ de MainWindow.cpp:
+
| Componente Generado | +Ruta en el Sistema | +Qué hace exactamente y cómo funciona | +
|---|---|---|
| 1. Definición de Sesión XSession | +/usr/share/xsessions/nasa-video-kiosk.desktop |
+ Registra la sesión NASA Video Kiosk en LightDM. Ejecuta openbox --sm-disable --config-file /etc/xdg/nasa-video-kiosk/rc.xml --startup /usr/local/bin/nasa-video-kiosk-session. |
+
| 2. Reglas de Ventanas y Teclado Openbox | +/etc/xdg/nasa-video-kiosk/rc.xml/etc/xdg/nasa-video-kiosk/menu.xml |
+ Fija 1 solo escritorio, márgenes 0, elimina el menú raíz de clic derecho, habilita únicamente Alt+Tab (para alternar con el Panel Virtual de controlador o el Reproductor) y Ctrl+Alt+Supr. Fuerza <decor>no</decor> y <fullscreen>yes</fullscreen> en NA-SA Video Capture*, y coloca en capa superior (<layer>above</layer>) los diálogos secundarios. |
+
| 3. Script Lanzador y Watchdog | +/usr/local/bin/nasa-video-kiosk-session |
+ Exporta NASA_KIOSK_MODE=1, desactiva DPMS/salvapantallas con xset, pinta el fondo X11 en azul oscuro (#051a30) y ejecuta un bucle infinito que inicia el binario o AppImage en ~nasa/Applications/. Si el proceso termina y no existe el archivo bandera nasa-kiosk-stopping-<uid>, lo vuelve a lanzar en 1 segundo. |
+
| 4. Adaptación Nativa en la App Qt6 | +src/ui/MainWindow.cppsrc/main.cpp |
+ Detecta NASA_KIOSK_MODE=1 o USER=nasa. Abre la ventana en showFullScreen(), ignora closeEvent (bloquea Alt+F4), desactiva F11 y Esc, oculta Archivo -> Salir y lo reemplaza por Cerrar sesión..., Reiniciar... y Apagar.... Además, captura la tecla F1 (y XF86HomePage) para desplegar instantáneamente el menú Sistema. |
+
| 5. Panel de Sesión GTK3 / XFCE UI | +/usr/local/bin/nasa-video-kiosk-panel |
+ Script en Python 3 con PyGObject (GTK 3 + GdkX11) y libxfce4ui-2. Despliega un menú en la esquina superior derecha y cuadros de diálogo nativos de XFCE con cuenta regresiva de 30 segundos para Reiniciar, Apagar o Cerrar sesión cuando se invoca con Ctrl+Alt+Supr. |
+
| 6. Regla Polkit de Energía | +/etc/polkit-1/rules.d/60-nasa-kiosk-power.rules |
+ Autoriza explícitamente al usuario sin privilegios nasa a ejecutar las acciones D-Bus org.freedesktop.login1.power-off y org.freedesktop.login1.reboot sin pedir contraseña de administrador. |
+
| 7. Filtro C para Slick Greeter | +/usr/local/lib/slick-greeter-filter-a11y.so/usr/sbin/slick-greeter |
+ Generado por deploy_filter_a11y.sh. Usa dpkg-divert y LD_PRELOAD para interceptar funciones GTK en la pantalla de login, forzando el idioma español (traduce Quit... a Salir...) y ocultando del menú de accesibilidad el Lector de pantalla y Contraste alto, dejando solo el Teclado en pantalla. |
+
| 8. Bloqueo de Suspensión y Blanking | +/etc/X11/xorg.conf.d/10-nasa-no-blanking.conf/etc/systemd/sleep.conf.d/nasa-no-sleep.conf/etc/systemd/logind.conf.d/nasa-no-idle.conf |
+ Desactiva por completo el apagado de monitor (DPMS), el protector de pantalla, light-locker y los estados de suspensión/hibernación tanto en Xorg como en systemd y xfce4-power-manager. |
+
F1 / Ctrl+Alt+Supr
+ Uno de los puntos clave del diseño es cómo distinguir entre un cierre inesperado (que debe recuperarse automáticamente en 1 segundo sin intervención del operario) y una salida autorizada (Cerrar sesión, Reiniciar o Apagar). Esto se resuelve mediante un archivo bandera en memoria (/run/user/<uid>/nasa-kiosk-stopping-<uid>) que tanto la ventana principal Qt6 como el panel GTK3 escriben justo antes de ordenar el cierre:
+
nasa y admin en /datos (Protección Anti-Borrado)
+ Un requerimiento crítico del sistema es que el usuario nasa pueda grabar nuevos videos (.mp4), guardar imágenes de mediciones (.png) y crear carpetas dentro de /datos/NA-SA_Video/<Perfil>, pero que bajo ninguna circunstancia pueda borrar ni sobreescribir archivos ya generados (ni siquiera desde el cuadro de diálogo de selección de archivos de Qt). Al mismo tiempo, el usuario admin debe tener permisos totales desde XFCE.
+
3775 = setgid 2000 + sticky bit 1000 con dueño admin:nasa) junto con el demonio en tiempo real /usr/local/bin/nasa-datos-guard (ejecutado por systemd como root), el cual escucha eventos inotify del kernel Linux.
+ Base Linux estable de 64 bits ejecutando servidor gráfico Xorg en modo de sesión única (allow-user-switching=false) con flags BlankTime 0 y DPMS false.
Pantalla de login personalizada con imagen de fondo institucional, script de preselección de usuario (nasa) y biblioteca en C (slick-greeter-filter-a11y.so) inyectada vía LD_PRELOAD.
Entorno de escritorio ligero y completo para la cuenta admin, configurado con vblank_mode=xpresent en xfwm4 y montaje visible de /datos vía x-gvfs-show.
Gestor de ventanas minimalista para la cuenta nasa, configurado mediante /etc/xdg/nasa-video-kiosk/rc.xml sin bordes de ventana ni menús de sistema.
Interfaz gráfica nativa (Qt6::Widgets, Qt6::OpenGLWidgets, Qt6::Multimedia, Qt6::SerialPort) con traducción oficial al español (qtbase_es.qm) y estilos styles.qss.
Captura industrial de baja latencia con libMWCapture.so, decodificación de video por hardware NVIDIA (NVDEC) e interoperabilidad Zero-Copy CUDA-OpenGL.
Módulo de calibración con patrón damero y medición geométrica en pantalla sobre fotogramas en vivo, más panel virtual de controlador serie RS-485.
+Panel de salida con diálogos nativos libxfce4ui-2, demonio guardián de archivos con inotify sobre libc.so.6 y reglas polkit-1 para apagado/reinicio sin root.
deploy_kiosk.sh)
+ Desde la sesión admin, este comando compila el proyecto en C++ y actualiza automáticamente el binario, las librerías, las reglas de Openbox, los permisos de /datos y la sesión del usuario nasa:
+
/home/admin/repos/nasa_video/deploy_kiosk.sh
+ prepare_kiosk_test.sh --check)
+ Permite comprobar en cualquier momento la cuenta nasa, qué binario o AppImage está activo, el estado de Openbox, Slick Greeter, el servicio guardián nasa-datos-guard.service y las últimas líneas del log ~nasa/.local/state/nasa-video/kiosk.log:
+
sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --check
+
+ El script maestro admite instalar tanto el binario compilado actual como un paquete autónomo .AppImage (generado con build_appimage.sh), además de configurar Slick Greeter y su filtro de accesibilidad en español:
+
# Instalar el binario compilado y configurar toda la sesión kiosco para nasa
+sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --setup /home/admin/repos/nasa_video/build/nasa_video
+
+# Instalar y configurar Slick Greeter en LightDM con fondo corporativo
+sudo /home/admin/repos/nasa_video/prepare_kiosk_test.sh --install-greeter
+
+# Compilar e inyectar el filtro de idioma español y accesibilidad para Slick Greeter
+/home/admin/repos/nasa_video/deploy_filter_a11y.sh
+ restore_greeter.sh)
+ Si por alguna prueba manual se alteraran las sesiones por defecto de LightDM o AccountsService, este script restaura nasa al modo kiosco (nasa-video-kiosk) y admin a su escritorio xfce:
+
sudo /home/admin/repos/nasa_video/restore_greeter.sh
+