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. |