Creé nirlock con Claude Code para desbloquear mi Omarchy (Linux) con la cara
Creé nirlock con Claude Code para desbloquear mi Zenbook con el rostro en Omarchy. Así funciona, qué límites tiene y cómo ayudar a probar otras cámaras.
Hace un tiempo me compré un ASUS Zenbook que tiene una cámara que permite usar el rostro para entrar a Windows. Pero además de Windows (y la mayoría del tiempo) lo uso con Omarchy, y quería esa misma comodidad en Linux: mirar la pantalla, desbloquear rápidamente y volver a lo que estaba haciendo.
Así nació nirlock, un proyecto que armé con Claude Code usando Opus 5.5 en el propio Zenbook.
Usa la cámara infrarroja del equipo para reconocer mi rostro y desbloquear una sesión que ya está abierta. La contraseña sigue disponible en paralelo. El código está publicado en GitHub con licencia MIT, para que otras personas puedan revisarlo, probarlo y contribuir.
Antes de entusiasmarte e instalarlo, una precisión: esto no es Windows Hello para Linux con las mismas garantías de seguridad. Es una función de comodidad que funciona en mi equipo y que todavía necesita más pruebas. Prefiero contarte ambas cosas desde el principio.
📸 La cámara ya estaba ahí

En algunos notebooks compatibles con Windows Hello hay un sensor infrarrojo junto a la webcam normal. nirlock utiliza ese sensor, no una selfie de la cámara de color como reemplazo.
En la cámara de mi Zenbook, el firmware alterna imágenes iluminadas por el emisor infrarrojo con imágenes sin esa iluminación. Además, entrega un dato que indica cuáles fueron iluminadas. nirlock lee esa información y usa las imágenes iluminadas para reconocer el rostro, en lugar de intentar adivinarlo solo por el brillo.
Por eso no basta con decir que un equipo tiene Windows Hello para asegurar que será compatible. Linux tiene que poder acceder al sensor y a esos metadatos, y el emisor debe funcionar de una manera que nirlock pueda aprovechar.
Solo tengo este PC con linux, así que la cámara verificada es la que venía en el Asus Zenbook UX3405CA: Shinetech 3277:0055 . El proyecto necesita Linux 6.17 o posterior para acceder al formato de metadatos que utiliza.
Sí, por ahora la lista de hardware probado es bastante corta, pero está diseñado para comprobar tu cámara y ver si la puede usar. Esa es una de las razones para compartirlo: poder ampliar el espectro de hardware donde funciona. De hecho si lo pruebas, puedes colaborar abrir un Issue con tu cámara usando este template en Github.
Cómo se ve al usarlo
Actualmente el proyecto usa la pantalla de Omarchy de base, y sobre ella al empezar el proceso de reconocimiento del rostro, agrega una cuadrícula de estilo synthwave y el texto SCANNING sobre la pantalla de bloqueo de Omarchy. Los colores siguen el tema que tengas activo. Por lo que si estás usando cualquiera de los cientos de temas de Omarchy, se va a adaptar a esos colores.

above_lock de Hyprland, que es tiling window manager de Omarchy, que el instalador actual no agrega. En una instalación nueva o en un sistema linux sin hyprland ni Omarchy, puede faltar el indicador, aunque el reconocimiento funcione,El indicadro visual básicamente te da feedback de que está ocurriendo un intento de reconocimiento, luego de un par de veces sin que detecte bien el rostro se detiene y solo puedes entrar con la contraseña. El campo de contraseña sigue disponible siempre y la animación no captura el teclado, así que puedes escribir sin esperar a que el reconocimiento termine.
En mis pruebas, los tiempos de desbloqueo de aproximadamente 0,5 a 1,7 segundos en mi equipo. Es una referencia de uso en esta máquina, no una promesa de velocidad para todos los notebooks. Y varía si estás con batería o con corriente (siendo mucho más rápido con corriente).
Una vez que instalas nirlock, te va a guiar en la misma terminal para avanzar paso a paso: primero te invita a registrar tu rostro, a través de una vista infrarroja en vivo en la misma terminal, como un espejo en tonos de gris, con un contorno del rostro y una guía para cubrir cinco posiciones. La idea es reunir distintas vistas, no depender de que siempre te sientes exactamente igual.

Con esas imágenes, el sistema genera embeddings: representaciones numéricas del rostro que después puede comparar con un nuevo escaneo cada vez que intentas desbloquear el computador con la mirada.
🤔 Qué hay detrás de este sistema?
Esta es la parte más técnica por si te interesa. nirlock tiene un programa principal escrito en Rust, llamado nirlockd, que se encarga del reconocimiento. En la instalación empaquetada corre con su propio usuario, sin privilegios de administrador y dentro de un entorno restringido por systemd. El procesamiento ocurre localmente, con ONNX Runtime y el modelo AuraFace.
Un módulo pequeño escrito en C conecta la respuesta con PAM, la capa que muchas aplicaciones de Linux usan para comprobar credenciales.
El plugin de Omarchy une esa vía de reconocimiento con la pantalla de bloqueo, manteniendo la vía de contraseña. El programa de reconocimiento y el módulo PAM no están atados por naturaleza a Omarchy, pero la integración de escritorio que está lista hoy sí lo está. Llevarlo a otro entorno requiere trabajo de integración.
También hay una herramienta para revisar el hardware:
nirlockctl probe
Inspecciona las cámaras que ve Linux y explica si hay un perfil compatible, si puede generar una configuración candidata o qué requisito falta. Me parece mucho más útil que responder simplemente “cámara no encontrada” cuando la cámara está ahí, pero nadie ha probado cómo usarla.
⛔ Lo que no hace, y lo que todavía no sabemos

