Skip to content

NicolasCuaran/looker-remote-desktop

Repository files navigation

Looker — Remote Desktop sobre Tailscale para Jetson Nano

License: MIT Platform Client Network Status

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.

Tabla de contenidos

Por que Looker

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 via winget y 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.

Arquitectura

┌─────────────────────────┐                 ┌──────────────────────────┐
│   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.z para 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 (:0 activada 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.

Quick start

Servidor (Jetson)

# 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 -4

Detalles paso a paso: docs/server-setup.md.

Cliente (Windows)

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

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

Estructura del repo

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

Documentacion detallada

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

Caracteristicas

  • Cero port-forwarding — Tailscale atraviesa NAT.
  • Idempotente — los installers se pueden correr 2 veces sin daño.
  • Reconexion automaticaRestart=on-failure en systemd, autoconnect de Tailscale al boot.
  • Multi-cliente-shared en 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.

Requisitos

Servidor

  • 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 update y descargar Tailscale.
  • Acceso sudo.

Cliente

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

Roadmap

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.

Contribuir

Ver CONTRIBUTING.md. Issues y PRs bienvenidos.

Licencia

MIT © 2026 Nicolas Cuaran.

About

Looker - Minimal open-source remote desktop for NVIDIA Jetson Nano over Tailscale + x11vnc. One-click Windows client, idempotent server installer.

Topics

Resources

License

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors