Merge branch 'master' into dev

This commit is contained in:
Romain Vimont 2021-05-09 11:00:30 +02:00
commit f062dfd30b
16 changed files with 1492 additions and 436 deletions

135
BUILD.md
View file

@ -2,11 +2,43 @@
Here are the instructions to build _scrcpy_ (client and server). Here are the instructions to build _scrcpy_ (client and server).
You may want to build only the client: the server binary, which will be pushed
to the Android device, does not depend on your system and architecture. In that
case, use the [prebuilt server] (so you will not need Java or the Android SDK).
[prebuilt server]: #prebuilt-server ## Simple
If you just want to install the latest release from `master`, follow this
simplified process.
First, you need to install the required packages:
```bash
# for Debian/Ubuntu
sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
gcc git pkg-config meson ninja-build \
libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev
```
Then clone the repo and execute the installation script
([source](install_release.sh)):
```bash
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
./install_release.sh
```
When a new release is out, update the repo and reinstall:
```bash
git pull
./install_release.sh
```
To uninstall:
```bash
sudo ninja -Cbuild-auto uninstall
```
## Branches ## Branches
@ -60,11 +92,10 @@ sudo apt install ffmpeg libsdl2-2.0-0 adb
# client build dependencies # client build dependencies
sudo apt install gcc git pkg-config meson ninja-build \ sudo apt install gcc git pkg-config meson ninja-build \
libavcodec-dev libavformat-dev libavutil-dev \ libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev
libsdl2-dev
# server build dependencies # server build dependencies
sudo apt install openjdk-8-jdk sudo apt install openjdk-11-jdk
``` ```
On old versions (like Ubuntu 16.04), `meson` is too old. In that case, install On old versions (like Ubuntu 16.04), `meson` is too old. In that case, install
@ -106,13 +137,13 @@ sudo apt install mingw-w64 mingw-w64-tools
You also need the JDK to build the server: You also need the JDK to build the server:
```bash ```bash
sudo apt install openjdk-8-jdk sudo apt install openjdk-11-jdk
``` ```
Then generate the releases: Then generate the releases:
```bash ```bash
make -f Makefile.CrossWindows ./release.sh
``` ```
It will generate win32 and win64 releases into `dist/`. It will generate win32 and win64 releases into `dist/`.
@ -173,12 +204,12 @@ brew install pkg-config meson
``` ```
Additionally, if you want to build the server, install Java 8 from Caskroom, and Additionally, if you want to build the server, install Java 8 from Caskroom, and
make it avaliable from the `PATH`: make it available from the `PATH`:
```bash ```bash
brew tap homebrew/cask-versions brew tap homebrew/cask-versions
brew cask install adoptopenjdk/openjdk/adoptopenjdk8 brew install adoptopenjdk/openjdk/adoptopenjdk11
export JAVA_HOME="$(/usr/libexec/java_home --version 1.8)" export JAVA_HOME="$(/usr/libexec/java_home --version 1.11)"
export PATH="$JAVA_HOME/bin:$PATH" export PATH="$JAVA_HOME/bin:$PATH"
``` ```
@ -189,8 +220,27 @@ See [pierlon/scrcpy-docker](https://github.com/pierlon/scrcpy-docker).
## Common steps ## Common steps
If you want to build the server, install the [Android SDK] (_Android Studio_), **As a non-root user**, clone the project:
and set `ANDROID_SDK_ROOT` to its directory. For example:
```bash
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
```
### Build
You may want to build only the client: the server binary, which will be pushed
to the Android device, does not depend on your system and architecture. In that
case, use the [prebuilt server] (so you will not need Java or the Android SDK).
[prebuilt server]: #option-2-use-prebuilt-server
#### Option 1: Build everything from sources
Install the [Android SDK] (_Android Studio_), and set `ANDROID_SDK_ROOT` to its
directory. For example:
[Android SDK]: https://developer.android.com/studio/index.html [Android SDK]: https://developer.android.com/studio/index.html
@ -203,20 +253,11 @@ export ANDROID_SDK_ROOT=~/Library/Android/sdk
set ANDROID_SDK_ROOT=%LOCALAPPDATA%\Android\sdk set ANDROID_SDK_ROOT=%LOCALAPPDATA%\Android\sdk
``` ```
If you don't want to build the server, use the [prebuilt server].
Clone the project:
```bash
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
```
Then, build: Then, build:
```bash ```bash
meson x --buildtype release --strip -Db_lto=true meson x --buildtype release --strip -Db_lto=true
ninja -Cx ninja -Cx # DO NOT RUN AS ROOT
``` ```
_Note: `ninja` [must][ninja-user] be run as a non-root user (only `ninja _Note: `ninja` [must][ninja-user] be run as a non-root user (only `ninja
@ -225,9 +266,27 @@ install` must be run as root)._
[ninja-user]: https://github.com/Genymobile/scrcpy/commit/4c49b27e9f6be02b8e63b508b60535426bd0291a [ninja-user]: https://github.com/Genymobile/scrcpy/commit/4c49b27e9f6be02b8e63b508b60535426bd0291a
### Run #### Option 2: Use prebuilt server
To run without installing: - [`scrcpy-server-v1.17`][direct-scrcpy-server]
_(SHA-256: 11b5ad2d1bc9b9730fb7254a78efd71a8ff46b1938ff468e47a21b653a1b6725)_
[direct-scrcpy-server]: https://github.com/Genymobile/scrcpy/releases/download/v1.17/scrcpy-server-v1.17
Download the prebuilt server somewhere, and specify its path during the Meson
configuration:
```bash
meson x --buildtype release --strip -Db_lto=true \
-Dprebuilt_server=/path/to/scrcpy-server
ninja -Cx # DO NOT RUN AS ROOT
```
The server only works with a matching client version (this server works with the
`master` branch).
### Run without installing:
```bash ```bash
./run x [options] ./run x [options]
@ -242,32 +301,16 @@ After a successful build, you can install _scrcpy_ on the system:
sudo ninja -Cx install # without sudo on Windows sudo ninja -Cx install # without sudo on Windows
``` ```
This installs two files: This installs three files:
- `/usr/local/bin/scrcpy` - `/usr/local/bin/scrcpy`
- `/usr/local/share/scrcpy/scrcpy-server` - `/usr/local/share/scrcpy/scrcpy-server`
- `/usr/local/share/man/man1/scrcpy.1`
Just remove them to "uninstall" the application.
You can then [run](README.md#run) _scrcpy_. You can then [run](README.md#run) _scrcpy_.
### Uninstall
## Prebuilt server
- [`scrcpy-server-v1.17`][direct-scrcpy-server]
_(SHA-256: 11b5ad2d1bc9b9730fb7254a78efd71a8ff46b1938ff468e47a21b653a1b6725_
[direct-scrcpy-server]: https://github.com/Genymobile/scrcpy/releases/download/v1.17/scrcpy-server-v1.17
Download the prebuilt server somewhere, and specify its path during the Meson
configuration:
```bash ```bash
meson x --buildtype release --strip -Db_lto=true \ sudo ninja -Cx uninstall # without sudo on Windows
-Dprebuilt_server=/path/to/scrcpy-server
ninja -Cx
sudo ninja -Cx install
``` ```
The server only works with a matching client version (this server works with the
`master` branch).

View file

@ -211,7 +211,7 @@ There are two [frames][video_buffer] simultaneously in memory:
- the **rendering** frame, rendered in a texture from the main thread. - the **rendering** frame, rendered in a texture from the main thread.
When a new decoded frame is available, the decoder _swaps_ the decoding and When a new decoded frame is available, the decoder _swaps_ the decoding and
rendering frame (with proper synchronization). Thus, it immediatly starts rendering frame (with proper synchronization). Thus, it immediately starts
to decode a new frame while the main thread renders the last one. to decode a new frame while the main thread renders the last one.
If a [recorder] is present (i.e. `--record` is enabled), then it muxes the raw If a [recorder] is present (i.e. `--record` is enabled), then it muxes the raw

13
FAQ.md
View file

@ -39,8 +39,11 @@ Check [stackoverflow][device-unauthorized].
> adb: error: failed to get feature set: no devices/emulators found > adb: error: failed to get feature set: no devices/emulators found
Check that you correctly enabled [adb debugging][enable-adb].
If your device is not detected, you may need some [drivers] (on Windows). If your device is not detected, you may need some [drivers] (on Windows).
[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
[drivers]: https://developer.android.com/studio/run/oem-usb.html [drivers]: https://developer.android.com/studio/run/oem-usb.html
@ -111,16 +114,6 @@ In developer options, enable:
[simulating input]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323 [simulating input]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
### Mouse clicks at wrong location
On MacOS, with HiDPI support and multiple screens, input location are wrongly
scaled. See [#15].
[#15]: https://github.com/Genymobile/scrcpy/issues/15
Open _scrcpy_ directly on the monitor you use it.
### Special characters do not work ### Special characters do not work
Injecting text input is [limited to ASCII characters][text-input]. A trick Injecting text input is [limited to ASCII characters][text-input]. A trick

View file

@ -69,10 +69,7 @@ Anda juga bisa [membangun aplikasi secara manual][BUILD] (jangan khawatir, tidak
Untuk Windows, untuk kesederhanaan, arsip prebuilt dengan semua dependensi (termasuk `adb`) tersedia : Untuk Windows, untuk kesederhanaan, arsip prebuilt dengan semua dependensi (termasuk `adb`) tersedia :
- [`scrcpy-win64-v1.16.zip`][direct-win64] - [README](README.md#windows)
_(SHA-256: 3f30dc5db1a2f95c2b40a0f5de91ec1642d9f53799250a8c529bc882bc0918f0)_
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-win64-v1.16.zip
Ini juga tersedia di [Chocolatey]: Ini juga tersedia di [Chocolatey]:

725
README.jp.md Normal file
View file

@ -0,0 +1,725 @@
_Only the original [README](README.md) is guaranteed to be up-to-date._
# scrcpy (v1.17)
このアプリケーションはUSB(もしくは[TCP/IP経由][article-tcpip])で接続されたAndroidデバイスの表示と制御を提供します。このアプリケーションは _root_ でのアクセスを必要としません。このアプリケーションは _GNU/Linux__Windows_ そして _macOS_ 上で動作します。
![screenshot](assets/screenshot-debian-600.jpg)
以下に焦点を当てています:
- **軽量** (ネイティブ、デバイス画面表示のみ)
- **パフォーマンス** (30~60fps)
- **クオリティ** (1920x1080以上)
- **低遅延** ([35~70ms][lowlatency])
- **短い起動時間** (初回画像を1秒以内に表示)
- **非侵入型** (デバイスに何もインストールされていない状態になる)
[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646
## 必要要件
AndroidデバイスはAPI21(Android 5.0)以上。
Androidデバイスで[adbデバッグが有効][enable-adb]であること。
[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
一部のAndroidデバイスでは、キーボードとマウスを使用して制御する[追加オプション][control]を有効にする必要がある。
[control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
## アプリの取得
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
### Linux
Debian (_testing_ と _sid_) とUbuntu(20.04):
```
apt install scrcpy
```
[Snap]パッケージが利用可能: [`scrcpy`][snap-link]
[snap-link]: https://snapstats.org/snaps/scrcpy
[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager)
Fedora用[COPR]パッケージが利用可能: [`scrcpy`][copr-link]
[COPR]: https://fedoraproject.org/wiki/Category:Copr
[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/
Arch Linux用[AUR]パッケージが利用可能: [`scrcpy`][aur-link]
[AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository
[aur-link]: https://aur.archlinux.org/packages/scrcpy/
Gentoo用[Ebuild]が利用可能: [`scrcpy`][ebuild-link]
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
[自分でビルド][BUILD]も可能(心配しないでください、それほど難しくはありません。)
### Windows
Windowsでは簡単に、`adb`を含む)すべての依存関係を構築済みのアーカイブを利用可能です。
- [README](README.md#windows)
[Chocolatey]でも利用可能です:
[Chocolatey]: https://chocolatey.org/
```bash
choco install scrcpy
choco install adb # まだ入手していない場合
```
[Scoop]でも利用可能です:
```bash
scoop install scrcpy
scoop install adb # まだ入手していない場合
```
[Scoop]: https://scoop.sh
また、[アプリケーションをビルド][BUILD]することも可能です。
### macOS
アプリケーションは[Homebrew]で利用可能です。ただインストールするだけです。
[Homebrew]: https://brew.sh/
```bash
brew install scrcpy
```
`PATH`から`adb`へのアクセスが必要です。もしまだ持っていない場合:
```bash
# Homebrew >= 2.6.0
brew install --cask android-platform-tools
# Homebrew < 2.6.0
brew cask install android-platform-tools
```
また、[アプリケーションをビルド][BUILD]することも可能です。
## 実行
Androidデバイスを接続し、実行:
```bash
scrcpy
```
次のコマンドでリストされるコマンドライン引数も受け付けます:
```bash
scrcpy --help
```
## 機能
### キャプチャ構成
#### サイズ削減
Androidデバイスを低解像度でミラーリングする場合、パフォーマンス向上に便利な場合があります。
幅と高さをある値(例1024)に制限するには:
```bash
scrcpy --max-size 1024
scrcpy -m 1024 # 短縮版
```
一方のサイズはデバイスのアスペクト比が維持されるように計算されます。この方法では、1920x1080のデバイスでは1024x576にミラーリングされます。
#### ビットレート変更
ビットレートの初期値は8Mbpsです。ビットレートを変更するには(例:2Mbpsに変更):
```bash
scrcpy --bit-rate 2M
scrcpy -b 2M # 短縮版
```
#### フレームレート制限
キャプチャするフレームレートを制限できます:
```bash
scrcpy --max-fps 15
```
この機能はAndroid 10からオフィシャルサポートとなっていますが、以前のバージョンでも動作する可能性があります。
#### トリミング
デバイスの画面は、画面の一部のみをミラーリングするようにトリミングできます。
これは、例えばOculus Goの片方の目をミラーリングする場合に便利です。:
```bash
scrcpy --crop 1224:1440:0:0 # オフセット位置(0,0)で1224x1440
```
もし`--max-size`も指定されている場合、トリミング後にサイズ変更が適用されます。
#### ビデオの向きをロックする
ミラーリングの向きをロックするには:
```bash
scrcpy --lock-video-orientation 0 # 自然な向き
scrcpy --lock-video-orientation 1 # 90°反時計回り
scrcpy --lock-video-orientation 2 # 180°
scrcpy --lock-video-orientation 3 # 90°時計回り
```
この設定は録画の向きに影響します。
[ウィンドウは独立して回転することもできます](#回転)。
#### エンコーダ
いくつかのデバイスでは一つ以上のエンコーダを持ちます。それらのいくつかは、問題やクラッシュを引き起こします。別のエンコーダを選択することが可能です:
```bash
scrcpy --encoder OMX.qcom.video.encoder.avc
```
利用可能なエンコーダをリストするために、無効なエンコーダ名を渡すことができます。エラー表示で利用可能なエンコーダを提供します。
```bash
scrcpy --encoder _
```
### 録画
ミラーリング中に画面の録画をすることが可能です:
```bash
scrcpy --record file.mp4
scrcpy -r file.mkv
```
録画中にミラーリングを無効にするには:
```bash
scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv
# Ctrl+Cで録画を中断する
```
"スキップされたフレーム"は(パフォーマンス上の理由で)リアルタイムで表示されなくても録画されます。
フレームはデバイス上で _タイムスタンプされる_ ため [パケット遅延のバリエーション] は録画されたファイルに影響を与えません。
[パケット遅延のバリエーション]: https://en.wikipedia.org/wiki/Packet_delay_variation
### 接続
#### ワイヤレス
_Scrcpy_ はデバイスとの通信に`adb`を使用します。そして`adb`はTCP/IPを介しデバイスに[接続]することができます:
1. あなたのコンピュータと同じWi-Fiに接続します。
2. あなたのIPアドレスを取得します。設定 → 端末情報 → ステータス情報、もしくは、このコマンドを実行します:
```bash
adb shell ip route | awk '{print $9}'
```
3. あなたのデバイスでTCP/IPを介したadbを有効にします: `adb tcpip 5555`
4. あなたのデバイスの接続を外します。
5. あなたのデバイスに接続します:
`adb connect DEVICE_IP:5555` _(`DEVICE_IP`は置き換える)_
6. 通常通り`scrcpy`を実行します。
この方法はビットレートと解像度を減らすのにおそらく有用です:
```bash
scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # 短縮版
```
[接続]: https://developer.android.com/studio/command-line/adb.html#wireless
#### マルチデバイス
もし`adb devices`でいくつかのデバイスがリストされる場合、 _シリアルナンバー_ を指定する必要があります:
```bash
scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # 短縮版
```
デバイスがTCP/IPを介して接続されている場合:
```bash
scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # 短縮版
```
複数のデバイスに対して、複数の _scrcpy_ インスタンスを開始することができます。
#### デバイス接続での自動起動
[AutoAdb]を使用可能です:
```bash
autoadb scrcpy -s '{}'
```
[AutoAdb]: https://github.com/rom1v/autoadb
#### SSHトンネル
リモートデバイスに接続するため、ローカル`adb`クライアントからリモート`adb`サーバーへ接続することが可能です(同じバージョンの _adb_ プロトコルを使用している場合):
```bash
adb kill-server # 5037ポートのローカルadbサーバーを終了する
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# オープンしたままにする
```
他の端末から:
```bash
scrcpy
```
リモートポート転送の有効化を回避するためには、代わりに転送接続を強制することができます(`-R`の代わりに`-L`を使用することに注意):
```bash
adb kill-server # 5037ポートのローカルadbサーバーを終了する
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# オープンしたままにする
```
他の端末から:
```bash
scrcpy --force-adb-forward
```
ワイヤレス接続と同様に、クオリティを下げると便利な場合があります:
```
scrcpy -b2M -m800 --max-fps 15
```
### ウィンドウ構成
#### タイトル
ウィンドウのタイトルはデバイスモデルが初期値です。これは変更できます:
```bash
scrcpy --window-title 'My device'
```
#### 位置とサイズ
ウィンドウの位置とサイズの初期値を指定できます:
```bash
scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
```
#### ボーダーレス
ウィンドウの装飾を無効化するには:
```bash
scrcpy --window-borderless
```
#### 常に画面のトップ
scrcpyの画面を常にトップにするには:
```bash
scrcpy --always-on-top
```
#### フルスクリーン
アプリケーションを直接フルスクリーンで開始できます:
```bash
scrcpy --fullscreen
scrcpy -f # 短縮版
```
フルスクリーンは、次のコマンドで動的に切り替えることができます <kbd>MOD</kbd>+<kbd>f</kbd>
#### 回転
ウィンドウは回転することができます:
```bash
scrcpy --rotation 1
```
設定可能な値:
- `0`: 回転なし
- `1`: 90° 反時計回り
- `2`: 180°
- `3`: 90° 時計回り
回転は次のコマンドで動的に変更することができます。 <kbd>MOD</kbd>+<kbd></kbd>_(左)_ 、 <kbd>MOD</kbd>+<kbd></kbd>_(右)_
_scrcpy_ は3つの回転を管理することに注意:
- <kbd>MOD</kbd>+<kbd>r</kbd>はデバイスに縦向きと横向きの切り替えを要求する(現在実行中のアプリで要求している向きをサポートしていない場合、拒否することがある)
- [`--lock-video-orientation`](#ビデオの向きをロックする)は、ミラーリングする向きを変更する(デバイスからPCへ送信される向き)。録画に影響します。
- `--rotation` (もしくは<kbd>MOD</kbd>+<kbd></kbd>/<kbd>MOD</kbd>+<kbd></kbd>)は、ウィンドウのコンテンツのみを回転します。これは表示にのみに影響し、録画には影響しません。
### 他のミラーリングオプション
#### Read-only リードオンリー
制御を無効にするには(デバイスと対話する全てのもの:入力キー、マウスイベント、ファイルのドラッグ&ドロップ):
```bash
scrcpy --no-control
scrcpy -n
```
#### ディスプレイ
いくつか利用可能なディスプレイがある場合、ミラーリングするディスプレイを選択できます:
```bash
scrcpy --display 1
```
ディスプレイIDのリストは次の方法で取得できます:
```
adb shell dumpsys display # search "mDisplayId=" in the output
```
セカンダリディスプレイは、デバイスが少なくともAndroid 10の場合にコントロール可能です。(それ以外ではリードオンリーでミラーリングされます)
#### 起動状態にする
デバイス接続時、少し遅れてからデバイスのスリープを防ぐには:
```bash
scrcpy --stay-awake
scrcpy -w
```
scrcpyが閉じられた時、初期状態に復元されます。
#### 画面OFF
コマンドラインオプションを使用することで、ミラーリングの開始時にデバイスの画面をOFFにすることができます:
```bash
scrcpy --turn-screen-off
scrcpy -S
```
もしくは、<kbd>MOD</kbd>+<kbd>o</kbd>を押すことでいつでもできます。
元に戻すには、<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>を押します。
Androidでは、`POWER`ボタンはいつでも画面を表示します。便宜上、`POWER`がscrcpyを介して(右クリックもしくは<kbd>MOD</kbd>+<kbd>p</kbd>を介して)送信される場合、(ベストエフォートベースで)少し遅れて、強制的に画面を非表示にします。ただし、物理的な`POWER`ボタンを押した場合は、画面は表示されます。
このオプションはデバイスがスリープしないようにすることにも役立ちます:
```bash
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw
```
#### 期限切れフレームをレンダリングする
初期状態では、待ち時間を最小限にするために、_scrcpy_ は最後にデコードされたフレームをレンダリングし、前のフレームを削除します。
全フレームのレンダリングを強制するには(待ち時間が長くなる可能性があります):
```bash
scrcpy --render-expired-frames
```
#### タッチを表示
プレゼンテーションの場合(物理デバイス上で)物理的なタッチを表示すると便利な場合があります。
Androidはこの機能を _開発者オプション_ で提供します。
_Scrcpy_ は開始時にこの機能を有効にし、終了時に初期値を復元するオプションを提供します:
```bash
scrcpy --show-touches
scrcpy -t
```
(デバイス上で指を使った) _物理的な_ タッチのみ表示されることに注意してください。
#### スクリーンセーバー無効
初期状態では、scrcpyはコンピュータ上でスクリーンセーバーが実行される事を妨げません。
これを無効にするには:
```bash
scrcpy --disable-screensaver
```
### 入力制御
#### デバイス画面の回転
<kbd>MOD</kbd>+<kbd>r</kbd>を押すことで、縦向きと横向きを切り替えます。
フォアグラウンドのアプリケーションが要求された向きをサポートしている場合のみ回転することに注意してください。
#### コピー-ペースト
Androidのクリップボードが変更される度に、コンピュータのクリップボードに自動的に同期されます。
<kbd>Ctrl</kbd>のショートカットは全てデバイスに転送されます。特に:
- <kbd>Ctrl</kbd>+<kbd>c</kbd> 通常はコピーします
- <kbd>Ctrl</kbd>+<kbd>x</kbd> 通常はカットします
- <kbd>Ctrl</kbd>+<kbd>v</kbd> 通常はペーストします(コンピュータとデバイスのクリップボードが同期された後)
通常は期待通りに動作します。
しかしながら、実際の動作はアクティブなアプリケーションに依存します。例えば、_Termux_ は代わりに<kbd>Ctrl</kbd>+<kbd>c</kbd>でSIGINTを送信します、そして、_K-9 Mail_ は新しいメッセージを作成します。
このようなケースでコピー、カットそしてペーストをするには(Android 7以上でのサポートのみですが):
- <kbd>MOD</kbd>+<kbd>c</kbd> `COPY`を挿入
- <kbd>MOD</kbd>+<kbd>x</kbd> `CUT`を挿入
- <kbd>MOD</kbd>+<kbd>v</kbd> `PASTE`を挿入(コンピュータとデバイスのクリップボードが同期された後)
加えて、<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>はコンピュータのクリップボードテキストにキーイベントのシーケンスとして挿入することを許可します。これはコンポーネントがテキストのペーストを許可しない場合(例えば _Termux_)に有用ですが、非ASCIIコンテンツを壊す可能性があります。
**警告:** デバイスにコンピュータのクリップボードを(<kbd>Ctrl</kbd>+<kbd>v</kbd>または<kbd>MOD</kbd>+<kbd>v</kbd>を介して)ペーストすることは、デバイスのクリップボードにコンテンツをコピーします。結果としてどのAndoridアプリケーションもそのコンテンツを読み取ることができます。機密性の高いコンテンツ(例えばパスワードなど)をこの方法でペーストすることは避けてください。
プログラムでデバイスのクリップボードを設定した場合、一部のデバイスは期待どおりに動作しません。`--legacy-paste`オプションは、コンピュータのクリップボードテキストをキーイベントのシーケンスとして挿入するため(<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>と同じ方法)、<kbd>Ctrl</kbd>+<kbd>v</kbd><kbd>MOD</kbd>+<kbd>v</kbd>の動作の変更を提供します。
#### ピンチしてズームする
"ピンチしてズームする"をシミュレートするには: <kbd>Ctrl</kbd>+_クリック&移動_
より正確にするには、左クリックボタンを押している間、<kbd>Ctrl</kbd>を押したままにします。左クリックボタンを離すまで、全てのマウスの動きは、(アプリでサポートされている場合)画面の中心を基準として、コンテンツを拡大縮小および回転します。
具体的には、scrcpyは画面の中央を反転した位置にある"バーチャルフィンガー"から追加のタッチイベントを生成します。
#### テキストインジェクション環境設定
テキストをタイプした時に生成される2種類の[イベント][textevents]があります:
- _key events_ はキーを押したときと離したことを通知します。
- _text events_ はテキストが入力されたことを通知します。
初期状態で、文字はキーイベントで挿入されるため、キーボードはゲームで期待通りに動作します(通常はWASDキー)。
しかし、これは[問題を引き起こす][prefertext]かもしれません。もしこのような問題が発生した場合は、この方法で回避できます:
```bash
scrcpy --prefer-text
```
(しかしこの方法はゲームのキーボードの動作を壊します)
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
#### キーの繰り返し
初期状態では、キーの押しっぱなしは繰り返しのキーイベントを生成します。これらのイベントが使われない場合でも、この方法は一部のゲームでパフォーマンスの問題を引き起す可能性があります。
繰り返しのキーイベントの転送を回避するためには:
```bash
scrcpy --no-key-repeat
```
#### 右クリックと真ん中クリック
初期状態では、右クリックはバックの動作(もしくはパワーオン)を起こし、真ん中クリックではホーム画面へ戻ります。このショートカットを無効にし、代わりにデバイスへクリックを転送するには:
```bash
scrcpy --forward-all-clicks
```
### ファイルのドロップ
#### APKのインストール
APKをインストールするには、(`.apk`で終わる)APKファイルを _scrcpy_ の画面にドラッグ&ドロップします。
見た目のフィードバックはありません。コンソールにログが出力されます。
#### デバイスにファイルを送る
デバイスの`/sdcard/`ディレクトリにファイルを送るには、(APKではない)ファイルを _scrcpy_ の画面にドラッグ&ドロップします。
見た目のフィードバックはありません。コンソールにログが出力されます。
転送先ディレクトリを起動時に変更することができます:
```bash
scrcpy --push-target /sdcard/foo/bar/
```
### 音声転送
音声は _scrcpy_ では転送されません。[sndcpy]を使用します。
[issue #14]も参照ください。
[sndcpy]: https://github.com/rom1v/sndcpy
[issue #14]: https://github.com/Genymobile/scrcpy/issues/14
## ショートカット
次のリストでは、<kbd>MOD</kbd>でショートカット変更します。初期状態では、(left)<kbd>Alt</kbd>または(left)<kbd>Super</kbd>です。
これは`--shortcut-mod`で変更することができます。可能なキーは`lctrl`、`rctrl`、`lalt`、 `ralt``lsuper`そして`rsuper`です。例えば:
```bash
# RCtrlをショートカットとして使用します
scrcpy --shortcut-mod=rctrl
# ショートカットにLCtrl+LAltまたはLSuperのいずれかを使用します
scrcpy --shortcut-mod=lctrl+lalt,lsuper
```
_<kbd>[Super]</kbd>は通常<kbd>Windows</kbd>もしくは<kbd>Cmd</kbd>キーです。_
[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button)
| アクション | ショートカット
| ------------------------------------------- |:-----------------------------
| フルスクリーンモードへの切り替え | <kbd>MOD</kbd>+<kbd>f</kbd>
| ディスプレイを左に回転 | <kbd>MOD</kbd>+<kbd></kbd> _(左)_
| ディスプレイを右に回転 | <kbd>MOD</kbd>+<kbd></kbd> _(右)_
| ウィンドウサイズを変更して1:1に変更(ピクセルパーフェクト) | <kbd>MOD</kbd>+<kbd>g</kbd>
| ウィンドウサイズを変更して黒い境界線を削除 | <kbd>MOD</kbd>+<kbd>w</kbd> \| _ダブルクリック¹_
| `HOME`をクリック | <kbd>MOD</kbd>+<kbd>h</kbd> \| _真ん中クリック_
| `BACK`をクリック | <kbd>MOD</kbd>+<kbd>b</kbd> \| _右クリック²_
| `APP_SWITCH`をクリック | <kbd>MOD</kbd>+<kbd>s</kbd>
| `MENU` (画面のアンロック)をクリック | <kbd>MOD</kbd>+<kbd>m</kbd>
| `VOLUME_UP`をクリック | <kbd>MOD</kbd>+<kbd></kbd> _(上)_
| `VOLUME_DOWN`をクリック | <kbd>MOD</kbd>+<kbd></kbd> _(下)_
| `POWER`をクリック | <kbd>MOD</kbd>+<kbd>p</kbd>
| 電源オン | _右クリック²_
| デバイス画面をオフにする(ミラーリングしたまま) | <kbd>MOD</kbd>+<kbd>o</kbd>
| デバイス画面をオンにする | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>
| デバイス画面を回転する | <kbd>MOD</kbd>+<kbd>r</kbd>
| 通知パネルを展開する | <kbd>MOD</kbd>+<kbd>n</kbd>
| 通知パネルを折りたたむ | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd>
| クリップボードへのコピー³ | <kbd>MOD</kbd>+<kbd>c</kbd>
| クリップボードへのカット³ | <kbd>MOD</kbd>+<kbd>x</kbd>
| クリップボードの同期とペースト³ | <kbd>MOD</kbd>+<kbd>v</kbd>
| コンピュータのクリップボードテキストの挿入 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>
| FPSカウンタ有効/無効(標準入出力上) | <kbd>MOD</kbd>+<kbd>i</kbd>
| ピンチしてズームする | <kbd>Ctrl</kbd>+_クリック&移動_
_¹黒い境界線を削除するため、境界線上でダブルクリック_
_²もしスクリーンがオフの場合、右クリックでスクリーンをオンする。それ以外の場合はBackを押します._
_³Android 7以上のみ._
全ての<kbd>Ctrl</kbd>+_キー_ ショートカットはデバイスに転送されます、そのためアクティブなアプリケーションによって処理されます。
## カスタムパス
特定の _adb_ バイナリを使用する場合、そのパスを環境変数`ADB`で構成します:
ADB=/path/to/adb scrcpy
`scrcpy-server`ファイルのパスを上書きするには、`SCRCPY_SERVER_PATH`でそのパスを構成します。
[useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345
## なぜ _scrcpy_?
同僚が私に、[gnirehtet]のように発音できない名前を見つけるように要求しました。
[`strcpy`]は**str**ingをコピーします。`scrcpy`は**scr**eenをコピーします。
[gnirehtet]: https://github.com/Genymobile/gnirehtet
[`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html
## ビルド方法は?
[BUILD]を参照してください。
[BUILD]: BUILD.md
## よくある質問
[FAQ](FAQ.md)を参照してください。
## 開発者
[開発者のページ]を読んでください。
[開発者のページ]: DEVELOP.md
## ライセンス
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][article-intro]
- [Scrcpy now works wirelessly][article-tcpip]
[article-intro]: https://blog.rom1v.com/2018/03/introducing-scrcpy/
[article-tcpip]: https://www.genymotion.com/blog/open-source-project-scrcpy-now-works-wirelessly/

View file

@ -68,9 +68,7 @@ Gentoo에서 ,[Ebuild] 가 가능합니다 : [`scrcpy/`][ebuild-link].
윈도우 상에서, 간단하게 설치하기 위해 종속성이 있는 사전 구축된 아카이브가 제공됩니다 (`adb` 포함) : 윈도우 상에서, 간단하게 설치하기 위해 종속성이 있는 사전 구축된 아카이브가 제공됩니다 (`adb` 포함) :
해당 파일은 Readme원본 링크를 통해서 다운로드가 가능합니다. 해당 파일은 Readme원본 링크를 통해서 다운로드가 가능합니다.
- [`scrcpy-win`][direct-win] - [README](README.md#windows)
[direct-win]: https://github.com/Genymobile/scrcpy/blob/master/README.md#windows
[어플을 직접 설치][BUILD] 할 수도 있습니다. [어플을 직접 설치][BUILD] 할 수도 있습니다.

View file

@ -38,6 +38,18 @@ control it using keyboard and mouse.
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a> <a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
### Summary
- Linux: `apt install scrcpy`
- Windows: [download][direct-win64]
- macOS: `brew install scrcpy`
Build from sources: [BUILD] ([simplified process][BUILD_simple])
[BUILD]: BUILD.md
[BUILD_simple]: BUILD.md#simple
### Linux ### Linux
On Debian (_testing_ and _sid_ for now) and Ubuntu (20.04): On Debian (_testing_ and _sid_ for now) and Ubuntu (20.04):
@ -67,9 +79,8 @@ For Gentoo, an [Ebuild] is available: [`scrcpy/`][ebuild-link].
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild [Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy [ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
You could also [build the app manually][BUILD] (don't worry, it's not that You could also [build the app manually][BUILD] ([simplified
hard). process][BUILD_simple]).
### Windows ### Windows
@ -116,13 +127,18 @@ brew install scrcpy
You need `adb`, accessible from your `PATH`. If you don't have it yet: You need `adb`, accessible from your `PATH`. If you don't have it yet:
```bash ```bash
# Homebrew >= 2.6.0 brew install android-platform-tools
brew install --cask android-platform-tools
# Homebrew < 2.6.0
brew cask install android-platform-tools
``` ```
It's also available in [MacPorts], which sets up adb for you:
```bash
sudo port install scrcpy
```
[MacPorts]: https://www.macports.org/
You can also [build the app manually][BUILD]. You can also [build the app manually][BUILD].
@ -466,7 +482,7 @@ _(left)_ and <kbd>MOD</kbd>+<kbd>→</kbd> _(right)_.
Note that _scrcpy_ manages 3 different rotations: Note that _scrcpy_ manages 3 different rotations:
- <kbd>MOD</kbd>+<kbd>r</kbd> requests the device to switch between portrait - <kbd>MOD</kbd>+<kbd>r</kbd> requests the device to switch between portrait
and landscape (the current running app may refuse, if it does support the and landscape (the current running app may refuse, if it does not support the
requested orientation). requested orientation).
- [`--lock-video-orientation`](#lock-video-orientation) changes the mirroring - [`--lock-video-orientation`](#lock-video-orientation) changes the mirroring
orientation (the orientation of the video sent from the device to the orientation (the orientation of the video sent from the device to the
@ -701,7 +717,7 @@ There is no visual feedback, a log is printed to the console.
The target directory can be changed on start: The target directory can be changed on start:
```bash ```bash
scrcpy --push-target /sdcard/foo/bar/ scrcpy --push-target=/sdcard/Download/
``` ```
@ -806,8 +822,6 @@ A colleague challenged me to find a name as unpronounceable as [gnirehtet].
See [BUILD]. See [BUILD].
[BUILD]: BUILD.md
## Common issues ## Common issues
@ -851,9 +865,10 @@ Read the [developers page].
This README is available in other languages: This README is available in other languages:
- [Indonesian (Indonesia, `id`) - v1.16](README.id.md) - [Indonesian (Indonesia, `id`) - v1.16](README.id.md)
- [日本語 (Japanese, `jp`) - v1.17](README.jp.md)
- [한국어 (Korean, `ko`) - v1.11](README.ko.md) - [한국어 (Korean, `ko`) - v1.11](README.ko.md)
- [português brasileiro (Brazilian Portuguese, `pt-BR`) - v1.12.1](README.pt-br.md) - [português brasileiro (Brazilian Portuguese, `pt-BR`) - v1.17](README.pt-br.md)
- [简体中文 (Simplified Chinese, `zh-Hans`) - v1.16](README.zh-Hans.md) - [简体中文 (Simplified Chinese, `zh-Hans`) - v1.17](README.zh-Hans.md)
- [繁體中文 (Traditional Chinese, `zh-Hant`) - v1.15](README.zh-Hant.md) - [繁體中文 (Traditional Chinese, `zh-Hant`) - v1.15](README.zh-Hant.md)
Only this README file is guaranteed to be up-to-date. Only this README file is guaranteed to be up-to-date.

View file

@ -1,16 +1,16 @@
_Only the original [README](README.md) is guaranteed to be up-to-date._ _Apenas o [README](README.md) original é garantido estar atualizado._
# scrcpy (v1.12.1) # scrcpy (v1.17)
Esta aplicação fornece visualização e controle de dispositivos Android conectados via Esta aplicação fornece exibição e controle de dispositivos Android conectados via
USB (ou [via TCP/IP][article-tcpip]). Não requer nenhum acesso root. USB (ou [via TCP/IP][article-tcpip]). Não requer nenhum acesso _root_.
Funciona em _GNU/Linux_, _Windows_ e _macOS_. Funciona em _GNU/Linux_, _Windows_ e _macOS_.
![screenshot](assets/screenshot-debian-600.jpg) ![screenshot](assets/screenshot-debian-600.jpg)
Foco em: Foco em:
- **leveza** (Nativo, mostra apenas a tela do dispositivo) - **leveza** (nativo, mostra apenas a tela do dispositivo)
- **performance** (30~60fps) - **performance** (30~60fps)
- **qualidade** (1920×1080 ou acima) - **qualidade** (1920×1080 ou acima)
- **baixa latência** ([35~70ms][lowlatency]) - **baixa latência** ([35~70ms][lowlatency])
@ -22,36 +22,41 @@ Foco em:
## Requisitos ## Requisitos
O Dispositivo Android requer pelo menos a API 21 (Android 5.0). O dispositivo Android requer pelo menos a API 21 (Android 5.0).
Tenha certeza de ter [ativado a depuração adb][enable-adb] no(s) seu(s) dispositivo(s).
Tenha certeza de ter [ativado a depuração USB][enable-adb] no(s) seu(s) dispositivo(s).
[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling [enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
Em alguns dispositivos, você também precisa ativar [uma opção adicional][control] para
Em alguns dispositivos, você também precisará ativar [uma opção adicional][control] para controlá-lo usando o teclado e mouse. controlá-lo usando teclado e mouse.
[control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323 [control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
## Obtendo o app ## Obter o app
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
### Linux ### Linux
No Debian (_em testes_ e _sid_ por enquanto): No Debian (_testing_ e _sid_ por enquanto) e Ubuntu (20.04):
``` ```
apt install scrcpy apt install scrcpy
``` ```
O pacote [Snap] está disponível: [`scrcpy`][snap-link]. Um pacote [Snap] está disponível: [`scrcpy`][snap-link].
[snap-link]: https://snapstats.org/snaps/scrcpy [snap-link]: https://snapstats.org/snaps/scrcpy
[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager) [snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager)
Para Fedora, um pacote [COPR] está disponível: [`scrcpy`][copr-link].
[COPR]: https://fedoraproject.org/wiki/Category:Copr
[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/
Para Arch Linux, um pacote [AUR] está disponível: [`scrcpy`][aur-link]. Para Arch Linux, um pacote [AUR] está disponível: [`scrcpy`][aur-link].
[AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository [AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository
@ -62,21 +67,19 @@ Para Gentoo, uma [Ebuild] está disponível: [`scrcpy/`][ebuild-link].
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild [Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy [ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
Você também pode [compilar o app manualmente][BUILD] (não se preocupe, não é tão
difícil).
Você também pode [compilar a aplicação manualmente][BUILD] (não se preocupe, não é tão difícil).
### Windows ### Windows
Para Windows, para simplicidade, um arquivo pré-compilado com todas as dependências Para Windows, por simplicidade, um arquivo pré-compilado com todas as dependências
(incluindo `adb`) está disponível: (incluindo `adb`) está disponível:
- [`scrcpy-win64-v1.12.1.zip`][direct-win64] - [README](README.md#windows)
_(SHA-256: 57d34b6d16cfd9fe169bc37c4df58ebd256d05c1ea3febc63d9cb0a027ab47c9)_
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.12.1/scrcpy-win64-v1.12.1.zip Também está disponível em [Chocolatey]:
Também disponível em [Chocolatey]:
[Chocolatey]: https://chocolatey.org/ [Chocolatey]: https://chocolatey.org/
@ -94,12 +97,12 @@ scoop install adb # se você ainda não o tem
[Scoop]: https://scoop.sh [Scoop]: https://scoop.sh
Você também pode [compilar a aplicação manualmente][BUILD]. Você também pode [compilar o app manualmente][BUILD].
### macOS ### macOS
A aplicação está disponível em [Homebrew]. Apenas a instale: A aplicação está disponível em [Homebrew]. Apenas instale-a:
[Homebrew]: https://brew.sh/ [Homebrew]: https://brew.sh/
@ -107,18 +110,22 @@ A aplicação está disponível em [Homebrew]. Apenas a instale:
brew install scrcpy brew install scrcpy
``` ```
Você precisa do `adb`, acessível através do seu `PATH`. Se você ainda não o tem: Você precisa do `adb`, acessível pelo seu `PATH`. Se você ainda não o tem:
```bash ```bash
# Homebrew >= 2.6.0
brew install --cask android-platform-tools
# Homebrew < 2.6.0
brew cask install android-platform-tools brew cask install android-platform-tools
``` ```
Você também pode [compilar a aplicação manualmente][BUILD]. Você também pode [compilar o app manualmente][BUILD].
## Executar ## Executar
Plugue um dispositivo Android e execute: Conecte um dispositivo Android e execute:
```bash ```bash
scrcpy scrcpy
@ -134,52 +141,87 @@ scrcpy --help
### Configuração de captura ### Configuração de captura
#### Redução de tamanho #### Reduzir tamanho
Algumas vezes, é útil espelhar um dispositivo Android em uma resolução menor para Algumas vezes, é útil espelhar um dispositivo Android em uma resolução menor para
aumentar performance. aumentar a performance.
Para limitar ambos (largura e altura) para algum valor (ex: 1024): Para limitar ambos (largura e altura) para algum valor (ex: 1024):
```bash ```bash
scrcpy --max-size 1024 scrcpy --max-size 1024
scrcpy -m 1024 # versão reduzida scrcpy -m 1024 # versão curta
``` ```
A outra dimensão é calculada para que a proporção do dispositivo seja preservada. A outra dimensão é calculada para que a proporção do dispositivo seja preservada.
Dessa forma, um dispositivo em 1920x1080 será espelhado em 1024x576. Dessa forma, um dispositivo de 1920x1080 será espelhado em 1024x576.
#### Mudanças no bit-rate #### Mudar bit-rate
O Padrão de bit-rate é 8 mbps. Para mudar o bitrate do vídeo (ex: para 2 Mbps): O bit-rate padrão é 8 Mbps. Para mudar o bit-rate do vídeo (ex: para 2 Mbps):
```bash ```bash
scrcpy --bit-rate 2M scrcpy --bit-rate 2M
scrcpy -b 2M # versão reduzida scrcpy -b 2M # versão curta
``` ```
#### Limitar frame rates #### Limitar frame rate
Em dispositivos com Android >= 10, a captura de frame rate pode ser limitada: O frame rate de captura pode ser limitado:
```bash ```bash
scrcpy --max-fps 15 scrcpy --max-fps 15
``` ```
Isso é oficialmente suportado desde o Android 10, mas pode funcionar em versões anteriores.
#### Cortar #### Cortar
A tela do dispositivo pode ser cortada para espelhar apenas uma parte da tela. A tela do dispositivo pode ser cortada para espelhar apenas uma parte da tela.
Isso é útil por exemplo, ao espelhar apenas um olho do Oculus Go: Isso é útil por exemplo, para espelhar apenas um olho do Oculus Go:
```bash ```bash
scrcpy --crop 1224:1440:0:0 # 1224x1440 no deslocamento (0,0) scrcpy --crop 1224:1440:0:0 # 1224x1440 no deslocamento (0,0)
``` ```
Se `--max-size` também for especificado, redimensionar é aplicado após os cortes. Se `--max-size` também for especificado, o redimensionamento é aplicado após o corte.
#### Travar orientação do vídeo
Para travar a orientação do espelhamento:
```bash
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ário
```
Isso afeta a orientação de gravação.
A [janela também pode ser rotacionada](#rotação) independentemente.
#### Encoder
Alguns dispositivos têm mais de um encoder, e alguns deles podem causar problemas ou
travar. É possível selecionar um encoder diferente:
```bash
scrcpy --encoder OMX.qcom.video.encoder.avc
```
Para listar os encoders disponíveis, você pode passar um nome de encoder inválido, o
erro dará os encoders disponíveis:
```bash
scrcpy --encoder _
```
### Gravando ### Gravando
É possível gravar a tela enquanto ocorre o espelhamento: É possível gravar a tela enquanto ocorre o espelhamento:
@ -194,65 +236,84 @@ Para desativar o espelhamento durante a gravação:
```bash ```bash
scrcpy --no-display --record file.mp4 scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv scrcpy -Nr file.mkv
# interrompe a gravação com Ctrl+C # interrompa a gravação com Ctrl+C
# Ctrl+C não encerrar propriamente no Windows, então desconecte o dispositivo
``` ```
"Frames pulados" são gravados, mesmo que não sejam mostrado em tempo real (por motivos de performance). "Frames pulados" são gravados, mesmo que não sejam exibidos em tempo real (por
Frames tem seu _horário_ _carimbado_ no dispositivo, então [Variação de atraso nos pacotes] não impacta na gravação do arquivo. motivos de performance). Frames têm seu _horário carimbado_ no dispositivo, então [variação de atraso nos
pacotes][packet delay variation] não impacta o arquivo gravado.
[Variação de atraso de pacote]: https://en.wikipedia.org/wiki/Packet_delay_variation [packet delay variation]: https://en.wikipedia.org/wiki/Packet_delay_variation
### Conexão ### Conexão
#### Wireless/Sem fio #### Sem fio
_Scrcpy_ usa `adb` para se comunicar com o dispositivo, e `adb` pode [conectar-se] à um dispositivo via TCP/IP: _Scrcpy_ usa `adb` para se comunicar com o dispositivo, e `adb` pode [conectar-se][connect] a um
dispositivo via TCP/IP:
1. Conecte o dispositivo no mesmo Wi-Fi do seu computador.
2. Pegue o endereço IP do seu dispositivo, em Configurações → Sobre o telefone → Status, ou
executando este comando:
```bash
adb shell ip route | awk '{print $9}'
```
1. Conecte o dispositivo a mesma rede Wi-Fi do seu computador.
2. Pegue o endereço de IP do seu dispositivo (Em Configurações → Sobre o Telefone → Status).
3. Ative o adb via TCP/IP no seu dispositivo: `adb tcpip 5555`. 3. Ative o adb via TCP/IP no seu dispositivo: `adb tcpip 5555`.
4. Desplugue seu dispositivo. 4. Desconecte seu dispositivo.
5. Conecte-se ao seu dispositivo: `adb connect DEVICE_IP:5555` _(substitua o `DEVICE_IP`)_. 5. Conecte-se ao seu dispositivo: `adb connect DEVICE_IP:5555` _(substitua `DEVICE_IP`)_.
6. Execute `scrcpy` como de costume. 6. Execute `scrcpy` como de costume.
Pode ser útil diminuir o bit-rate e a resolução: Pode ser útil diminuir o bit-rate e a resolução:
```bash ```bash
scrcpy --bit-rate 2M --max-size 800 scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # versão reduzida scrcpy -b2M -m800 # versão curta
``` ```
[conectar-se]: https://developer.android.com/studio/command-line/adb.html#wireless [connect]: https://developer.android.com/studio/command-line/adb.html#wireless
#### N-dispositivos #### Múltiplos dispositivos
Se alguns dispositivos estão listados em `adb devices`, você precisa especificar o _serial_: Se vários dispositivos são listados em `adb devices`, você deve especificar o _serial_:
```bash ```bash
scrcpy --serial 0123456789abcdef scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # versão reduzida scrcpy -s 0123456789abcdef # versão curta
``` ```
Se o dispositivo está conectado via TCP/IP: Se o dispositivo está conectado via TCP/IP:
```bash ```bash
scrcpy --serial 192.168.0.1:5555 scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # versão reduzida scrcpy -s 192.168.0.1:5555 # versão curta
``` ```
Você pode iniciar algumas instâncias do _scrcpy_ para alguns dispositivos. Você pode iniciar várias instâncias do _scrcpy_ para vários dispositivos.
#### Conexão via SSH #### Iniciar automaticamente quando dispositivo é conectado
Para conectar-se à um dispositivo remoto, é possível se conectar um cliente local `adb` à um servidor `adb` remoto (contanto que eles usem a mesma versão do protocolo _adb_): Você pode usar [AutoAdb]:
```bash ```bash
adb kill-server # encerra o servidor local na 5037 autoadb scrcpy -s '{}'
```
[AutoAdb]: https://github.com/rom1v/autoadb
#### Túnel SSH
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_):
```bash
adb kill-server # encerra o servidor adb local em 5037
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# mantém isso aberto # mantenha isso aberto
``` ```
De outro terminal: De outro terminal:
@ -261,17 +322,33 @@ De outro terminal:
scrcpy scrcpy
``` ```
Igual para conexões sem fio, pode ser útil reduzir a qualidade: Para evitar ativar o encaminhamento de porta remota, você pode forçar uma conexão
de encaminhamento (note o `-L` em vez de `-R`):
```bash
adb kill-server # encerra o servidor adb local em 5037
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# mantenha isso aberto
```
De outro terminal:
```bash
scrcpy --force-adb-forward
```
Igual a conexões sem fio, pode ser útil reduzir a qualidade:
``` ```
scrcpy -b2M -m800 --max-fps 15 scrcpy -b2M -m800 --max-fps 15
``` ```
### Configurações de Janela ### Configuração de janela
#### Título #### Título
Por padrão, o título da janela é o modelo do dispositivo. Isto pode ser mudado: Por padrão, o título da janela é o modelo do dispositivo. Isso pode ser mudado:
```bash ```bash
scrcpy --window-title 'Meu dispositivo' scrcpy --window-title 'Meu dispositivo'
@ -287,15 +364,15 @@ scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600
#### Sem bordas #### Sem bordas
Para desativar decorações da janela: Para desativar decorações de janela:
```bash ```bash
scrcpy --window-borderless scrcpy --window-borderless
``` ```
#### Sempre visível #### Sempre no topo
Para manter a janela do scrcpy sempre visível: Para manter a janela do scrcpy sempre no topo:
```bash ```bash
scrcpy --always-on-top scrcpy --always-on-top
@ -307,41 +384,117 @@ A aplicação pode ser iniciada diretamente em tela cheia:
```bash ```bash
scrcpy --fullscreen scrcpy --fullscreen
scrcpy -f # versão reduzida scrcpy -f # versão curta
``` ```
Tela cheia pode ser alternada dinamicamente com `Ctrl`+`f`. Tela cheia pode ser alternada dinamicamente com <kbd>MOD</kbd>+<kbd>f</kbd>.
#### Rotação
A janela pode ser rotacionada:
```bash
scrcpy --rotation 1
```
Valores possíveis são:
- `0`: sem rotação
- `1`: 90 graus sentido anti-horário
- `2`: 180 graus
- `3`: 90 graus sentido horário
A rotação também pode ser mudada dinamicamente com <kbd>MOD</kbd>+<kbd></kbd>
_(esquerda)_ e <kbd>MOD</kbd>+<kbd></kbd> _(direita)_.
Note que _scrcpy_ controla 3 rotações diferentes:
- <kbd>MOD</kbd>+<kbd>r</kbd> 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-orientation`](#travar-orientação-do-vídeo) muda a orientação de
espelhamento (a orientação do vídeo enviado pelo dispositivo para o
computador). Isso afeta a gravação.
- `--rotation` (ou <kbd>MOD</kbd>+<kbd></kbd>/<kbd>MOD</kbd>+<kbd></kbd>)
rotaciona apenas o conteúdo da janela. Isso afeta apenas a exibição, não a
gravação.
### Outras opções de espelhamento ### Outras opções de espelhamento
#### Apenas leitura #### Apenas leitura
Para desativar controles (tudo que possa interagir com o dispositivo: teclas de entrada, eventos de mouse, arrastar e soltar arquivos): Para desativar controles (tudo que possa interagir com o dispositivo: teclas de entrada,
eventos de mouse, arrastar e soltar arquivos):
```bash ```bash
scrcpy --no-control scrcpy --no-control
scrcpy -n scrcpy -n
``` ```
#### Desligar a tela #### Display
É possível desligar a tela do dispositivo durante o início do espelhamento com uma opção de linha de comando: Se vários displays estão disponíveis, é possível selecionar o display para
espelhar:
```bash
scrcpy --display 1
```
A 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).
#### Permanecer ativo
Para evitar que o dispositivo seja suspenso após um delay quando o dispositivo é conectado:
```bash
scrcpy --stay-awake
scrcpy -w
```
O estado inicial é restaurado quando o scrcpy é fechado.
#### Desligar tela
É possível desligar a tela do dispositivo durante o início do espelhamento com uma
opção de linha de comando:
```bash ```bash
scrcpy --turn-screen-off scrcpy --turn-screen-off
scrcpy -S scrcpy -S
``` ```
Ou apertando `Ctrl`+`o` durante qualquer momento. Ou apertando <kbd>MOD</kbd>+<kbd>o</kbd> a qualquer momento.
Para ligar novamente, pressione `POWER` (ou `Ctrl`+`p`). Para ligar novamente, pressione <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>.
#### Frames expirados de renderização No Android, o botão de `POWER` sempre liga a tela. Por conveniência, se
`POWER` é enviado via scrcpy (via clique-direito ou <kbd>MOD</kbd>+<kbd>p</kbd>), 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.
Por padrão, para minimizar a latência, _scrcpy_ sempre renderiza o último frame decodificado disponível e descarta o anterior. Também pode ser útil evitar que o dispositivo seja suspenso:
Para forçar a renderização de todos os frames ( com o custo de aumento de latência), use: ```bash
scrcpy --turn-screen-off --stay-awake
scrcpy -Sw
```
#### Renderizar frames expirados
Por padrão, para minimizar a latência, _scrcpy_ sempre renderiza o último frame decodificado
disponível, e descarta o anterior.
Para forçar a renderização de todos os frames (com o custo de um possível aumento de
latência), use:
```bash ```bash
scrcpy --render-expired-frames scrcpy --render-expired-frames
@ -349,11 +502,13 @@ scrcpy --render-expired-frames
#### Mostrar toques #### Mostrar toques
Para apresentações, pode ser útil mostrar toques físicos(dispositivo físico). Para apresentações, pode ser útil mostrar toques físicos (no dispositivo
físico).
Android fornece esta funcionalidade nas _Opções do Desenvolvedor_. Android fornece esta funcionalidade nas _Opções do desenvolvedor_.
_Scrcpy_ fornece esta opção de ativar esta funcionalidade no início e desativar no encerramento: _Scrcpy_ fornece esta opção de ativar esta funcionalidade no início e restaurar o
valor inicial no encerramento:
```bash ```bash
scrcpy --show-touches scrcpy --show-touches
@ -363,59 +518,137 @@ scrcpy -t
Note que isto mostra apenas toques _físicos_ (com o dedo no dispositivo). Note que isto mostra apenas toques _físicos_ (com o dedo no dispositivo).
#### Desativar descanso de tela
Por padrão, scrcpy não evita que o descanso de tela rode no computador.
Para desativá-lo:
```bash
scrcpy --disable-screensaver
```
### Controle de entrada ### Controle de entrada
#### Rotacionar a tela do dispositivo #### Rotacionar a tela do dispositivo
Pressione `Ctrl`+`r` para mudar entre os modos Retrato e Paisagem. Pressione <kbd>MOD</kbd>+<kbd>r</kbd> para mudar entre os modos retrato e
paisagem.
Note que só será rotacionado se a aplicação em primeiro plano tiver suporte para o modo requisitado. Note que só será rotacionado se a aplicação em primeiro plano suportar a
orientação requisitada.
#### Copiar-Colar #### Copiar-colar
É possível sincronizar áreas de transferência entre computador e o dispositivo, Sempre que a área de transferência do Android muda, é automaticamente sincronizada com a
para ambas direções: área de transferência do computador.
- `Ctrl`+`c` copia a área de transferência do dispositivo para a área de trasferência do computador; Qualquer atalho com <kbd>Ctrl</kbd> é encaminhado para o dispositivo. Em particular:
- `Ctrl`+`Shift`+`v` copia a área de transferência do computador para a área de transferência do dispositivo; - <kbd>Ctrl</kbd>+<kbd>c</kbd> tipicamente copia
- `Ctrl`+`v` _cola_ a área de transferência do computador como uma sequência de eventos de texto (mas - <kbd>Ctrl</kbd>+<kbd>x</kbd> tipicamente recorta
quebra caracteres não-ASCII). - <kbd>Ctrl</kbd>+<kbd>v</kbd> tipicamente cola (após a sincronização de área de transferência
computador-para-dispositivo)
#### Preferências de injeção de texto Isso tipicamente funciona como esperado.
Existe dois tipos de [eventos][textevents] gerados ao digitar um texto: O comportamento de fato depende da aplicação ativa, no entanto. Por exemplo,
- _eventos de teclas_, sinalizando que a tecla foi pressionada ou solta; _Termux_ envia SIGINT com <kbd>Ctrl</kbd>+<kbd>c</kbd>, e _K-9 Mail_
compõe uma nova mensagem.
Para copiar, recortar e colar em tais casos (mas apenas suportado no Android >= 7):
- <kbd>MOD</kbd>+<kbd>c</kbd> injeta `COPY`
- <kbd>MOD</kbd>+<kbd>x</kbd> injeta `CUT`
- <kbd>MOD</kbd>+<kbd>v</kbd> injeta `PASTE` (após a sincronização de área de transferência
computador-para-dispositivo)
Em adição, <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> 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
<kbd>Ctrl</kbd>+<kbd>v</kbd> quanto <kbd>MOD</kbd>+<kbd>v</kbd>) 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 <kbd>Ctrl</kbd>+<kbd>v</kbd> e <kbd>MOD</kbd>+<kbd>v</kbd> 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 <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>).
#### Pinçar para dar zoom
Para simular "pinçar para dar zoom": <kbd>Ctrl</kbd>+_clicar-e-mover_.
Mais precisamente, segure <kbd>Ctrl</kbd> 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.
#### Preferência de injeção de texto
Existem dois tipos de [eventos][textevents] 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. - _eventos de texto_, sinalizando que o texto foi inserido.
Por padrão, letras são injetadas usando eventos de teclas, assim teclados comportam-se Por padrão, letras são injetadas usando eventos de tecla, assim o teclado comporta-se
como esperado em jogos (normalmente para tecladas WASD) como esperado em jogos (normalmente para teclas WASD).
Mas isto pode [causar problemas][prefertext]. Se você encontrar tal problema, Mas isso pode [causar problemas][prefertext]. Se você encontrar tal problema, você
pode evitá-lo usando: pode evitá-lo com:
```bash ```bash
scrcpy --prefer-text scrcpy --prefer-text
``` ```
(mas isto vai quebrar o comportamento do teclado em jogos) (mas isso vai quebrar o comportamento do teclado em jogos)
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input [textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343 [prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
### Transferência de arquivo #### Repetir tecla
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:
```bash
scrcpy --no-key-repeat
```
#### Clique-direito e clique-do-meio
Por 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:
```bash
scrcpy --forward-all-clicks
```
### Soltar arquivo
#### Instalar APK #### Instalar APK
Para instalar um APK, arraste e solte o arquivo APK(com extensão `.apk`) na janela _scrcpy_. Para 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. Não existe feedback visual, um log é imprimido no console.
#### Enviar arquivo para o dispositivo #### Enviar arquivo para dispositivo
Para enviar um arquivo para o diretório `/sdcard/` no dispositivo, arraste e solte um arquivo não APK para a janela do Para enviar um arquivo para `/sdcard/` no dispositivo, arraste e solte um arquivo (não-APK) para a
_scrcpy_. janela do _scrcpy_.
Não existe feedback visual, um log é imprimido no console. Não existe feedback visual, um log é imprimido no console.
@ -428,45 +661,73 @@ scrcpy --push-target /sdcard/foo/bar/
### Encaminhamento de áudio ### Encaminhamento de áudio
Áudio não é encaminhando pelo _scrcpy_. Use [USBaudio] (Apenas linux). Áudio não é encaminhado pelo _scrcpy_. Use [sndcpy].
Também veja [issue #14]. Também veja [issue #14].
[USBaudio]: https://github.com/rom1v/usbaudio [sndcpy]: https://github.com/rom1v/sndcpy
[issue #14]: https://github.com/Genymobile/scrcpy/issues/14 [issue #14]: https://github.com/Genymobile/scrcpy/issues/14
## Atalhos ## Atalhos
| Ação | Atalho | Atalho (macOS) Na lista a seguir, <kbd>MOD</kbd> é o modificador de atalho. Por padrão, é
| ------------------------------------------------------------- |:------------------------------- |:----------------------------- <kbd>Alt</kbd> (esquerdo) ou <kbd>Super</kbd> (esquerdo).
| Alternar para modo de tela cheia | `Ctrl`+`f` | `Cmd`+`f`
| Redimensionar janela para pixel-perfect(Escala 1:1) | `Ctrl`+`g` | `Cmd`+`g` Ele pode ser mudado usando `--shortcut-mod`. Possíveis teclas são `lctrl`, `rctrl`,
| Redimensionar janela para tirar as bordas pretas | `Ctrl`+`x` \| _Clique-duplo¹_ | `Cmd`+`x` \| _Clique-duplo¹_ `lalt`, `ralt`, `lsuper` e `rsuper`. Por exemplo:
| Clicar em `HOME` | `Ctrl`+`h` \| _Clique-central_ | `Ctrl`+`h` \| _Clique-central_
| Clicar em `BACK` | `Ctrl`+`b` \| _Clique-direito²_ | `Cmd`+`b` \| _Clique-direito²_ ```bash
| Clicar em `APP_SWITCH` | `Ctrl`+`s` | `Cmd`+`s` # usar RCtrl para atalhos
| Clicar em `MENU` | `Ctrl`+`m` | `Ctrl`+`m` scrcpy --shortcut-mod=rctrl
| Clicar em `VOLUME_UP` | `Ctrl`+`↑` _(cima)_ | `Cmd`+`↑` _(cima)_
| Clicar em `VOLUME_DOWN` | `Ctrl`+`↓` _(baixo)_ | `Cmd`+`↓` _(baixo)_ # usar tanto LCtrl+LAlt quanto LSuper para atalhos
| Clicar em `POWER` | `Ctrl`+`p` | `Cmd`+`p` scrcpy --shortcut-mod=lctrl+lalt,lsuper
| Ligar | _Clique-direito²_ | _Clique-direito²_ ```
| Desligar a tela do dispositivo | `Ctrl`+`o` | `Cmd`+`o`
| Rotacionar tela do dispositivo | `Ctrl`+`r` | `Cmd`+`r` _<kbd>[Super]</kbd> é tipicamente a tecla <kbd>Windows</kbd> ou <kbd>Cmd</kbd>._
| Expandir painel de notificação | `Ctrl`+`n` | `Cmd`+`n`
| Esconder painel de notificação | `Ctrl`+`Shift`+`n` | `Cmd`+`Shift`+`n` [Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button)
| Copiar área de transferência do dispositivo para o computador | `Ctrl`+`c` | `Cmd`+`c`
| Colar área de transferência do computador para o dispositivo | `Ctrl`+`v` | `Cmd`+`v` | Ação | Atalho
| Copiar área de transferência do computador para dispositivo | `Ctrl`+`Shift`+`v` | `Cmd`+`Shift`+`v` | ------------------------------------------- |:-----------------------------
| Ativar/desativar contador de FPS(Frames por segundo) | `Ctrl`+`i` | `Cmd`+`i` | Mudar modo de tela cheia | <kbd>MOD</kbd>+<kbd>f</kbd>
| Rotacionar display para esquerda | <kbd>MOD</kbd>+<kbd></kbd> _(esquerda)_
| Rotacionar display para direita | <kbd>MOD</kbd>+<kbd></kbd> _(direita)_
| Redimensionar janela para 1:1 (pixel-perfect) | <kbd>MOD</kbd>+<kbd>g</kbd>
| Redimensionar janela para remover bordas pretas | <kbd>MOD</kbd>+<kbd>w</kbd> \| _Clique-duplo¹_
| Clicar em `HOME` | <kbd>MOD</kbd>+<kbd>h</kbd> \| _Clique-do-meio_
| Clicar em `BACK` | <kbd>MOD</kbd>+<kbd>b</kbd> \| _Clique-direito²_
| Clicar em `APP_SWITCH` | <kbd>MOD</kbd>+<kbd>s</kbd>
| Clicar em `MENU` (desbloquear tela | <kbd>MOD</kbd>+<kbd>m</kbd>
| Clicar em `VOLUME_UP` | <kbd>MOD</kbd>+<kbd></kbd> _(cima)_
| Clicar em `VOLUME_DOWN` | <kbd>MOD</kbd>+<kbd></kbd> _(baixo)_
| Clicar em `POWER` | <kbd>MOD</kbd>+<kbd>p</kbd>
| Ligar | _Clique-direito²_
| Desligar tela do dispositivo (continuar espelhando) | <kbd>MOD</kbd>+<kbd>o</kbd>
| Ligar tela do dispositivo | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>
| Rotacionar tela do dispositivo | <kbd>MOD</kbd>+<kbd>r</kbd>
| Expandir painel de notificação | <kbd>MOD</kbd>+<kbd>n</kbd>
| Colapsar painel de notificação | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd>
| Copiar para área de transferência³ | <kbd>MOD</kbd>+<kbd>c</kbd>
| Recortar para área de transferência³ | <kbd>MOD</kbd>+<kbd>x</kbd>
| Sincronizar áreas de transferência e colar³ | <kbd>MOD</kbd>+<kbd>v</kbd>
| Injetar texto da área de transferência do computador | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>
| Ativar/desativar contador de FPS (em stdout) | <kbd>MOD</kbd>+<kbd>i</kbd>
| Pinçar para dar zoom | <kbd>Ctrl</kbd>+_clicar-e-mover_
_¹Clique-duplo em bordas pretas para removê-las._ _¹Clique-duplo em bordas pretas para removê-las._
_²Botão direito liga a tela se ela estiver desligada, clique BACK para o contrário._ _²Clique-direito liga a tela se ela estiver desligada, pressiona BACK caso contrário._
_³Apenas em Android >= 7._
Todos os atalhos <kbd>Ctrl</kbd>+_tecla_ são encaminhados para o dispositivo, para que eles sejam
tratados pela aplicação ativa.
## Caminhos personalizados ## Caminhos personalizados
Para usar um binário específico _adb_, configure seu caminho na variável de ambiente `ADB`: Para usar um binário _adb_ específico, configure seu caminho na variável de ambiente
`ADB`:
ADB=/caminho/para/adb scrcpy ADB=/caminho/para/adb scrcpy
@ -478,7 +739,7 @@ Para sobrepor o caminho do arquivo `scrcpy-server`, configure seu caminho em
## Por quê _scrcpy_? ## Por quê _scrcpy_?
Um colega me desafiou a encontrar um nome impronunciável como [gnirehtet]. Um colega me desafiou a encontrar um nome tão impronunciável quanto [gnirehtet].
[`strcpy`] copia uma **str**ing; `scrcpy` copia uma **scr**een. [`strcpy`] copia uma **str**ing; `scrcpy` copia uma **scr**een.
@ -495,12 +756,12 @@ Veja [BUILD].
## Problemas comuns ## Problemas comuns
Veja [FAQ](FAQ.md). Veja o [FAQ](FAQ.md).
## Desenvolvedores ## Desenvolvedores
Leia a [developers page]. Leia a [página dos desenvolvedores][developers page].
[developers page]: DEVELOP.md [developers page]: DEVELOP.md

View file

@ -2,115 +2,108 @@ _Only the original [README](README.md) is guaranteed to be up-to-date._
只有原版的[README](README.md)会保持最新。 只有原版的[README](README.md)会保持最新。
本文根据[479d10d]进行翻译。 本文根据[ed130e05]进行翻译。
[479d10d]: https://github.com/Genymobile/scrcpy/commit/479d10dc22b70272187e0963c6ad24d754a669a2#diff-04c6e90faac2675aa89e2176d2eec7d8 [ed130e05]: https://github.com/Genymobile/scrcpy/blob/ed130e05d55615d6014d93f15cfcb92ad62b01d8/README.md
# scrcpy (v1.17)
本应用程序可以显示并控制通过 USB (或 [TCP/IP][article-tcpip]) 连接的安卓设备,且不需要任何 _root_ 权限。本程序支持 _GNU/Linux_, _Windows__macOS_
# scrcpy (v1.16)
本应用程序可以通过USB或 [TCP/IP][article-tcpip] )连接用于显示或控制安卓设备。这不需要获取 _root_ 权限。
该应用程序可以在 _GNU/Linux_, _Windows__macOS_ 环境下运行。
[article-tcpip]:https://www.genymotion.com/blog/open-source-project-scrcpy-now-works-wirelessly/
![screenshot](assets/screenshot-debian-600.jpg) ![screenshot](assets/screenshot-debian-600.jpg)
它专注于: 它专注于:
- **轻量** (原生,仅显示设备屏幕) - **轻量** (原生,仅显示设备屏幕)
- **性能** 30~60fps - **性能** (30~60fps)
- **质量** 分辨率可达1920x1080或更高 - **质量** (分辨率可达 1920×1080 或更高)
- **低延迟** (35-70ms) - **低延迟** ([35~70ms][lowlatency])
- **快速启动** (数秒内即能开始显示) - **快速启动** (最快 1 秒内即可显示第一帧)
- **无侵入性** (不需要在安卓设备上安装任何程序) - **无侵入性** (不会在设备上遗留任何程序)
[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646
## 使用要求 ## 系统要求
安卓设备系统版本需要在Android 5.0API 21)或以上 安卓设备最低需要支持 API 21 (Android 5.0)
确保您在设备上开启了[adb调试]。 确保设备已[开启 adb 调试][enable-adb]。
[adb调试]: https://developer.android.com/studio/command-line/adb.html#Enabling [enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling
在某些设备上,你还需要开启[额外的选项]以用鼠标和键盘进行控制。 在某些设备上,还需要开启[额外的选项][control]以使用鼠标和键盘进行控制。
[额外的选项]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323 [control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323
## 获取scrcpy ## 获取本程序
<a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a> <a href="https://repology.org/project/scrcpy/versions"><img src="https://repology.org/badge/vertical-allrepos/scrcpy.svg" alt="Packaging status" align="right"></a>
### Linux ### Linux
Debian目前仅测试版和不稳定版_testing__sid_ 版本和Ubuntu 20.04上: Debian (目前仅支持 _testing__sid_ 分支) 和Ubuntu (20.04) 上:
``` ```
apt install scrcpy apt install scrcpy
``` ```
[Snap]包也是可用的: [`scrcpy`][snap-link]. 我们也提供 [Snap] 包: [`scrcpy`][snap-link]。
[snap-link]: https://snapstats.org/snaps/scrcpy [snap-link]: https://snapstats.org/snaps/scrcpy
[snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager) [snap]: https://en.wikipedia.org/wiki/Snappy_(package_manager)
于Fedora用户我们提供[COPR]包: [`scrcpy`][copr-link]. Fedora 我们提供 [COPR] 包: [`scrcpy`][copr-link]。
[COPR]: https://fedoraproject.org/wiki/Category:Copr [COPR]: https://fedoraproject.org/wiki/Category:Copr
[copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/ [copr-link]: https://copr.fedorainfracloud.org/coprs/zeno/scrcpy/
于Arch Linux用户我们提供[AUR]包: [`scrcpy`][aur-link]. Arch Linux 我们提供 [AUR] 包: [`scrcpy`][aur-link]。
[AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository [AUR]: https://wiki.archlinux.org/index.php/Arch_User_Repository
[aur-link]: https://aur.archlinux.org/packages/scrcpy/ [aur-link]: https://aur.archlinux.org/packages/scrcpy/
于Gentoo用户我们提供[Ebuild]包:[`scrcpy/`][ebuild-link]. Gentoo 我们提供 [Ebuild] 包:[`scrcpy/`][ebuild-link]。
[Ebuild]: https://wiki.gentoo.org/wiki/Ebuild [Ebuild]: https://wiki.gentoo.org/wiki/Ebuild
[ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy [ebuild-link]: https://github.com/maggu2810/maggu2810-overlay/tree/master/app-mobilephone/scrcpy
您也可以[自行编译][编译](不必担心,这并不困难)。 您也可以[自行构建][BUILD] (不必担心,这并不困难)。
### Windows ### Windows
Windows上简便起见我们准备了包含所有依赖项包括adb的程序包。 Windows 上,简便起见,我们提供包含了所有依赖 (包括 `adb`) 的预编译包。
- [`scrcpy-win64-v1.16.zip`][direct-win64] - [README](README.md#windows)
_(SHA-256: 3f30dc5db1a2f95c2b40a0f5de91ec1642d9f53799250a8c529bc882bc0918f0)_
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-win64-v1.16.zip 也可以使用 [Chocolatey]
您也可以在[Chocolatey]下载:
[Chocolatey]: https://chocolatey.org/ [Chocolatey]: https://chocolatey.org/
```bash ```bash
choco install scrcpy choco install scrcpy
choco install adb # 如果你没有adb choco install adb # 如果还没有 adb
``` ```
也可以使用 [Scoop]: 或者 [Scoop]:
```bash ```bash
scoop install scrcpy scoop install scrcpy
scoop install adb # 如果你没有adb scoop install adb # 如果还没有 adb
``` ```
[Scoop]: https://scoop.sh [Scoop]: https://scoop.sh
您也可以[自行编译][编译]。 您也可以[自行构建][BUILD]。
### macOS ### macOS
您可以使用[Homebrew]下载scrcpy。直接安装就可以了 本程序已发布到 [Homebrew]。直接安装即可
[Homebrew]: https://brew.sh/ [Homebrew]: https://brew.sh/
@ -118,24 +111,28 @@ scoop install adb # 如果你没有adb
brew install scrcpy brew install scrcpy
``` ```
您需要 `adb`以使用scrcpy并且它需要可以通过 `PATH`被访问。如果您没有: 你还需要在 `PATH` 内有 `adb`。如果还没有:
```bash ```bash
# Homebrew >= 2.6.0
brew install --cask android-platform-tools
# Homebrew < 2.6.0
brew cask install android-platform-tools brew cask install android-platform-tools
``` ```
您也可以[自行编译][编译]。 您也可以[自行构建][BUILD]。
## 运行scrcpy ## 运行
用USB链接电脑和安卓设备执行: 连接安卓设备,然后执行:
```bash ```bash
scrcpy scrcpy
``` ```
支持命令行参数执行,查看参数列表: 本程序支持命令行参数,查看参数列表:
```bash ```bash
scrcpy --help scrcpy --help
@ -143,111 +140,129 @@ scrcpy --help
## 功能介绍 ## 功能介绍
### 画面设置 ### 捕获设置
#### 缩小分辨率 #### 降低分辨率
有时候,将设备屏幕镜像分辨率降低可以有效地提升性能。 有时候,可以通过降低镜像的分辨率来提高性能。
我们可以将高度和宽度都限制在一定大小内(如 1024 要同时限制宽度和高度到某个值 (例如 1024)
```bash ```bash
scrcpy --max-size 1024 scrcpy --max-size 1024
scrcpy -m 1024 # short version scrcpy -m 1024 # 简写
``` ```
较短的一边会被按比例缩小以保持设备的显示比例。 另一边会被按比例缩小以保持设备的显示比例。这样1920×1080 分辨率的设备会以 1024×576 的分辨率进行镜像。
这样1920x1080 的设备会以 1024x576 的分辨率显示。
#### 修改画面比特 #### 修改
默认的比特率是8Mbps。如果要改变画面的比特率 (比如说改成2Mbps) 默认码率是 8Mbps。要改变视频的码率 (例如改为 2Mbps)
```bash ```bash
scrcpy --bit-rate 2M scrcpy --bit-rate 2M
scrcpy -b 2M # short version scrcpy -b 2M # 简写
``` ```
#### 限制画面帧率 #### 限制帧率
画面的帧率可以通过下面的命令被限制 要限制捕获的帧率
```bash ```bash
scrcpy --max-fps 15 scrcpy --max-fps 15
``` ```
这个功能仅在Android 10和以后的版本被Android官方支持但也有可能在更早的版本可用 本功能从 Android 10 开始才被官方支持,但在一些旧版本中也能生效
#### 画面裁剪 #### 画面裁剪
设备画面可在裁切后进行镜像,以显示部分屏幕 可以对设备屏幕进行裁剪,只镜像屏幕的一部分
这项功能可以用于例如只显示Oculus Go的一只眼睛。 例如可以只镜像 Oculus Go 的一只眼睛。
```bash ```bash
scrcpy --crop 1224:1440:0:0 # 1224x1440 at offset (0,0) scrcpy --crop 1224:1440:0:0 # 以 (0,0) 为原点的 1224x1440 像素
``` ```
如果`--max-size`在同时被指定,分辨率的改变将在画面裁切后进行 如果同时指定了 `--max-size`,会先进行裁剪,再进行缩放
#### 锁定屏幕 #### 锁定屏幕
可以使用如下命令锁定屏幕朝向: 要锁定镜像画面的方向:
```bash ```bash
scrcpy --lock-video-orientation 0 # 自然 scrcpy --lock-video-orientation 0 # 自然
scrcpy --lock-video-orientation 1 # 90° 逆时针旋转 scrcpy --lock-video-orientation 1 # 逆时针旋转 90°
scrcpy --lock-video-orientation 2 # 180° scrcpy --lock-video-orientation 2 # 180°
scrcpy --lock-video-orientation 3 # 90° 顺时针旋转 scrcpy --lock-video-orientation 3 # 顺时针旋转 90°
``` ```
该设定影响录制 只影响录制的方向
[窗口可以独立旋转](#旋转)。
#### 编码器
一些设备内置了多种编码器,但是有的编码器会导致问题或崩溃。可以手动选择其它编码器:
```bash
scrcpy --encoder OMX.qcom.video.encoder.avc
```
要列出可用的编码器,可以指定一个不存在的编码器名称,错误信息中会包含所有的编码器:
```bash
scrcpy --encoder _
```
### 屏幕录制 ### 屏幕录制
可以在屏幕镜像的同时录制视频: 可以在镜像的同时录制视频:
```bash ```bash
scrcpy --record file.mp4 scrcpy --record file.mp4
scrcpy -r file.mkv scrcpy -r file.mkv
``` ```
在不开启屏幕镜像的同时录制: 仅录制,不显示镜像
```bash ```bash
scrcpy --no-display --record file.mp4 scrcpy --no-display --record file.mp4
scrcpy -Nr file.mkv scrcpy -Nr file.mkv
# 按Ctrl+C以停止录制 # 按 Ctrl+C 停止录制
``` ```
在显示中“被跳过的帧”会被录制,虽然它们由于性能原因没有实时显示。 录制时会包含“被跳过的帧”,即使它们由于性能原因没有实时显示。设备会为每一帧打上 _时间戳_ ,所以 [包时延抖动][packet delay variation] 不会影响录制的文件。
在传输中每一帧都有 _时间戳_ ,所以 [包时延变化] 并不影响录制的文件。
[包时延变化]: https://en.wikipedia.org/wiki/Packet_delay_variation [packet delay variation]: https://en.wikipedia.org/wiki/Packet_delay_variation
### 连接方式 ### 连接
#### 无线 #### 无线
_Scrcpy_ 使用`adb`来与安卓设备连接。同时,`adb`能够通过TCP/IP[连接]到安卓设备: _Scrcpy_ 使用 `adb` 与设备通信,并且 `adb` 支持通过 TCP/IP [连接]到设备:
1. 将您的安卓设备和电脑连接至同一Wi-Fi。 1. 将设备和电脑连接至同一 Wi-Fi。
2. 获取安卓设备的IP地址在设置-关于手机-状态信息)。 2. 打开 设置 → 关于手机 → 状态信息,获取设备的 IP 地址,也可以执行以下的命令:
3. 打开安卓设备的网络adb功能`adb tcpip 5555`。 ```bash
4. 将您的设备与电脑断开连接。 adb shell ip route | awk '{print $9}'
5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(用设备IP替换 `DEVICE_IP`)_. ```
6. 运行`scrcpy`。
降低比特率和分辨率可能有助于性能: 3. 启用设备的网络 adb 功能 `adb tcpip 5555`
4. 断开设备的 USB 连接。
5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(将 `DEVICE_IP` 替换为设备 IP)_.
6. 正常运行 `scrcpy`
可能需要降低码率和分辨率:
```bash ```bash
scrcpy --bit-rate 2M --max-size 800 scrcpy --bit-rate 2M --max-size 800
scrcpy -b2M -m800 # short version scrcpy -b2M -m800 # 简写
``` ```
[连接]: https://developer.android.com/studio/command-line/adb.html#wireless [连接]: https://developer.android.com/studio/command-line/adb.html#wireless
@ -255,18 +270,18 @@ scrcpy -b2M -m800 # short version
#### 多设备 #### 多设备
如果多个设备在执行`adb devices`后被列出,您必须指定设备的 _序列号_ 如果 `adb devices` 列出了多个设备,您必须指定设备的 _序列号_
```bash ```bash
scrcpy --serial 0123456789abcdef scrcpy --serial 0123456789abcdef
scrcpy -s 0123456789abcdef # short version scrcpy -s 0123456789abcdef # 简写
``` ```
如果设备是通过TCP/IP方式连接到电脑的 如果设备通过 TCP/IP 连接
```bash ```bash
scrcpy --serial 192.168.0.1:5555 scrcpy --serial 192.168.0.1:5555
scrcpy -s 192.168.0.1:5555 # short version scrcpy -s 192.168.0.1:5555 # 简写
``` ```
您可以同时启动多个 _scrcpy_ 实例以同时显示多个设备的画面。 您可以同时启动多个 _scrcpy_ 实例以同时显示多个设备的画面。
@ -281,38 +296,38 @@ autoadb scrcpy -s '{}'
[AutoAdb]: https://github.com/rom1v/autoadb [AutoAdb]: https://github.com/rom1v/autoadb
#### SSH 连接 #### SSH 隧道
本地的 adb 可以远程连接到另一个 adb 服务器假设两者的adb版本相同来远程连接到设备 要远程连接到设备,可以将本地的 adb 客户端连接到远程的 adb 服务端 (需要两端的 _adb_ 协议版本相同)
```bash ```bash
adb kill-server # 关闭本地5037端口上的adb服务器 adb kill-server # 关闭本地 5037 端口上的 adb 服务端
ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 保持该窗口开启 # 保持该窗口开启
``` ```
另一个终端: 另一个终端:
```bash ```bash
scrcpy scrcpy
``` ```
为了避免启动远程端口转发,你可以强制启动一个转发连接(注意`-L`和`-R`的区别 若要不使用远程端口转发,可以强制使用正向连接 (注意 `-L``-R` 的区别)
```bash ```bash
adb kill-server # kill the local adb server on 5037 adb kill-server # 关闭本地 5037 端口上的 adb 服务端
ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer ssh -CN -L5037:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 保持该窗口开启 # 保持该窗口开启
``` ```
另一个终端: 另一个终端:
```bash ```bash
scrcpy --force-adb-forward scrcpy --force-adb-forward
``` ```
和无线网络连接类似,下列设置可能对改善性能有帮助 类似无线网络连接,可能需要降低画面质量
``` ```
scrcpy -b2M -m800 --max-fps 15 scrcpy -b2M -m800 --max-fps 15
@ -322,7 +337,7 @@ scrcpy -b2M -m800 --max-fps 15
#### 标题 #### 标题
窗口的标题默认为设备型号。可以通过如下命令修改 窗口的标题默认为设备型号。可以通过如下命令修改:
```bash ```bash
scrcpy --window-title 'My device' scrcpy --window-title 'My device'
@ -358,14 +373,14 @@ scrcpy --always-on-top
```bash ```bash
scrcpy --fullscreen scrcpy --fullscreen
scrcpy -f # short version scrcpy -f # 简写
``` ```
全屏状态可以通过<kbd>MOD</kbd>+<kbd>f</kbd>实时改变 全屏状态可以通过 <kbd>MOD</kbd>+<kbd>f</kbd> 随时切换
#### 旋转 #### 旋转
通过如下命令,窗口可以旋转 可以通过以下命令旋转窗口
```bash ```bash
scrcpy --rotation 1 scrcpy --rotation 1
@ -377,23 +392,19 @@ scrcpy --rotation 1
- `2`: 旋转 180° - `2`: 旋转 180°
- `3`: 顺时针旋转 90° - `3`: 顺时针旋转 90°
这同样可以使用<kbd>MOD</kbd>+<kbd></kbd> 也可以使用 <kbd>MOD</kbd>+<kbd></kbd> _(左箭头)_<kbd>MOD</kbd>+<kbd></kbd> _(右箭头)_ 随时更改。
_(左)_ 和 <kbd>MOD</kbd>+<kbd></kbd> _(右)_ 的快捷键实时更改。
需要注意的是, _scrcpy_ 控制三个不同的朝向: 需要注意的是, _scrcpy_ 有三个不同的方向:
- <kbd>MOD</kbd>+<kbd>r</kbd> 请求设备在竖屏和横屏之间切换(如果前台应用程序不支持所请求的朝向,可能会拒绝该请求)。 - <kbd>MOD</kbd>+<kbd>r</kbd> 请求设备在竖屏和横屏之间切换 (如果前台应用程序不支持请求的朝向,可能会拒绝该请求)。
- [`--lock-video-orientation`](#锁定屏幕方向) 改变镜像的朝向 (设备传输到电脑的画面的朝向)。这会影响录制。
- `--lock-video-orientation` 改变镜像的朝向(设备镜像到电脑的画面朝向)。这会影响录制。 - `--rotation` (或 <kbd>MOD</kbd>+<kbd></kbd>/<kbd>MOD</kbd>+<kbd></kbd>) 只旋转窗口的内容。这只影响显示,不影响录制。
- `--rotation` (或<kbd>MOD</kbd>+<kbd></kbd>/<kbd>MOD</kbd>+<kbd></kbd>
只旋转窗口的画面。这只影响显示,不影响录制。
### 其他镜像设置 ### 其他镜像设置
#### 只读 #### 只读
关闭电脑对设备的控制(如键盘输入、鼠标移动和文件传输) 禁用电脑对设备的控制 (如键盘输入、鼠标事件和文件拖放)
```bash ```bash
scrcpy --no-control scrcpy --no-control
@ -402,53 +413,49 @@ scrcpy -n
#### 显示屏 #### 显示屏
如果有多个显示屏可用,您可以选择特定显示屏进行镜像 如果设备有多个显示屏,可以选择要镜像的显示屏
```bash ```bash
scrcpy --display 1 scrcpy --display 1
``` ```
您可以通过如下命令找到显示屏的id 可以通过如下命令列出所有显示屏的 id
``` ```
adb shell dumpsys display # 在回显中搜索“mDisplayId=” adb shell dumpsys display # 在输出中搜索 “mDisplayId=”
``` ```
第二显示屏可能只能在设备运行Android 10或以上的情况下被控制它可能会在电脑上显示但无法通过电脑操作 控制第二显示屏需要设备运行 Android 10 或更高版本 (否则将在只读状态下镜像)
#### 保持常亮 #### 保持常亮
防止设备在已连接的状态下休眠: 阻止设备在连接时休眠:
```bash ```bash
scrcpy --stay-awake scrcpy --stay-awake
scrcpy -w scrcpy -w
``` ```
程序关闭后,设备设置会恢复原样 程序关闭时会恢复设备原来的设置
#### 关闭设备屏幕 #### 关闭设备屏幕
在启动屏幕镜像时,可以通过如下命令关闭设备的屏幕 可以通过以下的命令行参数在关闭设备屏幕的状态下进行镜像
```bash ```bash
scrcpy --turn-screen-off scrcpy --turn-screen-off
scrcpy -S scrcpy -S
``` ```
或者在需要的时候按<kbd>MOD</kbd>+<kbd>o</kbd> 或者在任何时候按 <kbd>MOD</kbd>+<kbd>o</kbd>
要重新打开屏幕的话,需要按<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>. 要重新打开屏幕,按下 <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd>.
在Android上,`电源`按钮始终能把屏幕打开 在Android上`电源` 按钮始终能把屏幕打开。为了方便,对于在 _scrcpy_ 中发出的 `电源` 事件 (通过鼠标右键或 <kbd>MOD</kbd>+<kbd>p</kbd>),会 (尽最大的努力) 在短暂的延迟后将屏幕关闭。设备上的 `电源` 按钮仍然能打开设备屏幕
为了方便,如果按下`电源`按钮的事件是通过 _scrcpy_ 发出的(通过点按鼠标右键或<kbd>MOD</kbd>+<kbd>p</kbd>),它会在短暂的延迟后将屏幕关闭。 还可以同时阻止设备休眠:
物理的`电源`按钮仍然能打开设备屏幕。
同时,这项功能还能被用于防止设备休眠:
```bash ```bash
scrcpy --turn-screen-off --stay-awake scrcpy --turn-screen-off --stay-awake
@ -456,11 +463,11 @@ scrcpy -Sw
``` ```
#### 渲染超时 #### 渲染过期
为了降低延迟, _scrcpy_ 默认渲染解码成功的最近一帧,并跳过前面任意帧。 默认状态下,为了降低延迟, _scrcpy_ 永远渲染解码成功的最近一帧,并跳过前面任意帧。
强制渲染所有帧(可能导致延迟变高) 强制渲染所有帧 (可能导致延迟变高)
```bash ```bash
scrcpy --render-expired-frames scrcpy --render-expired-frames
@ -468,9 +475,9 @@ scrcpy --render-expired-frames
#### 显示触摸 #### 显示触摸
展示时,有些时候可能会用到显示触摸点这项功能(在设备上显示) 演示时,可能会需要显示物理触摸点 (在物理设备上的触摸点)
Android_开发者设置_ 中提供了这项功能。 Android_开发者选项_ 中提供了这项功能。
_Scrcpy_ 提供一个选项可以在启动时开启这项功能并在退出时恢复初始设置: _Scrcpy_ 提供一个选项可以在启动时开启这项功能并在退出时恢复初始设置:
@ -479,12 +486,12 @@ scrcpy --show-touches
scrcpy -t scrcpy -t
``` ```
请注意这项功能只能显示 _物理_ 触摸(要用手在屏幕上触摸) 请注意这项功能只能显示 _物理_ 触摸 (用手指在屏幕上的触摸)
#### 关闭屏保 #### 关闭屏保
_Scrcpy_ 不会默认关闭屏幕保护。 _Scrcpy_ 默认不会阻止电脑上开启的屏幕保护。
关闭屏幕保护: 关闭屏幕保护:
@ -497,64 +504,58 @@ scrcpy --disable-screensaver
#### 旋转设备屏幕 #### 旋转设备屏幕
使用<kbd>MOD</kbd>+<kbd>r</kbd>在竖屏和横屏模式之间切换。 使用 <kbd>MOD</kbd>+<kbd>r</kbd> 在竖屏和横屏模式之间切换。
需要注意的是,只有在前台应用程序支持所要求的模式时,才会进行切换。 需要注意的是,只有在前台应用程序支持所要求的模式时,才会进行切换。
#### 复制 #### 复制
每次Android的剪贴板变化的时候都会被自动同步到电脑的剪贴板上。 每次安卓的剪贴板变化时,其内容都会被自动同步到电脑的剪贴板上。
所有的 <kbd>Ctrl</kbd> 快捷键都会被转发至设备。其中: 所有的 <kbd>Ctrl</kbd> 快捷键都会被转发至设备。其中:
- <kbd>Ctrl</kbd>+<kbd>c</kbd> 复制 - <kbd>Ctrl</kbd>+<kbd>c</kbd> 通常执行复制
- <kbd>Ctrl</kbd>+<kbd>x</kbd> 剪切 - <kbd>Ctrl</kbd>+<kbd>x</kbd> 通常执行剪切
- <kbd>Ctrl</kbd>+<kbd>v</kbd> 黏贴 (在电脑到设备的剪贴板同步完成之后) - <kbd>Ctrl</kbd>+<kbd>v</kbd> 通常执行粘贴 (在电脑到设备的剪贴板同步完成之后)
这通常如您所期望的那样运作 大多数时候这些按键都会执行以上的功能
但实际的行为取决于设备上的前台程序。 但实际的行为取决于设备上的前台程序。例如_Termux_ 会在按下 <kbd>Ctrl</kbd>+<kbd>c</kbd> 时发送 SIGINT又如 _K-9 Mail_ 会新建一封邮件。
例如 _Termux_<kbd>Ctrl</kbd>+<kbd>c</kbd>被按下时发送 SIGINT
又如 _K-9 Mail_ 会新建一封新邮件。
在这种情况下剪切复制黏贴仅在Android >= 7时可用 要在这种情况下进行剪切,复制和粘贴 (仅支持 Android >= 7)
- <kbd>MOD</kbd>+<kbd>c</kbd> 注入 `COPY`(复制) - <kbd>MOD</kbd>+<kbd>c</kbd> 注入 `COPY` (复制)
- <kbd>MOD</kbd>+<kbd>x</kbd> 注入 `CUT`(剪切) - <kbd>MOD</kbd>+<kbd>x</kbd> 注入 `CUT` (剪切)
- <kbd>MOD</kbd>+<kbd>v</kbd> 注入 `PASTE`(黏贴)(在电脑到设备的剪贴板同步完成之后) - <kbd>MOD</kbd>+<kbd>v</kbd> 注入 `PASTE` (粘贴) (在电脑到设备的剪贴板同步完成之后)
另外,<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>可以将电脑的剪贴板内容转换为一串按键事件输入到设备。 另外,<kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> 会将电脑的剪贴板内容转换为一串按键事件输入到设备。在应用程序不接受粘贴时 (比如 _Termux_),这项功能可以派上一定的用场。不过这项功能可能会导致非 ASCII 编码的内容出现错误。
在应用程序不接受黏贴时(比如 _Termux_ ),这项功能可以排上一定的用场。
需要注意的是这项功能可能会导致非ASCII编码的内容出现错误。
**警告:** 将电脑剪贴板的内容黏贴至设备(无论是通过<kbd>Ctrl</kbd>+<kbd>v</kbd>还是<kbd>MOD</kbd>+<kbd>v</kbd> **警告:** 将电脑剪贴板的内容粘贴至设备 (无论是通过 <kbd>Ctrl</kbd>+<kbd>v</kbd> 还是 <kbd>MOD</kbd>+<kbd>v</kbd>) 都会将内容复制到设备的剪贴板。如此,任何安卓应用程序都能读取到。您应避免将敏感内容 (如密码) 通过这种方式粘贴。
都需要将内容保存至设备的剪贴板。如此,任何一个应用程序都可以读取它。
您应当避免将敏感内容通过这种方式传输(如密码)。
一些设备不支持通过程序设置剪贴板。通过 `--legacy-paste` 选项可以修改 <kbd>Ctrl</kbd>+<kbd>v</kbd><kbd>MOD</kbd>+<kbd>v</kbd> 的工作方式,使它们通过按键事件 (同 <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd>) 来注入电脑剪贴板内容。
#### 捏拉缩放 #### 双指缩放
模拟 “捏拉缩放”:<kbd>Ctrl</kbd>+_按住并移动鼠标_。 模拟“双指缩放”:<kbd>Ctrl</kbd>+_按住并移动鼠标_。
更准确的说,您需要在按住<kbd>Ctrl</kbd>的同时按住并移动鼠标。 更准确的说,在按住鼠标左键时按住 <kbd>Ctrl</kbd>。直到松开鼠标左键,所有鼠标移动将以屏幕中心为原点,缩放或旋转内容 (如果应用支持)。
在鼠标左键松开之后,光标的任何操作都会相对于屏幕的中央进行。
具体来说, _scrcpy_ 使用“虚拟手指”以在相对于屏幕中央相反的位置产生触摸事件。 实际上_scrcpy_ 会在以屏幕中心对称的位置上生成由“虚拟手指”发出的额外触摸事件。
#### 文字注入偏好 #### 文字注入偏好
打字的时候,系统会产生两种[事件][textevents] 打字的时候,系统会产生两种[事件][textevents]
- _按键事件_ ,代表一个按键被按下/松开。 - _按键事件_ ,代表一个按键被按下松开。
- _文本事件_ ,代表一个文本被输入。 - _文本事件_ ,代表一个字符被输入。
程序默认使用按键事件来输入字母。只有这样,键盘才会在游戏中正常运作尤其WASD键 程序默认使用按键事件来输入字母。只有这样,键盘才会在游戏中正常运作 (例如 WASD 键)
但这也有可能[造成问题][prefertext]。如果您遇到了这样的问题,您可以通过下列操作避免它 但这也有可能[造成一些问题][prefertext]。如果您遇到了问题,可以通过以下方式避免
```bash ```bash
scrcpy --prefer-text scrcpy --prefer-text
``` ```
(这会导致键盘在游戏中工作不正常) (这会导致键盘在游戏中工作不正常)
[textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input [textevents]: https://blog.rom1v.com/2018/03/introducing-scrcpy/#handle-text-input
[prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343 [prefertext]: https://github.com/Genymobile/scrcpy/issues/650#issuecomment-512945343
@ -562,8 +563,7 @@ scrcpy --prefer-text
#### 按键重复 #### 按键重复
当你一直按着一个按键不放时,程序默认产生多个按键事件。 默认状态下,按住一个按键不放会生成多个重复按键事件。在某些游戏中这可能会导致性能问题。
在某些游戏中这可能会导致性能问题。
避免转发重复按键事件: 避免转发重复按键事件:
@ -572,18 +572,27 @@ scrcpy --no-key-repeat
``` ```
### 文件传输 #### 右键和中键
默认状态下,右键会触发返回键 (或电源键),中键会触发 HOME 键。要禁用这些快捷键并把所有点击转发到设备:
```bash
scrcpy --forward-all-clicks
```
### 文件拖放
#### 安装APK #### 安装APK
如果您要要安装APK请拖放APK文件文件名以`.apk`结尾)到 _scrcpy_ 窗口。 将 APK 文件 (文件名以 `.apk` 结尾) 拖放到 _scrcpy_ 窗口来安装
该操作在屏幕上不会出现任何变化,而会在控制台输出一条日志。 该操作在屏幕上不会出现任何变化,而会在控制台输出一条日志。
#### 将文件推送至设备 #### 将文件推送至设备
如果您要推送文件到设备的 `/sdcard/`请拖放文件至不能是APK文件_scrcpy_ 窗口。 要推送文件到设备的 `/sdcard/`,将 (非 APK) 文件拖放至 _scrcpy_ 窗口。
该操作没有可见的响应,只会在控制台输出日志。 该操作没有可见的响应,只会在控制台输出日志。
@ -596,7 +605,7 @@ scrcpy --push-target /sdcard/foo/bar/
### 音频转发 ### 音频转发
_scrcpy_ 不支持音频。请使用 [sndcpy]. _Scrcpy_ 不支持音频。请使用 [sndcpy].
另外请阅读 [issue #14]。 另外请阅读 [issue #14]。
@ -604,69 +613,66 @@ _scrcpy_ 不支持音频。请使用 [sndcpy].
[issue #14]: https://github.com/Genymobile/scrcpy/issues/14 [issue #14]: https://github.com/Genymobile/scrcpy/issues/14
## ## 快捷
在下列表中, <kbd>MOD</kbd>键的修饰键。 下列表中, <kbd>MOD</kbd>快捷键的修饰键。
默认是(左)<kbd>Alt</kbd>或者(左)<kbd>Super</kbd> 默认是 (左) <kbd>Alt</kbd> 或 (左) <kbd>Super</kbd>
您可以使用 `--shortcut-mod`后缀来修改它。可选的按键有`lctrl`、`rctrl`、 您可以使用 `--shortcut-mod` 来修改。可选的按键有 `lctrl`、`rctrl`、`lalt`、`ralt`、`lsuper` 和 `rsuper`。例如:
`lalt`、`ralt`、`lsuper`和`rsuper`。如下例:
```bash ```bash
# 使用右侧的Ctrl # 使用右 Ctrl
scrcpy --shortcut-mod=rctrl scrcpy --shortcut-mod=rctrl
# 使用左侧的Ctrl键、Alt键或Super # 使用左 Ctrl 键 + 左 Alt 键,或 Super
scrcpy --shortcut-mod=lctrl+lalt,lsuper scrcpy --shortcut-mod=lctrl+lalt,lsuper
``` ```
_一般来说,<kbd>[Super]</kbd>就是<kbd>Windows</kbd>或者<kbd>Cmd</kbd>。_ _<kbd>[Super]</kbd> 键通常是指 <kbd>Windows</kbd><kbd>Cmd</kbd>。_
[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) [Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button)
| 操作 | 快捷键 | 操作 | 快捷键 |
| ------------------------------------------- |:----------------------------- | --------------------------------- | :------------------------------------------- |
| 全屏 | <kbd>MOD</kbd>+<kbd>f</kbd> | 全屏 | <kbd>MOD</kbd>+<kbd>f</kbd> |
| 向左旋转屏幕 | <kbd>MOD</kbd>+<kbd></kbd> _(左)_ | 向左旋转屏幕 | <kbd>MOD</kbd>+<kbd>←</kbd> _(左箭头)_ |
| 向右旋转屏幕 | <kbd>MOD</kbd>+<kbd></kbd> _(右)_ | 向右旋转屏幕 | <kbd>MOD</kbd>+<kbd>→</kbd> _(右箭头)_ |
| 将窗口大小重置为1:1 (像素优先) | <kbd>MOD</kbd>+<kbd>g</kbd> | 将窗口大小重置为1:1 (匹配像素) | <kbd>MOD</kbd>+<kbd>g</kbd> |
| 将窗口大小重置为消除黑边 | <kbd>MOD</kbd>+<kbd>w</kbd> \| _双击¹_ | 将窗口大小重置为消除黑边 | <kbd>MOD</kbd>+<kbd>w</kbd> \| _双击¹_ |
| 点按 `主屏幕` | <kbd>MOD</kbd>+<kbd>h</kbd> \| _点击鼠标中键_ | 点按 `主屏幕` | <kbd>MOD</kbd>+<kbd>h</kbd> \| _鼠标中键_ |
| 点按 `返回` | <kbd>MOD</kbd>+<kbd>b</kbd> \| _点击鼠标右键²_ | 点按 `返回` | <kbd>MOD</kbd>+<kbd>b</kbd> \| _鼠标右键²_ |
| 点按 `切换应用` | <kbd>MOD</kbd>+<kbd>s</kbd> | 点按 `切换应用` | <kbd>MOD</kbd>+<kbd>s</kbd> |
| 点按 `菜单` (解锁屏幕) | <kbd>MOD</kbd>+<kbd>m</kbd> | 点按 `菜单` (解锁屏幕) | <kbd>MOD</kbd>+<kbd>m</kbd> |
| 点按 `音量+` | <kbd>MOD</kbd>+<kbd></kbd> _(up)_ | 点按 `音量+` | <kbd>MOD</kbd>+<kbd></kbd> _(上箭头)_ |
| 点按 `音量-` | <kbd>MOD</kbd>+<kbd></kbd> _(down)_ | 点按 `音量-` | <kbd>MOD</kbd>+<kbd></kbd> _(下箭头)_ |
| 点按 `电源` | <kbd>MOD</kbd>+<kbd>p</kbd> | 点按 `电源` | <kbd>MOD</kbd>+<kbd>p</kbd> |
| 打开屏幕 | _点击鼠标右键²_ | 打开屏幕 | _鼠标右键²_ |
| 关闭设备屏幕(但继续在电脑上显示) | <kbd>MOD</kbd>+<kbd>o</kbd> | 关闭设备屏幕 (但继续在电脑上显示) | <kbd>MOD</kbd>+<kbd>o</kbd> |
| 打开设备屏幕 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd> | 打开设备屏幕 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>o</kbd> |
| 旋转设备屏幕 | <kbd>MOD</kbd>+<kbd>r</kbd> | 旋转设备屏幕 | <kbd>MOD</kbd>+<kbd>r</kbd> |
| 展开通知面板 | <kbd>MOD</kbd>+<kbd>n</kbd> | 展开通知面板 | <kbd>MOD</kbd>+<kbd>n</kbd> |
| 展开快捷操作 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd> | 收起通知面板 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>n</kbd> |
| 复制到剪贴板³ | <kbd>MOD</kbd>+<kbd>c</kbd> | 复制到剪贴板³ | <kbd>MOD</kbd>+<kbd>c</kbd> |
| 剪切到剪贴板³ | <kbd>MOD</kbd>+<kbd>x</kbd> | 剪切到剪贴板³ | <kbd>MOD</kbd>+<kbd>x</kbd> |
| 同步剪贴板并黏贴³ | <kbd>MOD</kbd>+<kbd>v</kbd> | 同步剪贴板并粘贴³ | <kbd>MOD</kbd>+<kbd>v</kbd> |
| 导入电脑剪贴板文本 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> | 注入电脑剪贴板文本 | <kbd>MOD</kbd>+<kbd>Shift</kbd>+<kbd>v</kbd> |
| 打开/关闭FPS显示(在 stdout) | <kbd>MOD</kbd>+<kbd>i</kbd> | 打开/关闭FPS显示 (在 stdout) | <kbd>MOD</kbd>+<kbd>i</kbd> |
| 捏拉缩放 | <kbd>Ctrl</kbd>+_按并移动鼠标_ | 捏拉缩放 | <kbd>Ctrl</kbd>+_按并移动鼠标_ |
_¹双击黑色边界以关闭黑色边界_ _¹双击黑边可以去除黑边_
_²点击鼠标右键将在屏幕熄灭时点亮屏幕其余情况则视为按下返回键 。_ _²点击鼠标右键将在屏幕熄灭时点亮屏幕其余情况则视为按下返回键 。_
_³需要安卓版本 Android >= 7。_ _³需要安卓版本 Android >= 7。_
所有的 <kbd>Ctrl</kbd>+_按键_ 的热键都是被转发到设备进行处理的,所以实际上会由当前应用程序对其做出响应 所有的 <kbd>Ctrl</kbd>+_按键_ 的快捷键都会被转发到设备,所以会由当前应用程序进行处理
## 自定义路径 ## 自定义路径
为了使用您想使用的 _adb_ ,您可以在环境变量 要使用指定的 _adb_ 二进制文件,可以设置环境变量 `ADB`
`ADB`中设置它的路径:
ADB=/path/to/adb scrcpy ADB=/path/to/adb scrcpy
如果需要覆盖`scrcpy-server`的路径,您可以在 要覆盖 `scrcpy-server` 的路径,可以设置 `SCRCPY_SERVER_PATH`
`SCRCPY_SERVER_PATH`中设置它。
[useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345 [useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345
@ -675,22 +681,22 @@ _³需要安卓版本 Android >= 7。_
一个同事让我找出一个和 [gnirehtet] 一样难以发音的名字。 一个同事让我找出一个和 [gnirehtet] 一样难以发音的名字。
[`strcpy`] 可以复制**str**ing `scrcpy` 可以复制**scr**een。 [`strcpy`] 复制一个 **str**ing `scrcpy` 复制一个 **scr**een。
[gnirehtet]: https://github.com/Genymobile/gnirehtet [gnirehtet]: https://github.com/Genymobile/gnirehtet
[`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html [`strcpy`]: http://man7.org/linux/man-pages/man3/strcpy.3.html
## 如何编译 ## 如何构建
请查看[编译]。 请查看[BUILD]。
[编译]: BUILD.md [BUILD]: BUILD.md
## 常见问题 ## 常见问题
请查看[FAQ](FAQ.md). 请查看[FAQ](FAQ.md)
## 开发者 ## 开发者

View file

@ -80,10 +80,7 @@ apt install scrcpy
為了保持簡單Windows 用戶可以下載一個包含所有必需軟體 (包含 `adb`) 的壓縮包: 為了保持簡單Windows 用戶可以下載一個包含所有必需軟體 (包含 `adb`) 的壓縮包:
- [`scrcpy-win64-v1.15.zip`][direct-win64] - [README](README.md#windows)
_(SHA-256: dd514bb591e63ef4cd52a53c30f1153a28f59722d64690eb07bd017849edcba2)_
[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.15/scrcpy-win64-v1.15.zip
[Chocolatey] 上也可以下載: [Chocolatey] 上也可以下載:

View file

@ -217,25 +217,25 @@ Set a custom window title.
.BI "\-\-window\-x " value .BI "\-\-window\-x " value
Set the initial window horizontal position. Set the initial window horizontal position.
Default is "auto".\n Default is "auto".
.TP .TP
.BI "\-\-window\-y " value .BI "\-\-window\-y " value
Set the initial window vertical position. Set the initial window vertical position.
Default is "auto".\n Default is "auto".
.TP .TP
.BI "\-\-window\-width " value .BI "\-\-window\-width " value
Set the initial window width. Set the initial window width.
Default is 0 (automatic).\n Default is 0 (automatic).
.TP .TP
.BI "\-\-window\-height " value .BI "\-\-window\-height " value
Set the initial window height. Set the initial window height.
Default is 0 (automatic).\n Default is 0 (automatic).
.SH SHORTCUTS .SH SHORTCUTS

View file

@ -21,7 +21,7 @@
#define _ANDROID_INPUT_H #define _ANDROID_INPUT_H
/** /**
* Meta key / modifer state. * Meta key / modifier state.
*/ */
enum android_metastate { enum android_metastate {
/** No meta keys are pressed. */ /** No meta keys are pressed. */

View file

@ -217,7 +217,7 @@ scrcpy_print_usage(const char *arg0) {
" Default is 0 (automatic).\n" " Default is 0 (automatic).\n"
"\n" "\n"
" --window-height value\n" " --window-height value\n"
" Set the initial window width.\n" " Set the initial window height.\n"
" Default is 0 (automatic).\n" " Default is 0 (automatic).\n"
"\n" "\n"
"Shortcuts:\n" "Shortcuts:\n"

View file

@ -14,7 +14,7 @@ convert_keycode_action(SDL_EventType from, enum android_keyevent_action *to) {
static enum android_metastate static enum android_metastate
autocomplete_metastate(enum android_metastate metastate) { autocomplete_metastate(enum android_metastate metastate) {
// fill dependant flags // fill dependent flags
if (metastate & (AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON)) { if (metastate & (AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON)) {
metastate |= AMETA_SHIFT_ON; metastate |= AMETA_SHIFT_ON;
} }

View file

@ -16,7 +16,7 @@ size_t
xstrncpy(char *dest, const char *src, size_t n); xstrncpy(char *dest, const char *src, size_t n);
// join tokens by sep into dst // join tokens by sep into dst
// returns the number of chars actually written (max n-1) if no trucation // returns the number of chars actually written (max n-1) if no truncation
// occurred, or n if truncated // occurred, or n if truncated
size_t size_t
xstrjoin(char *dst, const char *const tokens[], char sep, size_t n); xstrjoin(char *dst, const char *const tokens[], char sep, size_t n);

21
install_release.sh Executable file
View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -e
BUILDDIR=build-auto
PREBUILT_SERVER_URL=https://github.com/Genymobile/scrcpy/releases/download/v1.17/scrcpy-server-v1.17
PREBUILT_SERVER_SHA256=11b5ad2d1bc9b9730fb7254a78efd71a8ff46b1938ff468e47a21b653a1b6725
echo "[scrcpy] Downloading prebuilt server..."
wget "$PREBUILT_SERVER_URL" -O scrcpy-server
echo "[scrcpy] Verifying prebuilt server..."
echo "$PREBUILT_SERVER_SHA256 scrcpy-server" | sha256sum --check
echo "[scrcpy] Building client..."
rm -rf "$BUILDDIR"
meson "$BUILDDIR" --buildtype release --strip -Db_lto=true \
-Dprebuilt_server=scrcpy-server
cd "$BUILDDIR"
ninja
echo "[scrcpy] Installing (sudo)..."
sudo ninja install