Apenas o README original é garantido estar atualizado.
Esta aplicação fornece exibição e controle de dispositivos Android conectados via USB (ou via TCP/IP). Não requer nenhum acesso root. Funciona em GNU/Linux, Windows e macOS.
Foco em:
- leveza (nativo, mostra apenas a tela do dispositivo)
- performance (30~60fps)
- qualidade (1920×1080 ou acima)
- baixa latência (35~70ms)
- baixo tempo de inicialização (~1 segundo para mostrar a primeira imagem)
- não intrusivo (nada é deixado instalado no dispositivo)
O dispositivo Android requer pelo menos a API 21 (Android 5.0).
Tenha certeza de ter ativado a depuração adb no(s) seu(s) dispositivo(s).
Em alguns dispositivos, você também precisa ativar uma opção adicional para controlá-lo usando teclado e mouse.
- Linux:
apt install scrcpy - Windows: [baixar][direct-win64]
- macOS:
brew install scrcpy
Compilar pelos arquivos fontes: BUILD (processo simplificado)
No Debian (testing e sid por enquanto) e Ubuntu (20.04):
apt install scrcpy
Um pacote Snap está disponível: scrcpy.
Para Fedora, um pacote COPR está disponível: scrcpy.
Para Arch Linux, um pacote AUR está disponível: scrcpy.
Para Gentoo, uma Ebuild está disponível: scrcpy/.
Você também pode compilar o app manualmente (processo simplificado).
Para Windows, por simplicidade, um arquivo pré-compilado com todas as dependências
(incluindo adb) está disponível:
Também está disponível em Chocolatey:
choco install scrcpy
choco install adb # se você ainda não o temE no Scoop:
scoop install scrcpy
scoop install adb # se você ainda não o temVocê também pode compilar o app manualmente.
A aplicação está disponível em Homebrew. Apenas instale-a:
brew install scrcpyVocê precisa do adb, acessível pelo seu PATH. Se você ainda não o tem:
brew install android-platform-toolsEstá também disponivel em MacPorts, que prepara o adb para você:
sudo port install scrcpyVocê também pode compilar o app manualmente.
Conecte um dispositivo Android e execute:
scrcpyTambém aceita argumentos de linha de comando, listados por:
scrcpy --helpAlgumas vezes, é útil espelhar um dispositivo Android em uma resolução menor para aumentar a performance.
Para limitar ambos (largura e altura) para algum valor (ex: 1024):
scrcpy --max-size 1024
scrcpy -m 1024 # versão curtaA outra dimensão é calculada para que a proporção do dispositivo seja preservada. Dessa forma, um dispositivo de 1920x1080 será espelhado em 1024x576.
O bit-rate padrão é 8 Mbps. Para mudar o bit-rate do vídeo (ex: para 2 Mbps):
scrcpy --bit-rate 2M
scrcpy -b 2M # versão curtaO frame rate de captura pode ser limitado:
scrcpy --max-fps 15Isso é oficialmente suportado desde o Android 10, mas pode funcionar em versões anteriores.
A tela do dispositivo pode ser cortada para espelhar apenas uma parte da tela.
Isso é útil por exemplo, para espelhar apenas um olho do Oculus Go:
scrcpy --crop 1224:1440:0:0 # 1224x1440 no deslocamento (0,0)Se --max-size também for especificado, o redimensionamento é aplicado após o corte.
Para travar a orientação do espelhamento:
scrcpy --lock-video-orientation # orientação inicial (Atual)
scrcpy --lock-video-orientation=0 # orientação natural
scrcpy --lock-video-orientation=1 # 90° sentido anti-horário
scrcpy --lock-video-orientation=2 # 180°
scrcpy --lock-video-orientation=3 # 90° sentido horárioIsso afeta a orientação de gravação.
A janela também pode ser rotacionada independentemente.
Alguns dispositivos têm mais de um encoder, e alguns deles podem causar problemas ou travar. É possível selecionar um encoder diferente:
scrcpy --encoder OMX.qcom.video.encoder.avcPara listar os encoders disponíveis, você pode passar um nome de encoder inválido, o erro dará os encoders disponíveis:
scrcpy --encoder _É possível gravar a tela enquanto ocorre o espelhamento:
scrcpy --record file.mp4
scrcpy -r file.mkvPara desativar o espelhamento durante a gravação:
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrompa a gravação com Ctrl+C"Frames pulados" são gravados, mesmo que não sejam exibidos em tempo real (por motivos de performance). Frames têm seu horário carimbado no dispositivo, então variação de atraso nos pacotes não impacta o arquivo gravado.
Em Linux, é possível enviar a transmissão do video para um disposiivo v4l2 loopback, assim o dispositivo Android pode ser aberto como uma webcam por qualquer ferramneta capaz de v4l2
The module v4l2loopback must be installed:
sudo apt install v4l2loopback-dkmsPara criar um dispositivo v4l2:
sudo modprobe v4l2loopbackIsso criara um novo dispositivo de vídeo em /dev/videoN, onde N é uma integer
(mais opções estão disponiveis
para criar varios dispositivos ou dispositivos com IDs específicas).
Para listar os dispositivos disponíveis:
# requer o pacote v4l-utils
v4l2-ctl --list-devices
# simples, mas pode ser suficiente
ls /dev/video*Para iniciar o scrcpy usando o coletor v4l2 (sink):
scrcpy --v4l2-sink=/dev/videoN
scrcpy --v4l2-sink=/dev/videoN --no-display # desativa a janela espelhada
scrcpy --v4l2-sink=/dev/videoN -N # versão curta(troque N pelo ID do dipositivo, verifique com ls /dev/video*)
Uma vez ativado, você pode abrir suas trasmissões de videos com uma ferramenta capaz de v4l2:
ffplay -i /dev/videoN
vlc v4l2:///dev/videoN # VLC pode adicionar um pouco de atraso de bufferingPor exemplo, você pode capturar o video dentro do OBS.
É possivel adicionar buffering. Isso aumenta a latência, mas reduz a tenção (jitter) (veja #2464).
A opção éta disponivel para buffering de exibição:
scrcpy --display-buffer=50 # adiciona 50 ms de buffering para a exibiçãoe coletor V4L2:
scrcpy --v4l2-buffer=500 # adiciona 500 ms de buffering para coletor V4L2,
Scrcpy usa adb para se comunicar com o dispositivo, e adb pode conectar-se a um
dispositivo via TCP/IP:
-
Conecte o dispositivo no mesmo Wi-Fi do seu computador.
-
Pegue o endereço IP do seu dispositivo, em Configurações → Sobre o telefone → Status, ou executando este comando:
adb shell ip route | awk '{print $9}'
-
Ative o adb via TCP/IP no seu dispositivo:
adb tcpip 5555. -
Desconecte seu dispositivo.
-
Conecte-se ao seu dispositivo:
adb connect DEVICE_IP:5555(substituaDEVICE_IP). -
Execute
scrcpycomo de costume.
Pode ser útil diminuir o bit-rate e a resolução:
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # versão curtaSe vários dispositivos são listados em adb devices, você deve especificar o serial:
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # versão curtaSe o dispositivo está conectado via TCP/IP:
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # versão curtaVocê pode iniciar várias instâncias do scrcpy para vários dispositivos.
Você pode usar AutoAdb:
autoadb scrcpy -s '{}'Para conectar-se a um dispositivo remoto, é possível conectar um cliente adb local a
um servidor adb remoto (contanto que eles usem a mesma versão do protocolo
adb):
adb kill-server # encerra o servidor adb local em 5037
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# mantenha isso abertoDe outro terminal:
scrcpyPara evitar ativar o encaminhamento de porta remota, você pode forçar uma conexão
de encaminhamento (note o -L em vez de -R):
adb kill-server # encerra o servidor adb local em 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# mantenha isso abertoDe outro terminal:
scrcpy --force-adb-forwardIgual a conexões sem fio, pode ser útil reduzir a qualidade:
scrcpy -b2M -m800 --max-fps 15
Por padrão, o título da janela é o modelo do dispositivo. Isso pode ser mudado:
scrcpy --window-title 'Meu dispositivo'A posição e tamanho iniciais da janela podem ser especificados:
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600Para desativar decorações de janela:
scrcpy --window-borderlessPara manter a janela do scrcpy sempre no topo:
scrcpy --always-on-topA aplicação pode ser iniciada diretamente em tela cheia:
scrcpy --fullscreen
scrcpy -f # versão curtaTela cheia pode ser alternada dinamicamente com MOD+f.
A janela pode ser rotacionada:
scrcpy --rotation 1Valores possíveis são:
0: sem rotação1: 90 graus sentido anti-horário2: 180 graus3: 90 graus sentido horário
A rotação também pode ser mudada dinamicamente com MOD+← (esquerda) e MOD+→ (direita).
Note que scrcpy controla 3 rotações diferentes:
- MOD+r requisita ao dispositivo para mudar entre retrato e paisagem (a aplicação em execução pode se recusar, se ela não suporta a orientação requisitada).
--lock-video-orientationmuda a orientação de espelhamento (a orientação do vídeo enviado pelo dispositivo para o computador). Isso afeta a gravação.--rotation(ou MOD+←/MOD+→) rotaciona apenas o conteúdo da janela. Isso afeta apenas a exibição, não a gravação.
Para desativar controles (tudo que possa interagir com o dispositivo: teclas de entrada, eventos de mouse, arrastar e soltar arquivos):
scrcpy --no-control
scrcpy -nSe vários displays estão disponíveis, é possível selecionar o display para espelhar:
scrcpy --display 1A lista de IDs dos displays pode ser obtida por:
adb shell dumpsys display # busca "mDisplayId=" na saída
O display secundário pode apenas ser controlado se o dispositivo roda pelo menos Android 10 (caso contrário é espelhado como apenas leitura).
Para evitar que o dispositivo seja suspenso após um delay quando o dispositivo é conectado:
scrcpy --stay-awake
scrcpy -wO estado inicial é restaurado quando o scrcpy é fechado.
É possível desligar a tela do dispositivo durante o início do espelhamento com uma opção de linha de comando:
scrcpy --turn-screen-off
scrcpy -SOu apertando MOD+o a qualquer momento.
Para ligar novamente, pressione MOD+Shift+o.
No Android, o botão de POWER sempre liga a tela. Por conveniência, se
POWER é enviado via scrcpy (via clique-direito ou MOD+p), ele
forçará a desligar a tela após um delay pequeno (numa base de melhor esforço).
O botão POWER físico ainda causará a tela ser ligada.
Também pode ser útil evitar que o dispositivo seja suspenso:
scrcpy --turn-screen-off --stay-awake
scrcpy -SwPara apresentações, pode ser útil mostrar toques físicos (no dispositivo físico).
Android fornece esta funcionalidade nas Opções do desenvolvedor.
Scrcpy fornece esta opção de ativar esta funcionalidade no início e restaurar o valor inicial no encerramento:
scrcpy --show-touches
scrcpy -tNote que isto mostra apenas toques físicos (com o dedo no dispositivo).
Por padrão, scrcpy não evita que o descanso de tela rode no computador.
Para desativá-lo:
scrcpy --disable-screensaverPressione MOD+r para mudar entre os modos retrato e paisagem.
Note que só será rotacionado se a aplicação em primeiro plano suportar a orientação requisitada.
Sempre que a área de transferência do Android muda, é automaticamente sincronizada com a área de transferência do computador.
Qualquer atalho com Ctrl é encaminhado para o dispositivo. Em particular:
- Ctrl+c tipicamente copia
- Ctrl+x tipicamente recorta
- Ctrl+v tipicamente cola (após a sincronização de área de transferência computador-para-dispositivo)
Isso tipicamente funciona como esperado.
O comportamento de fato depende da aplicação ativa, no entanto. Por exemplo, Termux envia SIGINT com Ctrl+c, e K-9 Mail compõe uma nova mensagem.
Para copiar, recortar e colar em tais casos (mas apenas suportado no Android >= 7):
- MOD+c injeta
COPY - MOD+x injeta
CUT - MOD+v injeta
PASTE(após a sincronização de área de transferência computador-para-dispositivo)
Em adição, MOD+Shift+v permite injetar o texto da área de transferência do computador como uma sequência de eventos de tecla. Isso é útil quando o componente não aceita colar texto (por exemplo no Termux), mas pode quebrar conteúdo não-ASCII.
ADVERTÊNCIA: Colar a área de transferência do computador para o dispositivo (tanto via Ctrl+v quanto MOD+v) copia o conteúdo para a área de transferência do dispositivo. Como consequência, qualquer aplicação Android pode ler o seu conteúdo. Você deve evitar colar conteúdo sensível (como senhas) dessa forma.
Alguns dispositivos não se comportam como esperado quando a área de transferência é definida
programaticamente. Uma opção --legacy-paste é fornecida para mudar o comportamento
de Ctrl+v e MOD+v para que eles
também injetem o texto da área de transferência do computador como uma sequência de eventos de tecla (da mesma
forma que MOD+Shift+v).
Para simular "pinçar para dar zoom": Ctrl+clicar-e-mover.
Mais precisamente, segure Ctrl enquanto pressiona o botão de clique-esquerdo. Até que o botão de clique-esquerdo seja liberado, todos os movimentos do mouse ampliar e rotacionam o conteúdo (se suportado pelo app) relativo ao centro da tela.
Concretamente, scrcpy gera eventos adicionais de toque de um "dedo virtual" em uma posição invertida em relação ao centro da tela.
Existem dois tipos de eventos gerados ao digitar um texto:
- eventos de tecla, sinalizando que a tecla foi pressionada ou solta;
- eventos de texto, sinalizando que o texto foi inserido.
Por padrão, letras são injetadas usando eventos de tecla, assim o teclado comporta-se como esperado em jogos (normalmente para teclas WASD).
Mas isso pode causar problemas. Se você encontrar tal problema, você pode evitá-lo com:
scrcpy --prefer-text(mas isso vai quebrar o comportamento do teclado em jogos)
Por padrão, segurar uma tecla gera eventos de tecla repetidos. Isso pode causar problemas de performance em alguns jogos, onde esses eventos são inúteis de qualquer forma.
Para evitar o encaminhamento eventos de tecla repetidos:
scrcpy --no-key-repeatPor padrão, clique-direito dispara BACK (ou POWER) e clique-do-meio dispara HOME. Para desabilitar esses atalhos e encaminhar os cliques para o dispositivo:
scrcpy --forward-all-clicksPara instalar um APK, arraste e solte o arquivo APK (com extensão .apk) na janela
scrcpy.
Não existe feedback visual, um log é imprimido no console.
Para enviar um arquivo para /sdcard/Download/ no dispositivo, arraste e solte um arquivo (não-APK) para a
janela do scrcpy.
Não existe feedback visual, um log é imprimido no console.
O diretório alvo pode ser mudado ao iniciar:
scrcpy --push-target /sdcard/foo/bar/Áudio não é encaminhado pelo scrcpy. Use sndcpy.
Também veja issue #14.
Na lista a seguir, MOD é o modificador de atalho. Por padrão, é Alt (esquerdo) ou Super (esquerdo).
Ele pode ser mudado usando --shortcut-mod. Possíveis teclas são lctrl, rctrl,
lalt, ralt, lsuper e rsuper. Por exemplo:
# usar RCtrl para atalhos
scrcpy --shortcut-mod=rctrl
# usar tanto LCtrl+LAlt quanto LSuper para atalhos
scrcpy --shortcut-mod=lctrl+lalt,lsuperSuper é tipicamente a tecla Windows ou Cmd.
| Ação | Atalho |
|---|---|
| Mudar modo de tela cheia | MOD+f |
| Rotacionar display para esquerda | MOD+← (esquerda) |
| Rotacionar display para direita | MOD+→ (direita) |
| Redimensionar janela para 1:1 (pixel-perfeito) | MOD+g |
| Redimensionar janela para remover bordas pretas | MOD+w | Clique-duplo-esquerdo¹ |
Clicar em HOME |
MOD+h | Clique-do-meio |
Clicar em BACK |
MOD+b | Clique-direito² |
Clicar em APP_SWITCH |
MOD+s | Clique-do-4.°³ |
Clicar em MENU (desbloquear tela) |
MOD+m |
Clicar em VOLUME_UP |
MOD+↑ (cima) |
Clicar em VOLUME_DOWN |
MOD+↓ (baixo) |
Clicar em POWER |
MOD+p |
| Ligar | Clique-direito² |
| Desligar tela do dispositivo (continuar espelhando) | MOD+o |
| Ligar tela do dispositivo | MOD+Shift+o |
| Rotacionar tela do dispositivo | MOD+r |
| Expandir painel de notificação | MOD+n | Clique-do-5.°³ |
| Expandir painel de configurção | MOD+n+n | Clique-duplo-do-5.°³ |
| Colapsar paineis | MOD+Shift+n |
| Copiar para área de transferência⁴ | MOD+c |
| Recortar para área de transferência⁴ | MOD+x |
| Sincronizar áreas de transferência e colar⁴ | MOD+v |
| Injetar texto da área de transferência do computador | MOD+Shift+v |
| Ativar/desativar contador de FPS (em stdout) | MOD+i |
| Pinçar para dar zoom | Ctrl+Clicar-e-mover |
¹Clique-duplo-esquerdo na borda preta para remove-la.
²Clique-direito liga a tela caso esteja desligada, pressione BACK caso contrário.
³4.° and 5.° botões do mouse, caso o mouse possua.
⁴Apenas em Android >= 7.
Atalhos com teclas reptidas são executados soltando e precionando a tecla uma segunda vez. Por exemplo, para executar "Expandir painel de Configurção":
- Mantenha pressionado MOD.
- Depois click duas vezes n.
- Finalmente, solte MOD.
Todos os atalhos Ctrl+tecla são encaminhados para o dispositivo, para que eles sejam tratados pela aplicação ativa.
Para usar um binário adb específico, configure seu caminho na variável de ambiente
ADB:
ADB=/caminho/para/adb scrcpyPara sobrepor o caminho do arquivo scrcpy-server, configure seu caminho em
SCRCPY_SERVER_PATH.
Um colega me desafiou a encontrar um nome tão impronunciável quanto gnirehtet.
strcpy copia uma string; scrcpy copia uma screen.
Veja BUILD.
Veja o FAQ.
Leia a página dos desenvolvedores.
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.
