隧道
Scrcpy 设计用于镜像本地 Android 设备。隧道允许连接到远程设备(例如通过互联网)。
要连接到远程设备,可以将本地 adb
客户端连接到远程 adb
服务器(前提是它们使用相同的 adb 协议版本)。
远程 ADB 服务器
要连接到远程的 adb 服务器,请让服务器监听所有接口:
adb kill-server
adb -a nodaemon server start
# 保持打开
警告:客户端与 adb 服务器 之间的所有通信都是未加密的。
假设这个服务器可以访问,位于 192.168.1.2。然后,在另一个终端中运行 scrcpy
:
# 在 bash 中
export ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:192.168.1.2:5037
scrcpy --tunnel-host=192.168.1.2
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:192.168.1.2:5037'
scrcpy --tunnel-host=192.168.1.2
默认情况下,scrcpy
使用用于 adb forward
隧道建立的本地端口(通常是 27183
,请参见 --port
)。在涉及更多重定向的更复杂情况下,也可以强制使用不同的隧道端口(这可能很有用):
scrcpy --tunnel-port=1234
SSH 隧道
为了安全地与远程 adb 服务器 通信,建议使用 SSH 隧道。
首先,请确保远程计算机上的 adb 服务器 正在运行:
adb start-server
然后,建立 SSH 隧道:
# 本地 5038 --> 远程 5037
# 本地 27183 <-- 远程 27183
ssh -CN -L5038:localhost:5037 -R27183:localhost:27183 your_remote_computer
# 保持打开
从另一个终端运行 scrcpy
:
# 在 bash 中
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy
为了避免启用远程端口转发,您可以强制建立一个前向连接(注意 -L
而不是 -R
):
# 本地 5038 --> 远程 5037
# 本地 27183 --> 远程 27183
ssh -CN -L5038:localhost:5037 -L27183:localhost:27183 your_remote_computer
# 保持打开
从另一个终端运行 scrcpy
:
# 在 bash 中
export ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
:: 在 cmd 中
set ADB_SERVER_SOCKET=tcp:localhost:5038
scrcpy --force-adb-forward
# 在 PowerShell 中
$env:ADB_SERVER_SOCKET = 'tcp:localhost:5038'
scrcpy --force-adb-forward