Solo se garantiza que el archivo README original esté actualizado.
Esta aplicación proporciona imagen y control de un dispositivo Android conectado por USB (o por TCP/IP). No requiere acceso root. Compatible con GNU/Linux, Windows y macOS.
Sus características principales son:
- ligero (nativo, solo muestra la imagen del dispositivo)
- desempeño (30~60fps)
- calidad (1920×1080 o superior)
- baja latencia (35~70ms)
- corto tiempo de inicio (~1 segundo para mostrar la primera imagen)
- no intrusivo (no se deja nada instalado en el dispositivo)
El dispositivo Android requiere como mínimo API 21 (Android 5.0).
Asegurate de habilitar el adb debugging en tu(s) dispositivo(s).
En algunos dispositivos, también necesitas habilitar una opción adicional para controlarlo con el teclado y ratón.
- Linux:
apt install scrcpy
- Windows: download
- macOS:
brew install scrcpy
Construir desde la fuente: BUILD (proceso simplificado)
En Debian (test y sid por ahora) y Ubuntu (20.04):
apt install scrcpy
Para Fedora, hay un paquete COPR: scrcpy
.
Para Arch Linux, hay un paquete AUR: scrcpy
.
Para Gentoo, hay un paquete Ebuild: scrcpy/
.
También puedes construir la aplicación manualmente (proceso simplificado).
Para Windows, por simplicidad, hay un pre-compilado con todas las dependencias
(incluyendo adb
):
También está disponible en Chocolatey:
choco install scrcpy
choco install adb # si aún no está instalado
Y en Scoop:
scoop install scrcpy
scoop install adb # si aún no está instalado
También puedes construir la aplicación manualmente.
La aplicación está disponible en Homebrew. Solo instalala:
brew install scrcpy
Necesitarás adb
, accesible desde PATH
. Si aún no lo tienes:
brew install android-platform-tools
También está disponible en MacPorts, que configurará el adb automáticamente:
sudo port install scrcpy
También puedes construir la aplicación manualmente.
Enchufa el dispositivo Android, y ejecuta:
scrcpy
Acepta argumentos desde la línea de comandos, listados en:
scrcpy --help
A veces es útil reducir la definición de la imagen del dispositivo Android para aumentar el desempeño.
Para limitar el ancho y la altura a un valor específico (ej. 1024):
scrcpy --max-size 1024
scrcpy -m 1024 # versión breve
La otra dimensión es calculada para conservar el aspect ratio del dispositivo. De esta forma, un dispositivo en 1920×1080 será transmitido a 1024×576.
El bit-rate por defecto es 8 Mbps. Para cambiar el bit-rate del video (ej. a 2 Mbps):
scrcpy --bit-rate 2M
scrcpy -b 2M # versión breve
El fps puede ser limitado:
scrcpy --max-fps 15
Es oficialmente soportado desde Android 10, pero puede funcionar en versiones anteriores.
La imagen del dispositivo puede ser recortada para transmitir solo una parte de la pantalla.
Por ejemplo, puede ser útil para transmitir la imagen de un solo ojo del Oculus Go:
scrcpy --crop 1224:1440:0:0 # 1224x1440 con coordenadas de origen en (0,0)
Si --max-size
también está especificado, el cambio de tamaño es aplicado después de cortar.
Para fijar la rotación de la transmisión:
scrcpy --lock-video-orientation 0 # orientación normal
scrcpy --lock-video-orientation 1 # 90° contrarreloj
scrcpy --lock-video-orientation 2 # 180°
scrcpy --lock-video-orientation 3 # 90° sentido de las agujas del reloj
Esto afecta la rotación de la grabación.
La ventana también puede ser rotada independientemente.
Algunos dispositivos pueden tener más de una rotación, y algunos pueden causar problemas o errores. Es posible seleccionar un codificador diferente:
scrcpy --encoder OMX.qcom.video.encoder.avc
Para listar los codificadores disponibles, puedes pasar un nombre de codificador inválido, el error te dará los codificadores disponibles:
scrcpy --encoder _
Es posible grabar la pantalla mientras se transmite:
scrcpy --record file.mp4
scrcpy -r file.mkv
Para grabar sin transmitir la pantalla:
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrumpe la grabación con Ctrl+C
"Skipped frames" son grabados, incluso si no son mostrados en tiempo real (por razones de desempeño). Los frames tienen marcas de tiempo en el dispositivo, por lo que el "packet delay variation" no impacta el archivo grabado.
Scrcpy usa adb
para comunicarse con el dispositivo, y adb
puede conectarse vía TCP/IP:
-
Conecta el dispositivo al mismo Wi-Fi que tu computadora.
-
Obtén la dirección IP del dispositivo, en Ajustes → Acerca del dispositivo → Estado, o ejecutando este comando:
adb shell ip route | awk '{print $9}'
-
Habilita adb vía TCP/IP en el dispositivo:
adb tcpip 5555
. -
Desenchufa el dispositivo.
-
Conéctate a tu dispositivo:
adb connect IP_DEL_DISPOSITIVO:5555
(reemplazaIP_DEL_DISPOSITIVO
). -
Ejecuta
scrcpy
con normalidad.
Podría resultar útil reducir el bit-rate y la definición:
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # versión breve
Si hay muchos dispositivos listados en adb devices
, será necesario especificar el número de serie:
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # versión breve
Si el dispositivo está conectado por TCP/IP:
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # versión breve
Puedes iniciar múltiples instancias de scrcpy para múltiples dispositivos.
Puedes utilizar AutoAdb:
autoadb scrcpy -s '{}'
Para conectarse a un dispositivo remoto, es posible conectar un cliente local de adb
a un servidor remoto adb
(siempre y cuando utilicen la misma versión de protocolos adb):
adb kill-server # cierra el servidor local adb en 5037
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# conserva este servidor abierto
Desde otra terminal:
scrcpy
Para evitar habilitar "remote port forwarding", puedes forzar una "forward connection" (nótese el argumento -L
en vez de -R
):
adb kill-server # cierra el servidor local adb en 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# conserva este servidor abierto
Desde otra terminal:
scrcpy --force-adb-forward
Al igual que las conexiones inalámbricas, puede resultar útil reducir la calidad:
scrcpy -b2M -m800 --max-fps 15
Por defecto, el título de la ventana es el modelo del dispositivo. Puede ser modificado:
scrcpy --window-title 'My device'
La posición y tamaño inicial de la ventana puede ser especificado:
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
Para deshabilitar el diseño de la ventana:
scrcpy --window-borderless
Para mantener la ventana de scrcpy siempre adelante:
scrcpy --always-on-top
La aplicación puede ser iniciada en pantalla completa:
scrcpy --fullscreen
scrcpy -f # versión breve
Puede entrar y salir de la pantalla completa con la combinación MOD+f.
Se puede rotar la ventana:
scrcpy --rotation 1
Los valores posibles son:
0
: sin rotación1
: 90 grados contrarreloj2
: 180 grados3
: 90 grados en sentido de las agujas del reloj
La rotación también puede ser modificada con la combinación de teclas MOD+← (izquierda) y MOD+→ (derecha).
Nótese que scrcpy maneja 3 diferentes rotaciones:
- MOD+r solicita al dispositivo cambiar entre vertical y horizontal (la aplicación en uso puede rechazarlo si no soporta la orientación solicitada).
--lock-video-orientation
cambia la rotación de la transmisión (la orientación del video enviado a la PC). Esto afecta a la grabación.--rotation
(o MOD+←/MOD+→) rota solo el contenido de la imagen. Esto solo afecta a la imagen mostrada, no a la grabación.
Para deshabilitar los controles (todo lo que interactúe con el dispositivo: eventos del teclado, eventos del mouse, arrastrar y soltar archivos):
scrcpy --no-control
scrcpy -n # versión breve
Si múltiples pantallas están disponibles, es posible elegir cual transmitir:
scrcpy --display 1
Los ids de las pantallas se pueden obtener con el siguiente comando:
adb shell dumpsys display # busque "mDisplayId=" en la respuesta
La segunda pantalla solo puede ser manejada si el dispositivo cuenta con Android 10 (en caso contrario será transmitida en el modo solo lectura).
Para evitar que el dispositivo descanse después de un tiempo mientras está conectado:
scrcpy --stay-awake
scrcpy -w # versión breve
La configuración original se restaura al cerrar scrcpy.
Es posible apagar la pantalla mientras se transmite al iniciar con el siguiente comando:
scrcpy --turn-screen-off
scrcpy -S # versión breve
O presionando MOD+o en cualquier momento.
Para volver a prenderla, presione MOD+Shift+o.
En Android, el botón de POWER
siempre prende la pantalla. Por conveniencia, si POWER
es enviado vía scrcpy (con click-derecho o MOD+p), esto forzará a apagar la pantalla con un poco de atraso (en la mejor de las situaciones). El botón físico POWER
seguirá prendiendo la pantalla.
También puede resultar útil para evitar que el dispositivo entre en inactividad:
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw # versión breve
Por defecto, para minimizar la latencia, scrcpy siempre renderiza el último frame disponible decodificado, e ignora cualquier frame anterior.
Para forzar el renderizado de todos los frames (a costo de posible aumento de latencia), use:
scrcpy --render-expired-frames
Para presentaciones, puede resultar útil mostrar los clicks físicos (en el dispositivo físicamente).
Android provee esta opción en Opciones para desarrolladores.
Scrcpy provee una opción para habilitar esta función al iniciar la aplicación y restaurar el valor original al salir:
scrcpy --show-touches
scrcpy -t # versión breve
Nótese que solo muestra los clicks físicos (con el dedo en el dispositivo).
Por defecto, scrcpy no evita que el protector de pantalla se active en la computadora.
Para deshabilitarlo:
scrcpy --disable-screensaver
Presione MOD+r para cambiar entre posición vertical y horizontal.
Nótese que solo rotará si la aplicación activa soporta la orientación solicitada.
Cuando que el portapapeles de Android cambia, automáticamente se sincroniza al portapapeles de la computadora.
Cualquier shortcut con Ctrl es enviado al dispositivo. En particular:
- Ctrl+c normalmente copia
- Ctrl+x normalmente corta
- Ctrl+v normalmente pega (después de la sincronización de portapapeles entre la computadora y el dispositivo)
Esto normalmente funciona como es esperado.
Sin embargo, este comportamiento depende de la aplicación en uso. Por ejemplo, Termux envía SIGINT con Ctrl+c, y K-9 Mail crea un nuevo mensaje.
Para copiar, cortar y pegar, en tales casos (solo soportado en Android >= 7):
- MOD+c inyecta
COPY
- MOD+x inyecta
CUT
- MOD+v inyecta
PASTE
(después de la sincronización de portapapeles entre la computadora y el dispositivo)
Además, MOD+Shift+v permite inyectar el texto en el portapapeles de la computadora como una secuencia de teclas. Esto es útil cuando el componente no acepta pegado de texto (por ejemplo en Termux), pero puede romper caracteres no pertenecientes a ASCII.
AVISO: Pegar de la computadora al dispositivo (tanto con Ctrl+v o MOD+v) copia el contenido al portapapeles del dispositivo. Como consecuencia, cualquier aplicación de Android puede leer su contenido. Debería evitar pegar contenido sensible (como contraseñas) de esta forma.
Algunos dispositivos no se comportan como es esperado al establecer el portapapeles programáticamente. La opción --legacy-paste
está disponible para cambiar el comportamiento de Ctrl+v y MOD+v para que también inyecten el texto del portapapeles de la computadora como una secuencia de teclas (de la misma forma que MOD+Shift+v).
Para simular "pinch-to-zoom": Ctrl+click-y-mover.
Más precisamente, mantén Ctrl mientras presionas botón izquierdo. Hasta que no se suelte el botón, todos los movimientos del mouse cambiarán el tamaño y rotación del contenido (si es soportado por la app en uso) respecto al centro de la pantalla.
Concretamente, scrcpy genera clicks adicionales con un "dedo virtual" en la posición invertida respecto al centro de la pantalla.
Existen dos tipos de eventos generados al escribir texto:
- key events, marcando si la tecla es presionada o soltada;
- text events, marcando si un texto fue introducido.
Por defecto, las letras son inyectadas usando key events, para que el teclado funcione como es esperado en juegos (típicamente las teclas WASD).
Pero esto puede causar problemas. Si encuentras tales problemas, los puedes evitar con:
scrcpy --prefer-text
(Pero esto romperá el comportamiento del teclado en los juegos)
Por defecto, mantener una tecla presionada genera múltiples key events. Esto puede causar problemas de desempeño en algunos juegos, donde estos eventos no tienen sentido de todos modos.
Para evitar enviar key events repetidos:
scrcpy --no-key-repeat
Por defecto, botón derecho ejecuta RETROCEDER (o ENCENDIDO) y botón del medio INICIO. Para inhabilitar estos atajos y enviar los clicks al dispositivo:
scrcpy --forward-all-clicks
Para instalar un APK, arrastre y suelte el archivo APK (terminado en .apk
) a la ventana de scrcpy.
No hay respuesta visual, un mensaje se escribirá en la consola.
Para enviar un archivo a /sdcard/
en el dispositivo, arrastre y suelte un archivo (no APK) a la ventana de scrcpy.
No hay respuesta visual, un mensaje se escribirá en la consola.
El directorio de destino puede ser modificado al iniciar:
scrcpy --push-target=/sdcard/Download/
Scrcpy no envía el audio. Use sndcpy.
También lea issue #14.
En la siguiente lista, MOD es el atajo modificador. Por defecto es Alt (izquierdo) o Super (izquierdo).
Se puede modificar usando --shortcut-mod
. Las posibles teclas son lctrl
(izquierdo), rctrl
(derecho), lalt
(izquierdo), ralt
(derecho), lsuper
(izquierdo) y rsuper
(derecho). Por ejemplo:
# use RCtrl para los atajos
scrcpy --shortcut-mod=rctrl
# use tanto LCtrl+LAlt o LSuper para los atajos
scrcpy --shortcut-mod=lctrl+lalt,lsuper
Super es generalmente la tecla Windows o Cmd.
Acción | Atajo |
---|---|
Alterne entre pantalla compelta | MOD+f |
Rotar pantalla hacia la izquierda | MOD+← (izquierda) |
Rotar pantalla hacia la derecha | MOD+→ (derecha) |
Ajustar ventana a 1:1 ("pixel-perfect") | MOD+g |
Ajustar ventana para quitar los bordes negros | MOD+w | Doble click¹ |
Click en INICIO |
MOD+h | Botón del medio |
Click en RETROCEDER |
MOD+b | Botón derecho² |
Click en CAMBIAR APLICACIÓN |
MOD+s |
Click en MENÚ (desbloquear pantalla) |
MOD+m |
Click en SUBIR VOLUMEN |
MOD+↑ (arriba) |
Click en BAJAR VOLUME |
MOD+↓ (abajo) |
Click en ENCENDIDO |
MOD+p |
Encendido | Botón derecho² |
Apagar pantalla (manteniendo la transmisión) | MOD+o |
Encender pantalla | MOD+Shift+o |
Rotar pantalla del dispositivo | MOD+r |
Abrir panel de notificaciones | MOD+n |
Cerrar panel de notificaciones | MOD+Shift+n |
Copiar al portapapeles³ | MOD+c |
Cortar al portapapeles³ | MOD+x |
Synchronizar portapapeles y pegar³ | MOD+v |
inyectar texto del portapapeles de la PC | MOD+Shift+v |
Habilitar/Deshabilitar contador de FPS (en stdout) | MOD+i |
Pellizcar para zoom | Ctrl+click-y-mover |
¹Doble click en los bordes negros para eliminarlos.
²Botón derecho enciende la pantalla si estaba apagada, sino ejecuta RETROCEDER.
³Solo en Android >= 7.
Todos los atajos Ctrl+tecla son enviados al dispositivo para que sean manejados por la aplicación activa.
Para usar un binario de adb en particular, configure el path ADB
en las variables de entorno:
ADB=/path/to/adb scrcpy
Para sobreescribir el path del archivo scrcpy-server
, configure el path en SCRCPY_SERVER_PATH
.
Un colega me retó a encontrar un nombre tan impronunciable como gnirehtet.
strcpy
copia un string; scrcpy
copia un screen.
Véase BUILD (en inglés).
Vea las preguntas frecuentes (en inglés).
Lea la hoja de desarrolladores (en inglés).
Copyright (C) 2018 Genymobile
Copyright (C) 2018-2021 Romain Vimont
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- Introducing scrcpy (en inglés)
- Scrcpy now works wirelessly (en inglés)