nirlock desbloquea la pantalla de una sesión existente. No abre el disco cifrado, no reemplaza el inicio de sesión inicial del sistema, no desbloquea el llavero de contraseñas ni autoriza comandos con sudo o solicitudes de polkit.
Reconocer una cara y disponer de la clave que descifra un disco son cosas distintas. Este proyecto no busca eliminar todas las contraseñas de Linux.
La prueba de seguridad pendiente más importante es el ataque con una fotografía impresa. Básicamente porque no tengo impresora para hacer la prueba 🤣. Usar infrarrojo y saber qué imágenes fueron iluminadas no demuestra, por sí solo, que el sistema pueda distinguir una persona viva de un intento de engaño.
Tampoco hay una comprobación explícita de atención o intención. Que tu cara aparezca frente a la cámara no significa necesariamente que hayas decidido autorizar un desbloqueo. Si está la pantalla bloqueada y miras el computador de frente, se va a desbloquear! (a menos que hayan pasado todos los intentos del turno).
El umbral de reconocimiento necesita validación más amplia. Una persona, una cámara y un notebook no bastan para establecer cómo se comportará con otros rostros, condiciones de luz y equipos.
Por eso lo presento como un proyecto temprano que hay que evaluar con cuidado. Si te preocupa especialmente que alguien intente abrir tu computador de forma deliberada, estas limitaciones importan más que lo cómoda que sea la animación.
🤖 Qué tiene que ver Claude Code con todo esto
Lo construí con Claude Code en el Zenbook. Claude escribió el 100% de las cosas porque yo no sé casi nada de código, y la mitad de las cosas que usamos no las conocía antes de comenzar, por lo que no fue llegar y hacerlo de un tirón, sino una investigación conjunta de posibilidades, muchas pruebas, y luego ir iterando para aplicar mi criterio a lo largo del flujo.
Me interesa compartir esa parte porque es una aplicación concreta de trabajar con IA: partir de algo que quieres que tu computador haga y construir una herramienta para intentarlo. Hoy la parte técnica la puede cubrir la IA, la parte de ejecución y testeo también, pero el criterio, las ideas, y el "gusto" lo pones tú. La primera versión funcionaba, pero no se conectaba al menú de sistema de Omarchy, ni tenía un flujo claro para registrar tu rostro, te pedía comandos. Tampoco tenía la pantalla de escaneo en estilo synthwave. Esas cosas se las pedí yo. Lo mismo con testear distintas librerías, empujé a Claude (y mis tokens) a explorar, y luego cuando tocó el converger y decidir, ahí es donde entré yo.
Y también en probar, pedir correcciones, ajustar. El proceso lo guié yo en todo momento, y Claude ejecutaba y corregía. Por ejemplo, un problema concreto: registrar el rostro sentado frente al teclado no cubría bien el ángulo al abrir la tapa. El código documenta una prueba con 29 imágenes seguidas rechazadas por la postura. Además, la primera guía de registro indicaba al revés un movimiento de la cabeza y descartaba pasos completados cuando otro se demoraba demasiado.
De ahí salió la captura continua con indicadores de cobertura: mirar distintos puntos de la pantalla y ver qué falta, en vez de descifrar hacia dónde mover el mentón. Ese tipo de detalle define si una herramienta cómoda en teoría también lo es al usarla.
Pero “lo hice con IA” no responde si una cámara se comporta como esperamos, si un umbral de reconocimiento es adecuado o si una integración de bloqueo es segura. Eso se responde leyendo código y haciendo pruebas.
Que funcione para mí es evidencia sobre mi configuración. No es una certificación para la tuya.
Publicar el proyecto permite que otras personas revisen las decisiones, cuestionen los supuestos y ayuden con las pruebas que yo no puedo cubrir solo.
📷 Si tienes otra cámara, ahí puedes ayudar mucho

Una de las contribuciones más útiles es probar nirlock en otro notebook Linux con cámara infrarroja del tipo que utiliza Windows Hello.
Los perfiles de hardware son archivos TOML, un formato de configuración legible. La documentación explica cómo generar un candidato y validar el recorrido completo: instalar, registrar el rostro y desbloquear de verdad. Que el archivo tenga una sintaxis correcta todavía no significa que esa cámara funcione.
Puedes aportar mediante un pull request o usar el formulario para agregar una cámara. Sirve contar qué equipo, cámara y kernel usaste, y qué ocurrió en la prueba. No subas grabaciones del rostro ni plantillas biométricas a un issue público.
También viene bien ayuda con revisión de seguridad, pruebas reproducibles contra intentos de engaño, documentación e integraciones para otros escritorios. Si encuentras un problema de seguridad sensible, utiliza la vía de contacto privado que indica el repositorio.
Lee primero los requisitos de hardware y las limitaciones. Si lo pruebas en tu equipo, cuéntanos cómo resultó. Me gustaría que el próximo que quiera recuperar esta comodidad en Linux encuentre una respuesta un poco mejor que “en mi computador funciona”.