diff --git a/BUILD.md b/BUILD.md index 5dcf7b27..4dc6d64c 100644 --- a/BUILD.md +++ b/BUILD.md @@ -2,11 +2,43 @@ 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 @@ -60,11 +92,10 @@ sudo apt install ffmpeg libsdl2-2.0-0 adb # client build dependencies sudo apt install gcc git pkg-config meson ninja-build \ - libavcodec-dev libavformat-dev libavutil-dev \ - libsdl2-dev + libavcodec-dev libavformat-dev libavutil-dev libsdl2-dev # 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 @@ -106,13 +137,13 @@ sudo apt install mingw-w64 mingw-w64-tools You also need the JDK to build the server: ```bash -sudo apt install openjdk-8-jdk +sudo apt install openjdk-11-jdk ``` Then generate the releases: ```bash -make -f Makefile.CrossWindows +./release.sh ``` 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 -make it avaliable from the `PATH`: +make it available from the `PATH`: ```bash brew tap homebrew/cask-versions -brew cask install adoptopenjdk/openjdk/adoptopenjdk8 -export JAVA_HOME="$(/usr/libexec/java_home --version 1.8)" +brew install adoptopenjdk/openjdk/adoptopenjdk11 +export JAVA_HOME="$(/usr/libexec/java_home --version 1.11)" export PATH="$JAVA_HOME/bin:$PATH" ``` @@ -189,8 +220,27 @@ See [pierlon/scrcpy-docker](https://github.com/pierlon/scrcpy-docker). ## Common steps -If you want to build the server, install the [Android SDK] (_Android Studio_), -and set `ANDROID_SDK_ROOT` to its directory. For example: +**As a non-root user**, clone the project: + +```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 @@ -203,20 +253,11 @@ export ANDROID_SDK_ROOT=~/Library/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: ```bash 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 @@ -225,9 +266,27 @@ install` must be run as root)._ [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 ./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 ``` -This installs two files: +This installs three files: - `/usr/local/bin/scrcpy` - `/usr/local/share/scrcpy/scrcpy-server` - -Just remove them to "uninstall" the application. + - `/usr/local/share/man/man1/scrcpy.1` You can then [run](README.md#run) _scrcpy_. - -## 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: +### Uninstall ```bash -meson x --buildtype release --strip -Db_lto=true \ - -Dprebuilt_server=/path/to/scrcpy-server -ninja -Cx -sudo ninja -Cx install +sudo ninja -Cx uninstall # without sudo on Windows ``` - -The server only works with a matching client version (this server works with the -`master` branch). diff --git a/DEVELOP.md b/DEVELOP.md index 4d8acc59..d11f139e 100644 --- a/DEVELOP.md +++ b/DEVELOP.md @@ -211,7 +211,7 @@ There are two [frames][video_buffer] simultaneously in memory: - the **rendering** frame, rendered in a texture from the main thread. 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. If a [recorder] is present (i.e. `--record` is enabled), then it muxes the raw diff --git a/FAQ.md b/FAQ.md index 9801f91c..a84aade8 100644 --- a/FAQ.md +++ b/FAQ.md @@ -39,8 +39,11 @@ Check [stackoverflow][device-unauthorized]. > 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). +[enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling [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 -### 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 Injecting text input is [limited to ASCII characters][text-input]. A trick diff --git a/README.id.md b/README.id.md index a2cfa3d5..b4b16735 100644 --- a/README.id.md +++ b/README.id.md @@ -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 : - - [`scrcpy-win64-v1.16.zip`][direct-win64] - _(SHA-256: 3f30dc5db1a2f95c2b40a0f5de91ec1642d9f53799250a8c529bc882bc0918f0)_ - -[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-win64-v1.16.zip + - [README](README.md#windows) Ini juga tersedia di [Chocolatey]: diff --git a/README.jp.md b/README.jp.md new file mode 100644 index 00000000..e42c528e --- /dev/null +++ b/README.jp.md @@ -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 + + +## アプリの取得 + +Packaging status + +### 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 # 短縮版 +``` + +フルスクリーンは、次のコマンドで動的に切り替えることができます MOD+f + + +#### 回転 + +ウィンドウは回転することができます: + +```bash +scrcpy --rotation 1 +``` + +設定可能な値: + - `0`: 回転なし + - `1`: 90° 反時計回り + - `2`: 180° + - `3`: 90° 時計回り + +回転は次のコマンドで動的に変更することができます。 MOD+_(左)_ 、 MOD+_(右)_ + +_scrcpy_ は3つの回転を管理することに注意: + - MOD+rはデバイスに縦向きと横向きの切り替えを要求する(現在実行中のアプリで要求している向きをサポートしていない場合、拒否することがある) + - [`--lock-video-orientation`](#ビデオの向きをロックする)は、ミラーリングする向きを変更する(デバイスからPCへ送信される向き)。録画に影響します。 + - `--rotation` (もしくはMOD+/MOD+)は、ウィンドウのコンテンツのみを回転します。これは表示にのみに影響し、録画には影響しません。 + +### 他のミラーリングオプション + +#### 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 +``` + +もしくは、MOD+oを押すことでいつでもできます。 + +元に戻すには、MOD+Shift+oを押します。 + +Androidでは、`POWER`ボタンはいつでも画面を表示します。便宜上、`POWER`がscrcpyを介して(右クリックもしくはMOD+pを介して)送信される場合、(ベストエフォートベースで)少し遅れて、強制的に画面を非表示にします。ただし、物理的な`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 +``` + + +### 入力制御 + +#### デバイス画面の回転 + +MOD+rを押すことで、縦向きと横向きを切り替えます。 + +フォアグラウンドのアプリケーションが要求された向きをサポートしている場合のみ回転することに注意してください。 + +#### コピー-ペースト + +Androidのクリップボードが変更される度に、コンピュータのクリップボードに自動的に同期されます。 + +Ctrlのショートカットは全てデバイスに転送されます。特に: + - Ctrl+c 通常はコピーします + - Ctrl+x 通常はカットします + - Ctrl+v 通常はペーストします(コンピュータとデバイスのクリップボードが同期された後) + +通常は期待通りに動作します。 + +しかしながら、実際の動作はアクティブなアプリケーションに依存します。例えば、_Termux_ は代わりにCtrl+cでSIGINTを送信します、そして、_K-9 Mail_ は新しいメッセージを作成します。 + +このようなケースでコピー、カットそしてペーストをするには(Android 7以上でのサポートのみですが): + - MOD+c `COPY`を挿入 + - MOD+x `CUT`を挿入 + - MOD+v `PASTE`を挿入(コンピュータとデバイスのクリップボードが同期された後) + +加えて、MOD+Shift+vはコンピュータのクリップボードテキストにキーイベントのシーケンスとして挿入することを許可します。これはコンポーネントがテキストのペーストを許可しない場合(例えば _Termux_)に有用ですが、非ASCIIコンテンツを壊す可能性があります。 + +**警告:** デバイスにコンピュータのクリップボードを(Ctrl+vまたはMOD+vを介して)ペーストすることは、デバイスのクリップボードにコンテンツをコピーします。結果としてどのAndoridアプリケーションもそのコンテンツを読み取ることができます。機密性の高いコンテンツ(例えばパスワードなど)をこの方法でペーストすることは避けてください。 + +プログラムでデバイスのクリップボードを設定した場合、一部のデバイスは期待どおりに動作しません。`--legacy-paste`オプションは、コンピュータのクリップボードテキストをキーイベントのシーケンスとして挿入するため(MOD+Shift+vと同じ方法)、Ctrl+vMOD+vの動作の変更を提供します。 + +#### ピンチしてズームする + +"ピンチしてズームする"をシミュレートするには: Ctrl+_クリック&移動_ + +より正確にするには、左クリックボタンを押している間、Ctrlを押したままにします。左クリックボタンを離すまで、全てのマウスの動きは、(アプリでサポートされている場合)画面の中心を基準として、コンテンツを拡大縮小および回転します。 + +具体的には、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 + + +## ショートカット + +次のリストでは、MODでショートカット変更します。初期状態では、(left)Altまたは(left)Superです。 + +これは`--shortcut-mod`で変更することができます。可能なキーは`lctrl`、`rctrl`、`lalt`、 `ralt`、 `lsuper`そして`rsuper`です。例えば: + +```bash +# RCtrlをショートカットとして使用します +scrcpy --shortcut-mod=rctrl + +# ショートカットにLCtrl+LAltまたはLSuperのいずれかを使用します +scrcpy --shortcut-mod=lctrl+lalt,lsuper +``` + +_[Super]は通常WindowsもしくはCmdキーです。_ + +[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) + + | アクション | ショートカット + | ------------------------------------------- |:----------------------------- + | フルスクリーンモードへの切り替え | MOD+f + | ディスプレイを左に回転 | MOD+ _(左)_ + | ディスプレイを右に回転 | MOD+ _(右)_ + | ウィンドウサイズを変更して1:1に変更(ピクセルパーフェクト) | MOD+g + | ウィンドウサイズを変更して黒い境界線を削除 | MOD+w \| _ダブルクリック¹_ + | `HOME`をクリック | MOD+h \| _真ん中クリック_ + | `BACK`をクリック | MOD+b \| _右クリック²_ + | `APP_SWITCH`をクリック | MOD+s + | `MENU` (画面のアンロック)をクリック | MOD+m + | `VOLUME_UP`をクリック | MOD+ _(上)_ + | `VOLUME_DOWN`をクリック | MOD+ _(下)_ + | `POWER`をクリック | MOD+p + | 電源オン | _右クリック²_ + | デバイス画面をオフにする(ミラーリングしたまま) | MOD+o + | デバイス画面をオンにする | MOD+Shift+o + | デバイス画面を回転する | MOD+r + | 通知パネルを展開する | MOD+n + | 通知パネルを折りたたむ | MOD+Shift+n + | クリップボードへのコピー³ | MOD+c + | クリップボードへのカット³ | MOD+x + | クリップボードの同期とペースト³ | MOD+v + | コンピュータのクリップボードテキストの挿入 | MOD+Shift+v + | FPSカウンタ有効/無効(標準入出力上) | MOD+i + | ピンチしてズームする | Ctrl+_クリック&移動_ + +_¹黒い境界線を削除するため、境界線上でダブルクリック_ +_²もしスクリーンがオフの場合、右クリックでスクリーンをオンする。それ以外の場合はBackを押します._ +_³Android 7以上のみ._ + +全てのCtrl+_キー_ ショートカットはデバイスに転送されます、そのためアクティブなアプリケーションによって処理されます。 + + +## カスタムパス + +特定の _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/ diff --git a/README.ko.md b/README.ko.md index 58b44dfe..2da50562 100644 --- a/README.ko.md +++ b/README.ko.md @@ -68,9 +68,7 @@ Gentoo에서 ,[Ebuild] 가 가능합니다 : [`scrcpy/`][ebuild-link]. 윈도우 상에서, 간단하게 설치하기 위해 종속성이 있는 사전 구축된 아카이브가 제공됩니다 (`adb` 포함) : 해당 파일은 Readme원본 링크를 통해서 다운로드가 가능합니다. - - [`scrcpy-win`][direct-win] - -[direct-win]: https://github.com/Genymobile/scrcpy/blob/master/README.md#windows + - [README](README.md#windows) [어플을 직접 설치][BUILD] 할 수도 있습니다. diff --git a/README.md b/README.md index 71eec7e2..c3bab060 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,18 @@ control it using keyboard and mouse. Packaging status +### 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 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-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 -hard). - +You could also [build the app manually][BUILD] ([simplified +process][BUILD_simple]). ### Windows @@ -116,13 +127,18 @@ brew install scrcpy You need `adb`, accessible from your `PATH`. If you don't have it yet: ```bash -# Homebrew >= 2.6.0 -brew install --cask android-platform-tools - -# Homebrew < 2.6.0 -brew cask install android-platform-tools +brew 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]. @@ -466,7 +482,7 @@ _(left)_ and MOD+ _(right)_. Note that _scrcpy_ manages 3 different rotations: - MOD+r 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). - [`--lock-video-orientation`](#lock-video-orientation) changes the mirroring 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: ```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]. -[BUILD]: BUILD.md - ## Common issues @@ -851,9 +865,10 @@ Read the [developers page]. This README is available in other languages: - [Indonesian (Indonesia, `id`) - v1.16](README.id.md) +- [日本語 (Japanese, `jp`) - v1.17](README.jp.md) - [한국어 (Korean, `ko`) - v1.11](README.ko.md) -- [português brasileiro (Brazilian Portuguese, `pt-BR`) - v1.12.1](README.pt-br.md) -- [简体中文 (Simplified Chinese, `zh-Hans`) - v1.16](README.zh-Hans.md) +- [português brasileiro (Brazilian Portuguese, `pt-BR`) - v1.17](README.pt-br.md) +- [简体中文 (Simplified Chinese, `zh-Hans`) - v1.17](README.zh-Hans.md) - [繁體中文 (Traditional Chinese, `zh-Hant`) - v1.15](README.zh-Hant.md) Only this README file is guaranteed to be up-to-date. diff --git a/README.pt-br.md b/README.pt-br.md index 4f2122a6..3549f0fb 100644 --- a/README.pt-br.md +++ b/README.pt-br.md @@ -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 -USB (ou [via TCP/IP][article-tcpip]). Não requer nenhum acesso root. +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_. Funciona em _GNU/Linux_, _Windows_ e _macOS_. ![screenshot](assets/screenshot-debian-600.jpg) Foco em: - - **leveza** (Nativo, mostra apenas a tela do dispositivo) + - **leveza** (nativo, mostra apenas a tela do dispositivo) - **performance** (30~60fps) - **qualidade** (1920×1080 ou acima) - **baixa latência** ([35~70ms][lowlatency]) @@ -22,36 +22,41 @@ Foco em: ## 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 USB][enable-adb] no(s) seu(s) dispositivo(s). +Tenha certeza de ter [ativado a depuração adb][enable-adb] no(s) seu(s) dispositivo(s). [enable-adb]: https://developer.android.com/studio/command-line/adb.html#Enabling - -Em alguns dispositivos, você também precisará ativar [uma opção adicional][control] para controlá-lo usando o teclado e mouse. +Em alguns dispositivos, você também precisa ativar [uma opção adicional][control] para +controlá-lo usando teclado e mouse. [control]: https://github.com/Genymobile/scrcpy/issues/70#issuecomment-373286323 -## Obtendo o app +## Obter o app +Packaging status ### Linux -No Debian (_em testes_ e _sid_ por enquanto): +No Debian (_testing_ e _sid_ por enquanto) e Ubuntu (20.04): ``` 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]: 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]. [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-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 -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: - - [`scrcpy-win64-v1.12.1.zip`][direct-win64] - _(SHA-256: 57d34b6d16cfd9fe169bc37c4df58ebd256d05c1ea3febc63d9cb0a027ab47c9)_ + - [README](README.md#windows) -[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.12.1/scrcpy-win64-v1.12.1.zip - -Também disponível em [Chocolatey]: +Também está disponível em [Chocolatey]: [Chocolatey]: https://chocolatey.org/ @@ -94,12 +97,12 @@ scoop install adb # se você ainda não o tem [Scoop]: https://scoop.sh -Você também pode [compilar a aplicação manualmente][BUILD]. +Você também pode [compilar o app manualmente][BUILD]. ### 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/ @@ -107,18 +110,22 @@ A aplicação está disponível em [Homebrew]. Apenas a instale: 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 +# Homebrew >= 2.6.0 +brew install --cask android-platform-tools + +# Homebrew < 2.6.0 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 -Plugue um dispositivo Android e execute: +Conecte um dispositivo Android e execute: ```bash scrcpy @@ -134,52 +141,87 @@ scrcpy --help ### Configuração de captura -#### Redução de tamanho +#### Reduzir tamanho 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 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. -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 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 scrcpy --max-fps 15 ``` +Isso é oficialmente suportado desde o Android 10, mas pode funcionar em versões anteriores. + #### Cortar 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 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 É possível gravar a tela enquanto ocorre o espelhamento: @@ -194,65 +236,84 @@ Para desativar o espelhamento durante a gravação: ```bash scrcpy --no-display --record file.mp4 scrcpy -Nr file.mkv -# interrompe a gravação com Ctrl+C -# Ctrl+C não encerrar propriamente no Windows, então desconecte o dispositivo +# interrompa a gravação com Ctrl+C ``` -"Frames pulados" são gravados, mesmo que não sejam mostrado em tempo real (por motivos de performance). -Frames tem seu _horário_ _carimbado_ no dispositivo, então [Variação de atraso nos pacotes] não impacta na gravação do arquivo. +"Frames pulados" são gravados, mesmo que não sejam exibidos em tempo real (por +motivos de performance). Frames têm seu _horário carimbado_ no dispositivo, então [variação de atraso nos +pacotes][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 -#### 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`. -4. Desplugue seu dispositivo. -5. Conecte-se ao seu dispositivo: `adb connect DEVICE_IP:5555` _(substitua o `DEVICE_IP`)_. +4. Desconecte seu dispositivo. +5. Conecte-se ao seu dispositivo: `adb connect DEVICE_IP:5555` _(substitua `DEVICE_IP`)_. 6. Execute `scrcpy` como de costume. Pode ser útil diminuir o bit-rate e a resolução: ```bash 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 scrcpy --serial 0123456789abcdef -scrcpy -s 0123456789abcdef # versão reduzida +scrcpy -s 0123456789abcdef # versão curta ``` Se o dispositivo está conectado via TCP/IP: ```bash 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 -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 -# mantém isso aberto +# mantenha isso aberto ``` De outro terminal: @@ -261,17 +322,33 @@ De outro terminal: 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 ``` -### Configurações de Janela +### Configuração de janela #### 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 scrcpy --window-title 'Meu dispositivo' @@ -287,15 +364,15 @@ scrcpy --window-x 100 --window-y 100 --window-width 800 --window-height 600 #### Sem bordas -Para desativar decorações da janela: +Para desativar decorações de janela: ```bash 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 scrcpy --always-on-top @@ -307,41 +384,117 @@ A aplicação pode ser iniciada diretamente em tela cheia: ```bash 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 MOD+f. + +#### 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 MOD+ +_(esquerda)_ e MOD+ _(direita)_. + +Note que _scrcpy_ controla 3 rotações diferentes: + - MOD+r requisita ao dispositivo para mudar entre retrato + e paisagem (a aplicação em execução pode se recusar, se ela não suporta a + orientação requisitada). + - [`--lock-video-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 MOD+/MOD+) + rotaciona apenas o conteúdo da janela. Isso afeta apenas a exibição, não a + gravação. ### Outras opções de espelhamento #### 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 scrcpy --no-control 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 scrcpy --turn-screen-off scrcpy -S ``` -Ou apertando `Ctrl`+`o` durante qualquer momento. +Ou apertando MOD+o a qualquer momento. -Para ligar novamente, pressione `POWER` (ou `Ctrl`+`p`). +Para ligar novamente, pressione MOD+Shift+o. -#### 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 MOD+p), ele +forçará a desligar a tela após um delay pequeno (numa base de melhor esforço). +O botão `POWER` físico ainda causará a tela ser ligada. -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 scrcpy --render-expired-frames @@ -349,11 +502,13 @@ scrcpy --render-expired-frames #### 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 scrcpy --show-touches @@ -363,59 +518,137 @@ scrcpy -t 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 #### Rotacionar a tela do dispositivo -Pressione `Ctrl`+`r` para mudar entre os modos Retrato e Paisagem. +Pressione MOD+r 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, -para ambas direções: +Sempre que a área de transferência do Android muda, é automaticamente sincronizada com a +área de transferência do computador. - - `Ctrl`+`c` copia a área de transferência do dispositivo para a área de trasferência do computador; - - `Ctrl`+`Shift`+`v` copia a área de transferência do computador para a área de transferência do dispositivo; - - `Ctrl`+`v` _cola_ a área de transferência do computador como uma sequência de eventos de texto (mas - quebra caracteres não-ASCII). +Qualquer atalho com Ctrl é encaminhado para o dispositivo. Em particular: + - Ctrl+c tipicamente copia + - Ctrl+x tipicamente recorta + - Ctrl+v tipicamente cola (após a sincronização de área de transferência + computador-para-dispositivo) -#### Preferências de injeção de texto +Isso tipicamente funciona como esperado. -Existe dois tipos de [eventos][textevents] gerados ao digitar um texto: - - _eventos de teclas_, sinalizando que a tecla foi pressionada ou solta; +O comportamento de fato depende da aplicação ativa, no entanto. Por exemplo, +_Termux_ envia SIGINT com Ctrl+c, e _K-9 Mail_ +compõe uma nova mensagem. + +Para copiar, recortar e colar em tais casos (mas apenas suportado no Android >= 7): + - MOD+c injeta `COPY` + - MOD+x injeta `CUT` + - MOD+v injeta `PASTE` (após a sincronização de área de transferência + computador-para-dispositivo) + +Em adição, MOD+Shift+v permite injetar o +texto da área de transferência do computador como uma sequência de eventos de tecla. Isso é útil quando o +componente não aceita colar texto (por exemplo no _Termux_), mas pode +quebrar conteúdo não-ASCII. + +**ADVERTÊNCIA:** Colar a área de transferência do computador para o dispositivo (tanto via +Ctrl+v quanto MOD+v) copia o conteúdo +para a área de transferência do dispositivo. Como consequência, qualquer aplicação Android pode ler +o seu conteúdo. Você deve evitar colar conteúdo sensível (como senhas) dessa +forma. + +Alguns dispositivos não se comportam como esperado quando a área de transferência é definida +programaticamente. Uma opção `--legacy-paste` é fornecida para mudar o comportamento +de Ctrl+v e MOD+v para que eles +também injetem o texto da área de transferência do computador como uma sequência de eventos de tecla (da mesma +forma que MOD+Shift+v). + +#### Pinçar para dar zoom + +Para simular "pinçar para dar zoom": Ctrl+_clicar-e-mover_. + +Mais precisamente, segure Ctrl enquanto pressiona o botão de clique-esquerdo. Até que +o botão de clique-esquerdo seja liberado, todos os movimentos do mouse ampliar e rotacionam o +conteúdo (se suportado pelo app) relativo ao centro da tela. + +Concretamente, scrcpy gera eventos adicionais de toque de um "dedo virtual" em +uma posição invertida em relação ao centro da tela. + + +#### 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. -Por padrão, letras são injetadas usando eventos de teclas, assim teclados comportam-se -como esperado em jogos (normalmente para tecladas WASD) +Por padrão, letras são injetadas usando eventos de tecla, assim o teclado comporta-se +como esperado em jogos (normalmente para teclas WASD). -Mas isto pode [causar problemas][prefertext]. Se você encontrar tal problema, -pode evitá-lo usando: +Mas isso pode [causar problemas][prefertext]. Se você encontrar tal problema, você +pode evitá-lo com: ```bash 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 [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 -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. -#### 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 -_scrcpy_. +Para enviar um arquivo para `/sdcard/` no dispositivo, arraste e solte um arquivo (não-APK) para a +janela do _scrcpy_. Não existe feedback visual, um log é imprimido no console. @@ -428,45 +661,73 @@ scrcpy --push-target /sdcard/foo/bar/ ### 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]. -[USBaudio]: https://github.com/rom1v/usbaudio +[sndcpy]: https://github.com/rom1v/sndcpy [issue #14]: https://github.com/Genymobile/scrcpy/issues/14 ## Atalhos - | Ação | Atalho | Atalho (macOS) - | ------------------------------------------------------------- |:------------------------------- |:----------------------------- - | Alternar para modo de tela cheia | `Ctrl`+`f` | `Cmd`+`f` - | Redimensionar janela para pixel-perfect(Escala 1:1) | `Ctrl`+`g` | `Cmd`+`g` - | Redimensionar janela para tirar as bordas pretas | `Ctrl`+`x` \| _Clique-duplo¹_ | `Cmd`+`x` \| _Clique-duplo¹_ - | Clicar em `HOME` | `Ctrl`+`h` \| _Clique-central_ | `Ctrl`+`h` \| _Clique-central_ - | Clicar em `BACK` | `Ctrl`+`b` \| _Clique-direito²_ | `Cmd`+`b` \| _Clique-direito²_ - | Clicar em `APP_SWITCH` | `Ctrl`+`s` | `Cmd`+`s` - | Clicar em `MENU` | `Ctrl`+`m` | `Ctrl`+`m` - | Clicar em `VOLUME_UP` | `Ctrl`+`↑` _(cima)_ | `Cmd`+`↑` _(cima)_ - | Clicar em `VOLUME_DOWN` | `Ctrl`+`↓` _(baixo)_ | `Cmd`+`↓` _(baixo)_ - | Clicar em `POWER` | `Ctrl`+`p` | `Cmd`+`p` - | Ligar | _Clique-direito²_ | _Clique-direito²_ - | Desligar a tela do dispositivo | `Ctrl`+`o` | `Cmd`+`o` - | Rotacionar tela do dispositivo | `Ctrl`+`r` | `Cmd`+`r` - | Expandir painel de notificação | `Ctrl`+`n` | `Cmd`+`n` - | Esconder painel de notificação | `Ctrl`+`Shift`+`n` | `Cmd`+`Shift`+`n` - | 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` - | 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` +Na lista a seguir, MOD é o modificador de atalho. Por padrão, é +Alt (esquerdo) ou Super (esquerdo). + +Ele pode ser mudado usando `--shortcut-mod`. Possíveis teclas são `lctrl`, `rctrl`, +`lalt`, `ralt`, `lsuper` e `rsuper`. Por exemplo: + +```bash +# usar RCtrl para atalhos +scrcpy --shortcut-mod=rctrl + +# usar tanto LCtrl+LAlt quanto LSuper para atalhos +scrcpy --shortcut-mod=lctrl+lalt,lsuper +``` + +_[Super] é tipicamente a tecla Windows ou Cmd._ + +[Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) + + | Ação | Atalho + | ------------------------------------------- |:----------------------------- + | Mudar modo de tela cheia | MOD+f + | Rotacionar display para esquerda | MOD+ _(esquerda)_ + | Rotacionar display para direita | MOD+ _(direita)_ + | Redimensionar janela para 1:1 (pixel-perfect) | MOD+g + | Redimensionar janela para remover bordas pretas | MOD+w \| _Clique-duplo¹_ + | Clicar em `HOME` | MOD+h \| _Clique-do-meio_ + | Clicar em `BACK` | MOD+b \| _Clique-direito²_ + | Clicar em `APP_SWITCH` | MOD+s + | Clicar em `MENU` (desbloquear tela | MOD+m + | Clicar em `VOLUME_UP` | MOD+ _(cima)_ + | Clicar em `VOLUME_DOWN` | MOD+ _(baixo)_ + | Clicar em `POWER` | MOD+p + | Ligar | _Clique-direito²_ + | Desligar tela do dispositivo (continuar espelhando) | MOD+o + | Ligar tela do dispositivo | MOD+Shift+o + | Rotacionar tela do dispositivo | MOD+r + | Expandir painel de notificação | MOD+n + | Colapsar painel de notificação | MOD+Shift+n + | Copiar para área de transferência³ | MOD+c + | Recortar para área de transferência³ | MOD+x + | Sincronizar áreas de transferência e colar³ | MOD+v + | Injetar texto da área de transferência do computador | MOD+Shift+v + | Ativar/desativar contador de FPS (em stdout) | MOD+i + | Pinçar para dar zoom | Ctrl+_clicar-e-mover_ _¹Clique-duplo 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 Ctrl+_tecla_ são encaminhados para o dispositivo, para que eles sejam +tratados pela aplicação ativa. ## 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 @@ -478,7 +739,7 @@ Para sobrepor o caminho do arquivo `scrcpy-server`, configure seu caminho em ## 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. @@ -495,12 +756,12 @@ Veja [BUILD]. ## Problemas comuns -Veja [FAQ](FAQ.md). +Veja o [FAQ](FAQ.md). ## Desenvolvedores -Leia a [developers page]. +Leia a [página dos desenvolvedores][developers page]. [developers page]: DEVELOP.md diff --git a/README.zh-Hans.md b/README.zh-Hans.md index 3774c5d9..bdd8023c 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -2,115 +2,108 @@ _Only the original [README](README.md) is guaranteed to be up-to-date._ 只有原版的[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) - -# 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/ +本应用程序可以显示并控制通过 USB (或 [TCP/IP][article-tcpip]) 连接的安卓设备,且不需要任何 _root_ 权限。本程序支持 _GNU/Linux_, _Windows_ 和 _macOS_。 ![screenshot](assets/screenshot-debian-600.jpg) 它专注于: - - **轻量** (原生,仅显示设备屏幕) - - **性能** (30~60fps) - - **质量** (分辨率可达1920x1080或更高) - - **低延迟** (35-70ms) - - **快速启动** (数秒内即能开始显示) - - **无侵入性** (不需要在安卓设备上安装任何程序) + - **轻量** (原生,仅显示设备屏幕) + - **性能** (30~60fps) + - **质量** (分辨率可达 1920×1080 或更高) + - **低延迟** ([35~70ms][lowlatency]) + - **快速启动** (最快 1 秒内即可显示第一帧) + - **无侵入性** (不会在设备上遗留任何程序) + +[lowlatency]: https://github.com/Genymobile/scrcpy/pull/646 -## 使用要求 +## 系统要求 -安卓设备系统版本需要在Android 5.0(API 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 +## 获取本程序 Packaging status ### Linux -在Debian(目前仅测试版和不稳定版,即 _testing_ 和 _sid_ 版本)和Ubuntu (20.04)上: +在 Debian (目前仅支持 _testing_ 和 _sid_ 分支) 和Ubuntu (20.04) 上: ``` apt install scrcpy ``` -[Snap]包也是可用的: [`scrcpy`][snap-link]. +我们也提供 [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]. +对 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]. +对 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]. +对 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)的程序包。 +在 Windows 上,简便起见,我们提供包含了所有依赖 (包括 `adb`) 的预编译包。 - - [`scrcpy-win64-v1.16.zip`][direct-win64] - _(SHA-256: 3f30dc5db1a2f95c2b40a0f5de91ec1642d9f53799250a8c529bc882bc0918f0)_ + - [README](README.md#windows) -[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.16/scrcpy-win64-v1.16.zip - -您也可以在[Chocolatey]下载: +也可以使用 [Chocolatey]: [Chocolatey]: https://chocolatey.org/ ```bash choco install scrcpy -choco install adb # 如果你没有adb +choco install adb # 如果还没有 adb ``` -也可以使用 [Scoop]: +或者 [Scoop]: ```bash scoop install scrcpy -scoop install adb # 如果你没有adb +scoop install adb # 如果还没有 adb ``` [Scoop]: https://scoop.sh -您也可以[自行编译][编译]。 +您也可以[自行构建][BUILD]。 ### macOS -您可以使用[Homebrew]下载scrcpy。直接安装就可以了: +本程序已发布到 [Homebrew]。直接安装即可: [Homebrew]: https://brew.sh/ @@ -118,24 +111,28 @@ scoop install adb # 如果你没有adb brew install scrcpy ``` -您需要 `adb`以使用scrcpy,并且它需要可以通过 `PATH`被访问。如果您没有: +你还需要在 `PATH` 内有 `adb`。如果还没有: ```bash +# Homebrew >= 2.6.0 +brew install --cask android-platform-tools + +# Homebrew < 2.6.0 brew cask install android-platform-tools ``` -您也可以[自行编译][编译]。 +您也可以[自行构建][BUILD]。 -## 运行scrcpy +## 运行 -用USB链接电脑和安卓设备,并执行: +连接安卓设备,然后执行: ```bash scrcpy ``` -支持带命令行参数执行,查看参数列表: +本程序支持命令行参数,查看参数列表: ```bash scrcpy --help @@ -143,111 +140,129 @@ scrcpy --help ## 功能介绍 -### 画面设置 +### 捕获设置 -#### 缩小分辨率 +#### 降低分辨率 -有时候,将设备屏幕镜像分辨率降低可以有效地提升性能。 +有时候,可以通过降低镜像的分辨率来提高性能。 -我们可以将高度和宽度都限制在一定大小内(如 1024): +要同时限制宽度和高度到某个值 (例如 1024): ```bash scrcpy --max-size 1024 -scrcpy -m 1024 # short version +scrcpy -m 1024 # 简写 ``` -较短的一边会被按比例缩小以保持设备的显示比例。 -这样,1920x1080 的设备会以 1024x576 的分辨率显示。 +另一边会被按比例缩小以保持设备的显示比例。这样,1920×1080 分辨率的设备会以 1024×576 的分辨率进行镜像。 -#### 修改画面比特率 +#### 修改码率 -默认的比特率是8Mbps。如果要改变画面的比特率 (比如说改成2Mbps): +默认码率是 8Mbps。要改变视频的码率 (例如改为 2Mbps): ```bash scrcpy --bit-rate 2M -scrcpy -b 2M # short version +scrcpy -b 2M # 简写 ``` -#### 限制画面帧率 +#### 限制帧率 -画面的帧率可以通过下面的命令被限制: +要限制捕获的帧率: ```bash scrcpy --max-fps 15 ``` -这个功能仅在Android 10和以后的版本被Android官方支持,但也有可能在更早的版本可用。 +本功能从 Android 10 开始才被官方支持,但在一些旧版本中也能生效。 #### 画面裁剪 -设备画面可在裁切后进行镜像,以显示部分屏幕。 +可以对设备屏幕进行裁剪,只镜像屏幕的一部分。 -这项功能可以用于,例如,只显示Oculus Go的一只眼睛。 +例如可以只镜像 Oculus Go 的一只眼睛。 ```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 -scrcpy --lock-video-orientation 0 # 自然朝向 -scrcpy --lock-video-orientation 1 # 90° 逆时针旋转 +scrcpy --lock-video-orientation 0 # 自然方向 +scrcpy --lock-video-orientation 1 # 逆时针旋转 90° 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 scrcpy --record file.mp4 scrcpy -r file.mkv ``` -在不开启屏幕镜像的同时录制: +仅录制,不显示镜像: ```bash scrcpy --no-display --record file.mp4 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。 -2. 获取安卓设备的IP地址(在设置-关于手机-状态信息)。 -3. 打开安卓设备的网络adb功能`adb tcpip 5555`。 -4. 将您的设备与电脑断开连接。 -5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(用设备IP替换 `DEVICE_IP`)_. -6. 运行`scrcpy`。 +1. 将设备和电脑连接至同一 Wi-Fi。 +2. 打开 设置 → 关于手机 → 状态信息,获取设备的 IP 地址,也可以执行以下的命令: + ```bash + adb shell ip route | awk '{print $9}' + ``` -降低比特率和分辨率可能有助于性能: +3. 启用设备的网络 adb 功能 `adb tcpip 5555`。 +4. 断开设备的 USB 连接。 +5. 连接到您的设备:`adb connect DEVICE_IP:5555` _(将 `DEVICE_IP` 替换为设备 IP)_. +6. 正常运行 `scrcpy`。 + +可能需要降低码率和分辨率: ```bash 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 @@ -255,18 +270,18 @@ scrcpy -b2M -m800 # short version #### 多设备 -如果多个设备在执行`adb devices`后被列出,您必须指定设备的 _序列号_ : +如果 `adb devices` 列出了多个设备,您必须指定设备的 _序列号_ : ```bash scrcpy --serial 0123456789abcdef -scrcpy -s 0123456789abcdef # short version +scrcpy -s 0123456789abcdef # 简写 ``` -如果设备是通过TCP/IP方式连接到电脑的: +如果设备通过 TCP/IP 连接: ```bash scrcpy --serial 192.168.0.1:5555 -scrcpy -s 192.168.0.1:5555 # short version +scrcpy -s 192.168.0.1:5555 # 简写 ``` 您可以同时启动多个 _scrcpy_ 实例以同时显示多个设备的画面。 @@ -281,38 +296,38 @@ autoadb scrcpy -s '{}' [AutoAdb]: https://github.com/rom1v/autoadb -#### SSH 连接 +#### SSH 隧道 -本地的 adb 可以远程连接到另一个 adb 服务器(假设两者的adb版本相同),来远程连接到设备: +要远程连接到设备,可以将本地的 adb 客户端连接到远程的 adb 服务端 (需要两端的 _adb_ 协议版本相同): ```bash -adb kill-server # 关闭本地5037端口上的adb服务器 +adb kill-server # 关闭本地 5037 端口上的 adb 服务端 ssh -CN -L5037:localhost:5037 -R27183:localhost:27183 your_remote_computer # 保持该窗口开启 ``` -从另一个终端: +在另一个终端: ```bash scrcpy ``` -为了避免启动远程端口转发,你可以强制启动一个转发连接(注意`-L`和`-R`的区别: +若要不使用远程端口转发,可以强制使用正向连接 (注意 `-L` 和 `-R` 的区别): ```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 # 保持该窗口开启 ``` -从另一个终端: +在另一个终端: ```bash scrcpy --force-adb-forward ``` -和无线网络连接类似,下列设置可能对改善性能有帮助: +类似无线网络连接,可能需要降低画面质量: ``` scrcpy -b2M -m800 --max-fps 15 @@ -322,7 +337,7 @@ scrcpy -b2M -m800 --max-fps 15 #### 标题 -窗口的标题默认为设备型号。您可以通过如下命令修改它: +窗口的标题默认为设备型号。可以通过如下命令修改: ```bash scrcpy --window-title 'My device' @@ -358,14 +373,14 @@ scrcpy --always-on-top ```bash scrcpy --fullscreen -scrcpy -f # short version +scrcpy -f # 简写 ``` -全屏状态可以通过MOD+f实时改变。 +全屏状态可以通过 MOD+f 随时切换。 #### 旋转 -通过如下命令,窗口可以旋转: +可以通过以下命令旋转窗口: ```bash scrcpy --rotation 1 @@ -373,27 +388,23 @@ scrcpy --rotation 1 可选的值有: - `0`: 无旋转 - - `1`: 逆时针旋转90° - - `2`: 旋转180° - - `3`: 顺时针旋转90° + - `1`: 逆时针旋转 90° + - `2`: 旋转 180° + - `3`: 顺时针旋转 90° -这同样可以使用MOD+ -_(左)_ 和 MOD+ _(右)_ 的快捷键实时更改。 +也可以使用 MOD+ _(左箭头)_ 和 MOD+ _(右箭头)_ 随时更改。 -需要注意的是, _scrcpy_ 控制三个不同的朝向: - - MOD+r 请求设备在竖屏和横屏之间切换(如果前台应用程序不支持所请求的朝向,可能会拒绝该请求)。 - - - `--lock-video-orientation` 改变镜像的朝向(设备镜像到电脑的画面朝向)。这会影响录制。 - - - `--rotation` (或MOD+/MOD+) - 只旋转窗口的画面。这只影响显示,不影响录制。 +需要注意的是, _scrcpy_ 有三个不同的方向: + - MOD+r 请求设备在竖屏和横屏之间切换 (如果前台应用程序不支持请求的朝向,可能会拒绝该请求)。 + - [`--lock-video-orientation`](#锁定屏幕方向) 改变镜像的朝向 (设备传输到电脑的画面的朝向)。这会影响录制。 + - `--rotation` (或 MOD+/MOD+) 只旋转窗口的内容。这只影响显示,不影响录制。 ### 其他镜像设置 #### 只读 -关闭电脑对设备的控制(如键盘输入、鼠标移动和文件传输): +禁用电脑对设备的控制 (如键盘输入、鼠标事件和文件拖放): ```bash scrcpy --no-control @@ -402,53 +413,49 @@ scrcpy -n #### 显示屏 -如果有多个显示屏可用,您可以选择特定显示屏进行镜像: +如果设备有多个显示屏,可以选择要镜像的显示屏: ```bash scrcpy --display 1 ``` -您可以通过如下命令找到显示屏的id: +可以通过如下命令列出所有显示屏的 id: ``` -adb shell dumpsys display # 在回显中搜索“mDisplayId=” +adb shell dumpsys display # 在输出中搜索 “mDisplayId=” ``` -第二显示屏可能只能在设备运行Android 10或以上的情况下被控制(它可能会在电脑上显示,但无法通过电脑操作)。 +控制第二显示屏需要设备运行 Android 10 或更高版本 (否则将在只读状态下镜像)。 #### 保持常亮 -防止设备在已连接的状态下休眠: +阻止设备在连接时休眠: ```bash scrcpy --stay-awake scrcpy -w ``` -程序关闭后,设备设置会恢复原样。 +程序关闭时会恢复设备原来的设置。 #### 关闭设备屏幕 -在启动屏幕镜像时,可以通过如下命令关闭设备的屏幕: +可以通过以下的命令行参数在关闭设备屏幕的状态下进行镜像: ```bash scrcpy --turn-screen-off scrcpy -S ``` -或者在需要的时候按MOD+o。 +或者在任何时候按 MOD+o。 -要重新打开屏幕的话,需要按MOD+Shift+o. +要重新打开屏幕,按下 MOD+Shift+o. -在Android上,`电源`按钮始终能把屏幕打开。 +在Android上,`电源` 按钮始终能把屏幕打开。为了方便,对于在 _scrcpy_ 中发出的 `电源` 事件 (通过鼠标右键或 MOD+p),会 (尽最大的努力) 在短暂的延迟后将屏幕关闭。设备上的 `电源` 按钮仍然能打开设备屏幕。 -为了方便,如果按下`电源`按钮的事件是通过 _scrcpy_ 发出的(通过点按鼠标右键或MOD+p),它会在短暂的延迟后将屏幕关闭。 - -物理的`电源`按钮仍然能打开设备屏幕。 - -同时,这项功能还能被用于防止设备休眠: +还可以同时阻止设备休眠: ```bash scrcpy --turn-screen-off --stay-awake @@ -456,11 +463,11 @@ scrcpy -Sw ``` -#### 渲染超时帧 +#### 渲染过期帧 -为了降低延迟, _scrcpy_ 默认渲染解码成功的最近一帧,并跳过前面任意帧。 +默认状态下,为了降低延迟, _scrcpy_ 永远渲染解码成功的最近一帧,并跳过前面任意帧。 -强制渲染所有帧(可能导致延迟变高): +强制渲染所有帧 (可能导致延迟变高): ```bash scrcpy --render-expired-frames @@ -468,9 +475,9 @@ scrcpy --render-expired-frames #### 显示触摸 -在展示时,有些时候可能会用到显示触摸点这项功能(在设备上显示)。 +在演示时,可能会需要显示物理触摸点 (在物理设备上的触摸点)。 -Android在 _开发者设置_ 中提供了这项功能。 +Android 在 _开发者选项_ 中提供了这项功能。 _Scrcpy_ 提供一个选项可以在启动时开启这项功能并在退出时恢复初始设置: @@ -479,12 +486,12 @@ scrcpy --show-touches scrcpy -t ``` -请注意这项功能只能显示 _物理_ 触摸(要用手在屏幕上触摸)。 +请注意这项功能只能显示 _物理_ 触摸 (用手指在屏幕上的触摸)。 #### 关闭屏保 -_Scrcpy_ 不会默认关闭屏幕保护。 +_Scrcpy_ 默认不会阻止电脑上开启的屏幕保护。 关闭屏幕保护: @@ -497,64 +504,58 @@ scrcpy --disable-screensaver #### 旋转设备屏幕 -使用MOD+r以在竖屏和横屏模式之间切换。 +使用 MOD+r 在竖屏和横屏模式之间切换。 需要注意的是,只有在前台应用程序支持所要求的模式时,才会进行切换。 -#### 复制黏贴 +#### 复制粘贴 -每次Android的剪贴板变化的时候,它都会被自动同步到电脑的剪贴板上。 +每次安卓的剪贴板变化时,其内容都会被自动同步到电脑的剪贴板上。 所有的 Ctrl 快捷键都会被转发至设备。其中: - - Ctrl+c 复制 - - Ctrl+x 剪切 - - Ctrl+v 黏贴 (在电脑到设备的剪贴板同步完成之后) + - Ctrl+c 通常执行复制 + - Ctrl+x 通常执行剪切 + - Ctrl+v 通常执行粘贴 (在电脑到设备的剪贴板同步完成之后) -这通常如您所期望的那样运作。 +大多数时候这些按键都会执行以上的功能。 -但实际的行为取决于设备上的前台程序。 -例如 _Termux_ 在Ctrl+c被按下时发送 SIGINT, -又如 _K-9 Mail_ 会新建一封新邮件。 +但实际的行为取决于设备上的前台程序。例如,_Termux_ 会在按下 Ctrl+c 时发送 SIGINT,又如 _K-9 Mail_ 会新建一封邮件。 -在这种情况下剪切复制黏贴(仅在Android >= 7时可用): - - MOD+c 注入 `COPY`(复制) - - MOD+x 注入 `CUT`(剪切) - - MOD+v 注入 `PASTE`(黏贴)(在电脑到设备的剪贴板同步完成之后) +要在这种情况下进行剪切,复制和粘贴 (仅支持 Android >= 7): + - MOD+c 注入 `COPY` (复制) + - MOD+x 注入 `CUT` (剪切) + - MOD+v 注入 `PASTE` (粘贴) (在电脑到设备的剪贴板同步完成之后) -另外,MOD+Shift+v可以将电脑的剪贴板内容转换为一串按键事件输入到设备。 -在应用程序不接受黏贴时(比如 _Termux_ ),这项功能可以排上一定的用场。 -需要注意的是,这项功能可能会导致非ASCII编码的内容出现错误。 +另外,MOD+Shift+v 会将电脑的剪贴板内容转换为一串按键事件输入到设备。在应用程序不接受粘贴时 (比如 _Termux_),这项功能可以派上一定的用场。不过这项功能可能会导致非 ASCII 编码的内容出现错误。 -**警告:** 将电脑剪贴板的内容黏贴至设备(无论是通过Ctrl+v还是MOD+v) -都需要将内容保存至设备的剪贴板。如此,任何一个应用程序都可以读取它。 -您应当避免将敏感内容通过这种方式传输(如密码)。 +**警告:** 将电脑剪贴板的内容粘贴至设备 (无论是通过 Ctrl+v 还是 MOD+v) 都会将内容复制到设备的剪贴板。如此,任何安卓应用程序都能读取到。您应避免将敏感内容 (如密码) 通过这种方式粘贴。 +一些设备不支持通过程序设置剪贴板。通过 `--legacy-paste` 选项可以修改 Ctrl+vMOD+v 的工作方式,使它们通过按键事件 (同 MOD+Shift+v) 来注入电脑剪贴板内容。 -#### 捏拉缩放 +#### 双指缩放 -模拟 “捏拉缩放”:Ctrl+_按住并移动鼠标_。 +模拟“双指缩放”:Ctrl+_按住并移动鼠标_。 -更准确的说,您需要在按住Ctrl的同时按住并移动鼠标。 -在鼠标左键松开之后,光标的任何操作都会相对于屏幕的中央进行。 +更准确的说,在按住鼠标左键时按住 Ctrl。直到松开鼠标左键,所有鼠标移动将以屏幕中心为原点,缩放或旋转内容 (如果应用支持)。 -具体来说, _scrcpy_ 使用“虚拟手指”以在相对于屏幕中央相反的位置产生触摸事件。 +实际上,_scrcpy_ 会在以屏幕中心对称的位置上生成由“虚拟手指”发出的额外触摸事件。 #### 文字注入偏好 打字的时候,系统会产生两种[事件][textevents]: - - _按键事件_ ,代表一个按键被按下/松开。 - - _文本事件_ ,代表一个文本被输入。 + - _按键事件_ ,代表一个按键被按下或松开。 + - _文本事件_ ,代表一个字符被输入。 -程序默认使用按键事件来输入字母。只有这样,键盘才会在游戏中正常运作(尤其WASD键)。 +程序默认使用按键事件来输入字母。只有这样,键盘才会在游戏中正常运作 (例如 WASD 键)。 -但这也有可能[造成问题][prefertext]。如果您遇到了这样的问题,您可以通过下列操作避免它: +但这也有可能[造成一些问题][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 @@ -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`结尾)到 _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]。 @@ -604,93 +613,90 @@ _scrcpy_ 不支持音频。请使用 [sndcpy]. [issue #14]: https://github.com/Genymobile/scrcpy/issues/14 -## 热键 +## 快捷键 -在下列表格中, MOD 是热键的修饰键。 -默认是(左)Alt或者(左)Super。 +在以下列表中, MOD 是快捷键的修饰键。 +默认是 (左) Alt 或 (左) Super。 -您可以使用 `--shortcut-mod`后缀来修改它。可选的按键有`lctrl`、`rctrl`、 -`lalt`、`ralt`、`lsuper`和`rsuper`。如下例: +您可以使用 `--shortcut-mod` 来修改。可选的按键有 `lctrl`、`rctrl`、`lalt`、`ralt`、`lsuper` 和 `rsuper`。例如: ```bash -# 使用右侧的Ctrl键 +# 使用右 Ctrl 键 scrcpy --shortcut-mod=rctrl -# 使用左侧的Ctrl键、Alt键或Super键 +# 使用左 Ctrl 键 + 左 Alt 键,或 Super 键 scrcpy --shortcut-mod=lctrl+lalt,lsuper ``` -_一般来说,[Super]就是Windows或者Cmd。_ +_[Super] 键通常是指 WindowsCmd 键。_ [Super]: https://en.wikipedia.org/wiki/Super_key_(keyboard_button) - | 操作 | 快捷键 - | ------------------------------------------- |:----------------------------- - | 全屏 | MOD+f - | 向左旋转屏幕 | MOD+ _(左)_ - | 向右旋转屏幕 | MOD+ _(右)_ - | 将窗口大小重置为1:1 (像素优先) | MOD+g - | 将窗口大小重置为消除黑边 | MOD+w \| _双击¹_ - | 点按 `主屏幕` | MOD+h \| _点击鼠标中键_ - | 点按 `返回` | MOD+b \| _点击鼠标右键²_ - | 点按 `切换应用` | MOD+s - | 点按 `菜单` (解锁屏幕) | MOD+m - | 点按 `音量+` | MOD+ _(up)_ - | 点按 `音量-` | MOD+ _(down)_ - | 点按 `电源` | MOD+p - | 打开屏幕 | _点击鼠标右键²_ - | 关闭设备屏幕(但继续在电脑上显示) | MOD+o - | 打开设备屏幕 | MOD+Shift+o - | 旋转设备屏幕 | MOD+r - | 展开通知面板 | MOD+n - | 展开快捷操作 | MOD+Shift+n - | 复制到剪贴板³ | MOD+c - | 剪切到剪贴板³ | MOD+x - | 同步剪贴板并黏贴³ | MOD+v - | 导入电脑剪贴板文本 | MOD+Shift+v - | 打开/关闭FPS显示(在 stdout) | MOD+i - | 捏拉缩放 | Ctrl+_点按并移动鼠标_ + | 操作 | 快捷键 | + | --------------------------------- | :------------------------------------------- | + | 全屏 | MOD+f | + | 向左旋转屏幕 | MOD+ _(左箭头)_ | + | 向右旋转屏幕 | MOD+ _(右箭头)_ | + | 将窗口大小重置为1:1 (匹配像素) | MOD+g | + | 将窗口大小重置为消除黑边 | MOD+w \| _双击¹_ | + | 点按 `主屏幕` | MOD+h \| _鼠标中键_ | + | 点按 `返回` | MOD+b \| _鼠标右键²_ | + | 点按 `切换应用` | MOD+s | + | 点按 `菜单` (解锁屏幕) | MOD+m | + | 点按 `音量+` | MOD+ _(上箭头)_ | + | 点按 `音量-` | MOD+ _(下箭头)_ | + | 点按 `电源` | MOD+p | + | 打开屏幕 | _鼠标右键²_ | + | 关闭设备屏幕 (但继续在电脑上显示) | MOD+o | + | 打开设备屏幕 | MOD+Shift+o | + | 旋转设备屏幕 | MOD+r | + | 展开通知面板 | MOD+n | + | 收起通知面板 | MOD+Shift+n | + | 复制到剪贴板³ | MOD+c | + | 剪切到剪贴板³ | MOD+x | + | 同步剪贴板并粘贴³ | MOD+v | + | 注入电脑剪贴板文本 | MOD+Shift+v | + | 打开/关闭FPS显示 (在 stdout) | MOD+i | + | 捏拉缩放 | Ctrl+_按住并移动鼠标_ | -_¹双击黑色边界以关闭黑色边界_ -_²点击鼠标右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下 返回键 。_ +_¹双击黑边可以去除黑边_ +_²点击鼠标右键将在屏幕熄灭时点亮屏幕,其余情况则视为按下返回键 。_ _³需要安卓版本 Android >= 7。_ -所有的 Ctrl+_按键_ 的热键都是被转发到设备进行处理的,所以实际上会由当前应用程序对其做出响应。 +所有的 Ctrl+_按键_ 的快捷键都会被转发到设备,所以会由当前应用程序进行处理。 ## 自定义路径 -为了使用您想使用的 _adb_ ,您可以在环境变量 -`ADB`中设置它的路径: +要使用指定的 _adb_ 二进制文件,可以设置环境变量 `ADB`: ADB=/path/to/adb scrcpy -如果需要覆盖`scrcpy-server`的路径,您可以在 -`SCRCPY_SERVER_PATH`中设置它。 +要覆盖 `scrcpy-server` 的路径,可以设置 `SCRCPY_SERVER_PATH`。 [useful]: https://github.com/Genymobile/scrcpy/issues/278#issuecomment-429330345 ## 为什么叫 _scrcpy_ ? -一个同事让我找出一个和[gnirehtet]一样难以发音的名字。 +一个同事让我找出一个和 [gnirehtet] 一样难以发音的名字。 -[`strcpy`] 可以复制**str**ing; `scrcpy` 可以复制**scr**een。 +[`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.md +[BUILD]: BUILD.md ## 常见问题 -请查看[FAQ](FAQ.md). +请查看[FAQ](FAQ.md)。 ## 开发者 diff --git a/README.zh-Hant.md b/README.zh-Hant.md index b4dc69ec..c0e30254 100644 --- a/README.zh-Hant.md +++ b/README.zh-Hant.md @@ -80,10 +80,7 @@ apt install scrcpy 為了保持簡單,Windows 用戶可以下載一個包含所有必需軟體 (包含 `adb`) 的壓縮包: -- [`scrcpy-win64-v1.15.zip`][direct-win64] - _(SHA-256: dd514bb591e63ef4cd52a53c30f1153a28f59722d64690eb07bd017849edcba2)_ - -[direct-win64]: https://github.com/Genymobile/scrcpy/releases/download/v1.15/scrcpy-win64-v1.15.zip + - [README](README.md#windows) [Chocolatey] 上也可以下載: diff --git a/app/scrcpy.1 b/app/scrcpy.1 index 7ef69640..80467d10 100644 --- a/app/scrcpy.1 +++ b/app/scrcpy.1 @@ -217,25 +217,25 @@ Set a custom window title. .BI "\-\-window\-x " value Set the initial window horizontal position. -Default is "auto".\n +Default is "auto". .TP .BI "\-\-window\-y " value Set the initial window vertical position. -Default is "auto".\n +Default is "auto". .TP .BI "\-\-window\-width " value Set the initial window width. -Default is 0 (automatic).\n +Default is 0 (automatic). .TP .BI "\-\-window\-height " value Set the initial window height. -Default is 0 (automatic).\n +Default is 0 (automatic). .SH SHORTCUTS diff --git a/app/src/android/input.h b/app/src/android/input.h index b51731b4..30c4bcb9 100644 --- a/app/src/android/input.h +++ b/app/src/android/input.h @@ -21,7 +21,7 @@ #define _ANDROID_INPUT_H /** - * Meta key / modifer state. + * Meta key / modifier state. */ enum android_metastate { /** No meta keys are pressed. */ diff --git a/app/src/cli.c b/app/src/cli.c index 841b7c39..3e5d613d 100644 --- a/app/src/cli.c +++ b/app/src/cli.c @@ -217,7 +217,7 @@ scrcpy_print_usage(const char *arg0) { " Default is 0 (automatic).\n" "\n" " --window-height value\n" - " Set the initial window width.\n" + " Set the initial window height.\n" " Default is 0 (automatic).\n" "\n" "Shortcuts:\n" diff --git a/app/src/event_converter.c b/app/src/event_converter.c index cf010a16..a3c2da89 100644 --- a/app/src/event_converter.c +++ b/app/src/event_converter.c @@ -14,7 +14,7 @@ convert_keycode_action(SDL_EventType from, enum android_keyevent_action *to) { static enum android_metastate autocomplete_metastate(enum android_metastate metastate) { - // fill dependant flags + // fill dependent flags if (metastate & (AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON)) { metastate |= AMETA_SHIFT_ON; } diff --git a/app/src/util/str_util.h b/app/src/util/str_util.h index c016a625..361d2bdd 100644 --- a/app/src/util/str_util.h +++ b/app/src/util/str_util.h @@ -16,7 +16,7 @@ size_t xstrncpy(char *dest, const char *src, size_t n); // 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 size_t xstrjoin(char *dst, const char *const tokens[], char sep, size_t n); diff --git a/install_release.sh b/install_release.sh new file mode 100755 index 00000000..5179c447 --- /dev/null +++ b/install_release.sh @@ -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