Apri il README originale e sempre aggiornato.
Questa applicazione fornisce la visualizzazione e il controllo dei dispositivi Android collegati via USB (o via TCP/IP). Non richiede alcun accesso root. Funziona su GNU/Linux, Windows e macOS.
Si concentra su:
- leggerezza (nativo, mostra solo lo schermo del dispositivo)
- prestazioni (30~60fps)
- qualità (1920×1080 o superiore)
- bassa latenza (35~70ms)
- tempo di avvio basso (~ 1secondo per visualizzare la prima immagine)
- non invadenza (nulla viene lasciato installato sul dispositivo)
Il dispositivo Android richiede almeno le API 21 (Android 5.0).
Assiucurati di aver attivato il debug usb sul(/i) tuo(i) dispositivo(/i).
In alcuni dispositivi, devi anche abilitare un'opzione aggiuntiva per controllarli con tastiera e mouse.
- Linux:
apt install scrcpy
- Windows: download
- macOS:
brew install scrcpy
Compila dai sorgenti: BUILD (in inglese) (procedimento semplificato (in inglese))
Su Debian (testing e sid per ora) e Ubuntu (20.04):
apt install scrcpy
È disponibile anche un pacchetto Snap: scrcpy
.
Per Fedora, è disponibile un pacchetto COPR: scrcpy
.
Per Arch Linux, è disponibile un pacchetto AUR: scrcpy
.
Per Gentoo, è disponibile una Ebuild: scrcpy/
.
Puoi anche compilare l'app manualmente (in inglese) (procedimento semplificato (in inglese)).
Per Windows, per semplicità è disponibile un archivio precompilato con tutte le dipendenze (incluso adb
):
- README (Link al README originale per l'ultima versione)
È anche disponibile in Chocolatey:
choco install scrcpy
choco install adb # se non lo hai già
E in Scoop:
scoop install scrcpy
scoop install adb # se non lo hai già
Puoi anche compilare l'app manualmente (in inglese).
L'applicazione è disponibile in Homebrew. Basta installarlo:
brew install scrcpy
Serve che adb
sia accessibile dal tuo PATH
. Se non lo hai già:
brew install android-platform-tools
È anche disponibile in MacPorts, che imposta adb per te:
sudo port install scrcpy
Puoi anche compilare l'app manualmente (in inglese).
Collega un dispositivo Android ed esegui:
scrcpy
Scrcpy accetta argomenti da riga di comando, essi sono listati con:
scrcpy --help
Qualche volta è utile trasmettere un dispositvo Android ad una definizione inferiore per aumentare le prestazioni.
Per limitare sia larghezza che altezza ad un certo valore (ad es. 1024):
scrcpy --max-size 1024
scrcpy -m 1024 # versione breve
L'altra dimensione è calcolata in modo tale che il rapporto di forma del dispositivo sia preservato. In questo esempio un dispositivo in 1920x1080 viene trasmesso a 1024x576.
Il bit-rate predefinito è 8 Mbps. Per cambiare il bitrate video (ad es. a 2 Mbps):
scrcpy --bit-rate 2M
scrcpy -b 2M # versione breve
Il frame rate di acquisizione può essere limitato:
scrcpy --max-fps 15
Questo è supportato ufficialmente a partire da Android 10, ma potrebbe funzionare in versioni precedenti.
Lo schermo del dispositivo può essere ritagliato per visualizzare solo parte di esso.
Questo può essere utile, per esempio, per trasmettere solo un occhio dell'Oculus Go:
scrcpy --crop 1224:1440:0:0 # 1224x1440 at offset (0,0)
Se anche --max-size
è specificata, il ridimensionamento è applicato dopo il ritaglio.
Per bloccare l'orientamento della trasmissione:
scrcpy --lock-video-orientation 0 # orientamento naturale
scrcpy --lock-video-orientation 1 # 90° antiorario
scrcpy --lock-video-orientation 2 # 180°
scrcpy --lock-video-orientation 3 # 90° orario
Questo influisce sull'orientamento della registrazione.
La finestra può anche essere ruotata indipendentemente.
Alcuni dispositivi hanno più di un codificatore e alcuni di questi possono provocare problemi o crash. È possibile selezionare un encoder diverso:
scrcpy --encoder OMX.qcom.video.encoder.avc
Per elencare i codificatori disponibili puoi immettere un nome di codificatore non valido e l'errore mostrerà i codificatori disponibili:
scrcpy --encoder _
È possibile registrare lo schermo durante la trasmissione:
scrcpy --record file.mp4
scrcpy -r file.mkv
Per disabilitare la trasmissione durante la registrazione:
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# interrompere la registrazione con Ctrl+C
I "fotogrammi saltati" sono registrati nonostante non siano mostrati in tempo reale (per motivi di prestazioni). I fotogrammi sono datati sul dispositivo, così una variazione di latenza dei pacchetti non impatta il file registrato.
Scrcpy usa adb
per comunicare col dispositivo e adb
può connettersi al dispositivo mediante TCP/IP:
-
Connetti il dispositivo alla stessa rete Wi-Fi del tuo computer.
-
Trova l'indirizzo IP del tuo dispositivo in Impostazioni → Informazioni sul telefono → Stato, oppure eseguendo questo comando:
adb shell ip route | awk '{print $9}'
-
Abilita adb via TCP/IP sul tuo dispositivo:
adb tcpip 5555
. -
Scollega il tuo dispositivo.
-
Connetti il tuo dispositivo:
adb connect IP_DISPOSITVO:5555
(rimpiazzaIP_DISPOSITIVO
). -
Esegui
scrcpy
come al solito.
Potrebbe essere utile diminuire il bit-rate e la definizione
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # versione breve
Se in adb devices
sono listati più dispositivi, è necessario specificare il seriale:
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # versione breve
Se il dispositivo è collegato mediante TCP/IP:
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # versione breve
Puoi avviare più istanze di scrcpy per diversi dispositivi.
Potresti usare AutoAdb:
autoadb scrcpy -s '{}'
Per connettersi a un dispositivo remoto è possibile collegare un client adb
locale ad un server adb
remoto (assunto che entrambi stiano usando la stessa versione del protocollo adb):
adb kill-server # termina il server adb locale su 5037
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# tieni questo aperto
Da un altro terminale:
scrcpy
Per evitare l'abilitazione dell'apertura porte remota potresti invece forzare una "forward connection" (notare il -L
invece di -R
)
adb kill-server # termina il server adb locale su 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# tieni questo aperto
Da un altro terminale:
scrcpy --force-adb-forward
Come per le connessioni wireless potrebbe essere utile ridurre la qualità:
scrcpy -b2M -m800 --max-fps 15
Il titolo della finestra è il modello del dispositivo per impostazione predefinita. Esso può essere cambiato:
scrcpy --window-title 'My device'
La posizione e la dimensione iniziale della finestra può essere specificata:
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
Per disabilitare le decorazioni della finestra:
scrcpy --window-borderless
Per tenere scrcpy sempre in primo piano:
scrcpy --always-on-top
L'app può essere avviata direttamente a schermo intero:
scrcpy --fullscreen
scrcpy -f # versione breve
Lo schermo intero può anche essere attivato/disattivato con MOD+f.
La finestra può essere ruotata:
scrcpy --rotation 1
I valori possibili sono:
0
: nessuna rotazione1
: 90 gradi antiorari2
: 180 gradi3
: 90 gradi orari
La rotazione può anche essere cambiata dinamicamente con MOD+← (sinistra) e MOD+→ (destra).
Notare che scrcpy gestisce 3 diversi tipi di rotazione:
- MOD+r richiede al dispositvo di cambiare tra orientamento verticale (portrait) e orizzontale (landscape) (l'app in uso potrebbe rifiutarsi se non supporta l'orientamento richiesto).
--lock-video-orientation
cambia l'orientamento della trasmissione (l'orientamento del video inviato dal dispositivo al computer). Questo influenza la registrazione.--rotation
(o MOD+←/MOD+→) ruota solo il contenuto della finestra. Questo influenza solo la visualizzazione, non la registrazione.
Per disabilitare i controlli (tutto ciò che può interagire col dispositivo: tasti di input, eventi del mouse, trascina e rilascia (drag&drop) file):
scrcpy --no-control
scrcpy -n
Se sono disponibili più schermi, è possibile selezionare lo schermo da trasmettere:
scrcpy --display 1
La lista degli id schermo può essere ricavata da:
adb shell dumpsys display # cerca "mDisplayId=" nell'output
Lo schermo secondario potrebbe essere possibile controllarlo solo se il dispositivo esegue almeno Android 10 (in caso contrario è trasmesso in modalità sola lettura).
Per evitare che il dispositivo si blocchi dopo un po' che il dispositivo è collegato:
scrcpy --stay-awake
scrcpy -w
Lo stato iniziale è ripristinato quando scrcpy viene chiuso.
È possibile spegnere lo schermo del dispositivo durante la trasmissione con un'opzione da riga di comando:
scrcpy --turn-screen-off
scrcpy -S
Oppure premendo MOD+o in qualsiasi momento.
Per riaccenderlo premere MOD+Shift+o.
In Android il pulsante POWER
(tasto di accensione) accende sempre lo schermo. Per comodità, se POWER
è inviato via scrcpy (con click destro o con MOD+p), si forza il dispositivo a spegnere lo schermo dopo un piccolo ritardo (appena possibile).
Il pulsante fisico POWER
continuerà ad accendere lo schermo normalmente.
Può anche essere utile evitare il blocco del dispositivo:
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw
Per minimizzare la latenza scrcpy renderizza sempre l'ultimo fotogramma decodificato disponibile in maniera predefinita e tralascia quelli precedenti.
Per forzare la renderizzazione di tutti i fotogrammi (a costo di una possibile latenza superiore), utilizzare:
scrcpy --render-expired-frames
Per le presentazioni può essere utile mostrare i tocchi fisici (sul dispositivo fisico).
Android fornisce questa funzionalità nelle Opzioni sviluppatore.
Scrcpy fornisce un'opzione per abilitare questa funzionalità all'avvio e ripristinare il valore iniziale alla chiusura:
scrcpy --show-touches
scrcpy -t
Notare che mostra solo i tocchi fisici (con le dita sul dispositivo).
In maniera predefinita scrcpy non previene l'attivazione del salvaschermo del computer.
Per disabilitarlo:
scrcpy --disable-screensaver
Premere MOD+r per cambiare tra le modalità verticale (portrait) e orizzontale (landscape).
Notare che la rotazione avviene solo se l'applicazione in primo piano supporta l'orientamento richiesto.
Quando gli appunti di Android cambiano, essi vengono automaticamente sincronizzati con gli appunti del computer.
Qualsiasi scorciatoia Ctrl viene inoltrata al dispositivo. In particolare:
- Ctrl+c copia
- Ctrl+x taglia
- Ctrl+v incolla (dopo la sincronizzazione degli appunti da computer a dispositivo)
Questo solitamente funziona nella maniera più comune.
Il comportamento reale, però, dipende dall'applicazione attiva. Per esempio Termux invia SIGINT con Ctrl+c, e K-9 Mail compone un nuovo messaggio.
Per copiare, tagliare e incollare in questi casi (ma è solo supportato in Android >= 7):
- MOD+c inietta
COPY
- MOD+x inietta
CUT
- MOD+v inietta
PASTE
(dopo la sincronizzazione degli appunti da computer a dispositivo)
In aggiunta, MOD+Shift+v permette l'iniezione del testo degli appunti del computer come una sequenza di eventi pressione dei tasti. Questo è utile quando il componente non accetta l'incollaggio di testo (per esempio in Termux), ma questo può rompere il contenuto non ASCII.
AVVISO: Incollare gli appunti del computer nel dispositivo (sia con Ctrl+v che con MOD+v) copia il contenuto negli appunti del dispositivo. Come conseguenza, qualsiasi applicazione Android potrebbe leggere il suo contenuto. Dovresti evitare di incollare contenuti sensibili (come password) in questa maniera.
Alcuni dispositivi non si comportano come aspettato quando si modificano gli appunti del dispositivo a livello di codice. L'opzione --legacy-paste
è fornita per cambiare il comportamento di Ctrl+v and MOD+v in modo tale che anch'essi iniettino il testo gli appunti del computer come una sequenza di eventi pressione dei tasti (nella stessa maniera di MOD+Shift+v).
Per simulare il "pizzica per zoomare": Ctrl+click e trascina.
Più precisamente, tieni premuto Ctrl mentre premi il pulsante sinistro. Finchè il pulsante non sarà rilasciato, tutti i movimenti del mouse ridimensioneranno e ruoteranno il contenuto (se supportato dall'applicazione) relativamente al centro dello schermo.
Concretamente scrcpy genera degli eventi di tocco addizionali di un "dito virtuale" nella posizione simmetricamente opposta rispetto al centro dello schermo.
Ci sono due tipi di eventi generati quando si scrive testo:
- eventi di pressione, segnalano che tasto è stato premuto o rilasciato;
- eventi di testo, segnalano che del testo è stato inserito.
In maniera predefinita le lettere sono "iniettate" usando gli eventi di pressione, in maniera tale che la tastiera si comporti come aspettato nei giochi (come accade solitamente per i tasti WASD).
Questo, però, può causare problemi. Se incontri un problema del genere, puoi evitarlo con:
scrcpy --prefer-text
(ma questo romperà il normale funzionamento della tastiera nei giochi)
In maniera predefinita tenere premuto un tasto genera una ripetizione degli eventi di pressione di tale tasto. Questo può creare problemi di performance in alcuni giochi, dove questi eventi sono inutilizzati.
Per prevenire l'inoltro ripetuto degli eventi di pressione:
scrcpy --no-key-repeat
In maniera predefinita, click destro aziona BACK (indietro) e il click centrale aziona HOME. Per disabilitare queste scorciatoie e, invece, inviare i click al dispositivo:
scrcpy --forward-all-clicks
Per installare un APK, trascina e rilascia un file APK (finisce con .apk
) nella finestra di scrcpy.
Non c'è alcuna risposta visiva, un log è stampato nella console.
Per trasferire un file in /sdcard/
del dispositivo trascina e rilascia un file (non APK) nella finestra di scrcpy.
Non c'è alcuna risposta visiva, un log è stampato nella console.
La cartella di destinazione può essere cambiata all'avvio:
scrcpy --push-target=/sdcard/Download/
L'audio non è inoltrato da scrcpy. Usa sndcpy.
Vedi anche la issue #14.
Nella lista seguente, MOD è il modificatore delle scorciatoie. In maniera predefinita è Alt (sinistro) o Super (sinistro).
Può essere cambiato usando --shortcut-mod
. I tasti possibili sono lctrl
, rctrl
, lalt
, ralt
, lsuper
and rsuper
(l
significa sinistro e r
significa destro). Per esempio:
# usa ctrl destro per le scorciatoie
scrcpy --shortcut-mod=rctrl
# use sia "ctrl sinistro"+"alt sinistro" che "super sinistro" per le scorciatoie
scrcpy --shortcut-mod=lctrl+lalt,lsuper
Super è il pulsante Windows o Cmd.
Azione | Scorciatoia |
---|---|
Schermo intero | MOD+f |
Rotazione schermo a sinistra | MOD+← (sinistra) |
Rotazione schermo a destra | MOD+→ (destra) |
Ridimensiona finestra a 1:1 (pixel-perfect) | MOD+g |
Ridimensiona la finestra per rimuovere i bordi neri | MOD+w | Doppio click¹ |
Premi il tasto HOME |
MOD+h | Click centrale |
Premi il tasto BACK |
MOD+b | Click destro² |
Premi il tasto APP_SWITCH |
MOD+s |
Premi il tasto MENU (sblocca lo schermo) |
MOD+m |
Premi il tasto VOLUME_UP |
MOD+↑ (su) |
Premi il tasto VOLUME_DOWN |
MOD+↓ (giù) |
Premi il tasto POWER |
MOD+p |
Accendi | Click destro² |
Spegni lo schermo del dispositivo (continua a trasmettere) | MOD+o |
Accendi lo schermo del dispositivo | MOD+Shift+o |
Ruota lo schermo del dispositivo | MOD+r |
Espandi il pannello delle notifiche | MOD+n |
Chiudi il pannello delle notifiche | MOD+Shift+n |
Copia negli appunti³ | MOD+c |
Taglia negli appunti³ | MOD+x |
Sincronizza gli appunti e incolla³ | MOD+v |
Inietta il testo degli appunti del computer | MOD+Shift+v |
Abilita/Disabilita il contatore FPS (su stdout) | MOD+i |
Pizzica per zoomare | Ctrl+click e trascina |
¹Doppio click sui bordi neri per rimuoverli.
²Il tasto destro accende lo schermo se era spento, preme BACK in caso contrario.
³Solo in Android >= 7.
Tutte le scorciatoie Ctrl+tasto sono inoltrate al dispositivo, così sono gestite dall'applicazione attiva.
Per utilizzare dei binari adb specifici, configura il suo path nella variabile d'ambente ADB
:
ADB=/percorso/per/adb scrcpy
Per sovrascrivere il percorso del file scrcpy-server
, configura il percorso in SCRCPY_SERVER_PATH
.
Un collega mi ha sfidato a trovare un nome tanto impronunciabile quanto gnirehtet.
strcpy
copia una string (stringa); scrcpy
copia uno screen (schermo).
Vedi BUILD (in inglese).
Vedi le FAQ.
Leggi la pagina per sviluppatori.
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.