Convierte cualquier ordenador (Linux, Windows, otro Mac, tablet…) en una segunda pantalla extendida de tu Mac usando solo un navegador web. Sin apps de pago, sin instalar nada en el segundo equipo.
El Mac captura una pantalla y la transmite por la red local vía WebSocket. El segundo equipo solo abre una URL en el navegador. Además, el ratón y el teclado del segundo equipo controlan esa pantalla.
- 🖥️ Pantalla extendida real (combinado con un display virtual como BetterDisplay)
- 🌐 Cliente sin instalación: solo un navegador en el segundo equipo
- 🖱️ Control de ratón y teclado desde el segundo equipo hacia el Mac
- 🔒 100% red local: nada sale a internet (WebSocket directo entre los dos equipos)
- ⚙️ Configurable: FPS, calidad, monitor y escala
- Mac (el servidor) con Python 3.8+
- Cualquier equipo con un navegador (el cliente)
- Ambos en la misma red local
git clone https://github.com/<tu-usuario>/SecondScreen.git
cd SecondScreen
pip3 install -r requirements.txtSi quieres una pantalla extendida real (no un duplicado), crea un display virtual en el Mac con BetterDisplay (gratuito) y ponlo en modo extendido en Ajustes del sistema → Pantallas.
En Ajustes del sistema → Privacidad y seguridad → Accesibilidad, activa la app desde la que ejecutas el script (Terminal, iTerm o Python). Sin esto, el cursor no se moverá.
python3 server.pyVerás algo así:
Monitores detectados: 2
Monitor 1: 1440x900
Monitor 2: 1920x1080
Capturando monitor 2 | 20 FPS | Calidad 75%
Control de ratón/teclado: ACTIVADO
Abre esto en el navegador del Debian:
--> http://192.168.1.42:8080 <--
Abre esa URL en el navegador del segundo equipo y pulsa F11 para pantalla completa. ¡Listo!
Edita las variables al principio de server.py:
| Variable | Por defecto | Descripción |
|---|---|---|
HTTP_PORT |
8080 |
Puerto de la página web |
WS_PORT |
8765 |
Puerto del WebSocket (vídeo + control) |
FPS |
20 |
Fotogramas por segundo |
QUALITY |
75 |
Calidad JPEG (1–100). Baja si hay lag |
MONITOR |
2 |
Monitor a capturar (1 = principal, 2 = virtual) |
CONTROL |
True |
Permitir ratón/teclado desde el cliente |
SCALE |
1.0 |
Ajuste de coordenadas (2.0 en pantallas Retina) |
| Acción en el navegador | Resultado en el Mac |
|---|---|
| Mover ratón | Mueve el cursor |
| Clic / clic derecho / doble clic | Igual en el Mac |
| Rueda del ratón | Scroll |
| Teclado | Escribe en la ventana activa |
F11 |
Pantalla completa (local, no se reenvía) |
- El cursor cae en la posición equivocada → ajusta
SCALE(2.0para Retina,0.5si va al doble). - El ratón no se mueve → falta el permiso de Accesibilidad (paso 2).
MONITOR=2 no existe→ no hay pantalla virtual creada; usaMONITOR=1o crea el display virtual.- Va con lag → baja
FPSy/oQUALITY. - No conecta → comprueba que ambos equipos están en la misma red y que el firewall del Mac no bloquea los puertos.
┌─────────────┐ captura pantalla (mss) ┌──────────────────┐
│ │ JPEG → WebSocket ───────► │ │
│ Mac │ │ Navegador del │
│ (servidor) │ ◄─── eventos ratón/teclado │ segundo equipo │
│ │ (pynput) │ (cliente) │
└─────────────┘ └──────────────────┘
msscaptura el monitor elegido.- Pillow comprime cada frame a JPEG.
websocketstransmite los frames y recibe los eventos de entrada.pynputreproduce ratón y teclado en el Mac.
MIT — ver LICENSE.
Hecho por 0scar y la IA :)