Proyectos IT
06 / 06 En producción

Input
Locker

Herramienta de gestión de dispositivos de entrada para Linux que combina un backend Python con una interfaz Electron + React — bloquea teclados, ratones, touchpads y pantallas táctiles con perfiles de seguridad y hotkeys globales.

Python Electron React Node.js Linux X11 Wayland evdev REST API
4 Perfiles de seguridad
v4.0.0 Versión actual
REST + WS API disponible
X11 + Wayland Soporte
Input-Locker — portada

Descripción del proyecto

Input-Locker nació de un problema concreto: necesitar bloquear el teclado para limpiar sin apagar la sesión, o impedir que un niño interactúe con el equipo mientras se reproduce contenido. Las soluciones existentes en Linux eran básicas, sin interfaz gráfica y con soporte limitado para Wayland.

La arquitectura separa el backend (Python con evdev para control de dispositivos) del frontend (Electron + React con Material Design). Se comunican via una API REST en el puerto 8080 y WebSocket para eventos en tiempo real. Esto permite tanto uso con GUI como control por terminal mediante curl.

La herramienta integra con el system tray para acceso rápido, soporta un hotkey global (Ctrl+Alt+L) para bloqueo instantáneo y un patrón de desbloqueo (↑↑↓↓Enter) configurable.

Perfiles de seguridad y funciones

  • Focus Mode: bloquea únicamente el teclado — ideal para limpiar el equipo o evitar pulsaciones accidentales mientras se trabaja con el ratón
  • Child Lock: bloqueo completo de todos los dispositivos de entrada — para dejar contenido reproduciéndose sin que los niños puedan interactuar
  • Gaming Mode: deshabilita el touchpad mientras el ratón externo está activo — evita toques accidentales durante partidas
  • Presentation Mode: bloquea el teclado y el ratón salvo teclas de avance de diapositiva — control limpio durante presentaciones
  • Hotkey global Ctrl+Alt+L: bloqueo instantáneo desde cualquier aplicación sin necesidad de abrir la GUI
  • Patrón de desbloqueo ↑↑↓↓Enter: desbloqueo rápido sin contraseña desde el teclado bloqueado

Arquitectura API

# Input-Locker v4.0.0 — REST API en localhost:8080

# Bloquear todos los dispositivos
curl -X POST http://127.0.0.1:8080/api/lock/all

# Bloquear solo teclado
curl -X POST http://127.0.0.1:8080/api/lock/keyboard

# Activar perfil Gaming Mode
curl -X POST http://127.0.0.1:8080/api/profile/gaming

# Estado actual de dispositivos
curl http://127.0.0.1:8080/api/status

# WebSocket para eventos en tiempo real
# ws://127.0.0.1:8080/events → {"device": "keyboard", "event": "locked"}

# Instalación recomendada (paquete .deb)
wget https://github.com/vvv-bash-v2/Input-Locker/releases/latest/download/input-locker.deb
sudo dpkg -i input-locker.deb

Retos y soluciones

  • Compatibilidad X11 y Wayland: evdev funciona diferente en cada entorno gráfico; implementado un detector de sesión al inicio que elige la estrategia de bloqueo correcta según el compositor activo.
  • Comunicación backend-frontend en tiempo real: los cambios de estado del dispositivo deben reflejarse inmediatamente en la GUI; resuelto con Socket.IO para streaming de eventos evdev al cliente React.
  • Hotkey global cross-application: capturar Ctrl+Alt+L aunque otra aplicación tenga el foco; resuelto usando python-xlib en X11 y el portal de KDE/GNOME en Wayland.
  • Empaquetado .deb con dependencias mixtas: el paquete incluye Python, Node y el binario Electron; construido con scripts de packaging que resuelven dependencias en tiempo de instalación para no inflar el .deb.

Aprendizajes

Input-Locker me introdujo al desarrollo de aplicaciones de escritorio multiplataforma con Electron: el proceso main/renderer, la comunicación IPC y la integración con APIs nativas del sistema operativo (system tray, global hotkeys).

La parte de evdev y el control de dispositivos de entrada en Linux fue especialmente interesante: entender cómo el kernel expone los dispositivos en /dev/input/, cómo funciona el grabbing de eventos y las diferencias entre X11 y Wayland a ese nivel.