Looker es un setup minimalista y abierto para acceder al escritorio de una NVIDIA Jetson Nano desde cualquier equipo Windows, en cualquier red, con un solo doble-click. Usa Tailscale como red overlay autenticada (sin port-forwarding del router) y x11vnc + TigerVNC viewer para el escritorio. Todo open source, todo bajo MIT.
- Por que Looker
- Arquitectura
- Quick start
- Estructura del repo
- Documentacion detallada
- Caracteristicas
- Requisitos
- Roadmap
- Contribuir
- Licencia
Acceder a una Jetson Nano headless desde fuera de casa, sin abrir puertos en el router y sin pagar TeamViewer/AnyDesk, es un problema comun. Soluciones tipicas (Xvnc + script bash a mano, NoMachine, RealVNC Cloud, X11 forwarding sobre SSH) o son invasivas, propietarias, o requieren configuracion compleja cada vez que cambias de equipo.
Looker resuelve esto con dos scripts idempotentes, uno para cada lado:
server/install-server.sh— corre 1 vez en la Jetson. Instala todo y deja un servicio systemd que reconecta solo al boot.client/install.ps1— corre en cualquier Windows. Instala TigerVNC + Tailscale viawingety crea un acceso directo en el Desktop que conecta sin pedir password.
Despues de eso: doble click al icono "Jetson Nano" del Desktop -> escritorio remoto en pantalla completa, desde donde sea.
┌─────────────────────────┐ ┌──────────────────────────┐
│ Cualquier Windows │ │ Jetson Nano │
│ │ │ (24/7, sin monitor) │
│ ┌───────────────────┐ │ │ │
│ │ TigerVNC viewer │◄─┼─── TCP 5900 ────┼──► x11vnc.service ──┐ │
│ │ (.lnk en Desktop) │ │ │ │ │
│ └────────┬──────────┘ │ │ x.org :0 ◄────┘ │
│ │ │ │ GDM autologin │
│ ┌────────▼──────────┐ │ │ ┌─────────────────────┐ │
│ │ Tailscale (WG) │◄─┼── overlay ─────►│ │ Tailscale (WG) │ │
│ └────────┬──────────┘ │ 100.x.y.z/32 │ │ tailscaled.service │ │
│ │ │ │ └────────┬────────────┘ │
└───────────┼─────────────┘ └───────────┼──────────────┘
│ │
└───────── NAT/firewalls atravesados ───────┘
direct WireGuard si ambos peers exponen UDP,
fallback a DERP relay de Tailscale si no
- Capa de red: Tailscale arma un tunel WireGuard cifrado y autenticado entre los peers. Te da una IP estable
100.x.y.zpara la Jetson. Atraviesa NATs simetricos. Sin abrir puertos en el router. - Capa de escritorio: x11vnc comparte la sesion X que ya esta corriendo en la Jetson (
:0activada por GDM con autologin). No levanta un Xorg paralelo; usa el que ya esta vivo. - Cliente: TigerVNC viewer en fullscreen + scaling automatico maneja la resolucion baja del Tegra sin monitor fisico (640×480 escalado a la pantalla del cliente).
- Persistencia: systemd reinicia x11vnc si crashea (
Restart=on-failure). Tailscale reconecta solo al boot. GDM autologin levanta la sesion sin teclado.
Ver docs/architecture.md para diagramas de secuencia, decisiones de diseno y trade-offs.
# en la Jetson
git clone https://github.com/<OWNER>/looker-remote-desktop.git
cd looker-remote-desktop/server
sudo ./install-server.sh
# (te pide el password VNC interactivamente — usa <=8 chars)
# autenticar Tailscale (abre URL en navegador):
sudo tailscale up --ssh --hostname=jetson-nano
# anota la IP que tu cuenta Tailscale asigno:
tailscale ip -4Detalles paso a paso: docs/server-setup.md.
# en tu Windows
git clone https://github.com/<OWNER>/looker-remote-desktop.git
cd looker-remote-desktop
# editar client/config/connection.json y poner el "host" con la IP Tailscale del servidor.
# correr el installer (puede pedir UAC)
.\client\install.ps1Luego abre el icono de Tailscale en el system tray -> Log in con la misma cuenta que usaste en la Jetson. Despues doble click al shortcut "Jetson Nano" del Desktop.
Detalles paso a paso: docs/client-setup.md.
looker-remote-desktop/
├── client/ Cliente Windows (PowerShell)
│ ├── install.ps1 Installer principal
│ ├── uninstall.ps1 Rollback
│ ├── config/
│ │ ├── connection.json Configuracion local (NO commit — gitignored)
│ │ └── connection.example.json Template (committed)
│ ├── lib/
│ │ ├── Logging.ps1 Helpers de logging
│ │ ├── Winget.ps1 Wrappers idempotentes de winget
│ │ └── Shortcut.ps1 Creacion del .lnk
│ └── secrets/ Password file (NO commit — gitignored)
│
├── server/ Servidor Jetson/Linux (bash)
│ ├── install-server.sh Installer idempotente
│ ├── uninstall-server.sh Rollback
│ ├── configs/
│ │ ├── x11vnc.service systemd unit
│ │ └── disable-screen-blanking.desktop Autostart
│ └── lib/
│ └── utils.sh Helpers compartidos
│
├── docs/ Documentacion detallada
│ ├── architecture.md
│ ├── server-setup.md
│ ├── client-setup.md
│ ├── troubleshooting.md
│ ├── security.md
│ └── faq.md
│
├── .github/ GitHub-specific
│ ├── ISSUE_TEMPLATE/
│ ├── PULL_REQUEST_TEMPLATE.md
│ └── workflows/lint.yml ShellCheck + PSScriptAnalyzer + markdownlint
│
├── scripts/ Utilidades auxiliares
├── .gitignore Excluye secrets/, connection.json, *.passwd
├── .gitattributes CRLF para .ps1, LF para .sh
├── .editorconfig
├── LICENSE MIT
├── CHANGELOG.md
├── CONTRIBUTING.md
├── VERSION
└── README.md Este archivo
| Documento | Contenido |
|---|---|
docs/architecture.md |
Stack tecnico, flujo de datos, decisiones de diseno (por que Tailscale, por que x11vnc, por que no Xvnc, etc.) |
docs/server-setup.md |
Setup completo del lado Jetson, paso a paso, con verificaciones intermedias |
docs/client-setup.md |
Setup completo del lado cliente Windows + flags de TigerVNC viewer y trade-offs |
docs/troubleshooting.md |
Sintomas comunes y como diagnosticar (pantalla negra, no conecta, lockscreen, etc.) |
docs/security.md |
Modelo de amenaza, hardening, qué hacer si se filtra el password file |
docs/faq.md |
Preguntas frecuentes |
- ✅ Cero port-forwarding — Tailscale atraviesa NAT.
- ✅ Idempotente — los installers se pueden correr 2 veces sin daño.
- ✅ Reconexion automatica —
Restart=on-failureen systemd, autoconnect de Tailscale al boot. - ✅ Multi-cliente —
-shareden x11vnc permite varios viewers simultaneos. - ✅ Bajo overhead — ~50 MB RAM en la Jetson (x11vnc + tailscaled).
- ✅ Acceso 24/7 sin teclado fisico — GDM autologin + DPMS off.
- ✅ Open source / MIT — auditas y modificas todo.
- NVIDIA Jetson Nano (o Linux ARM/x86 equivalente con GDM3).
- JetPack 4.6.x (Ubuntu 18.04, L4T R32.7.1) recomendado.
- Conexion a internet para
apt updatey descargar Tailscale. - Acceso
sudo.
- Windows 10 (1809+) o Windows 11.
winget(App Installer) instalado — viene preinstalado en Windows 11 y Win10 reciente; si falta, instalalo desde Microsoft Store.- Cuenta gratuita de Tailscale (puedes crearla en el flujo del login, tier free permite hasta 100 dispositivos).
Ideas que pueden entrar en futuras versiones (PRs bienvenidos):
- Variante Linux/macOS del cliente.
- Soporte multiple hosts (selector de host en el shortcut).
- Cliente Android/iOS guiado.
- Headscale como reemplazo de Tailscale para self-host completo.
- Auto-rotate del password VNC.
Ver CONTRIBUTING.md. Issues y PRs bienvenidos.
MIT © 2026 Nicolas Cuaran.