使用Linux习惯后最烦的就是使用微信和别人交流, 最近突然意识到是不是可以使用类似三星DeX或者某种安卓的远程桌面的软件, 在Linux上使用安卓手机上的微信呢? 答案就是scrcpy

scrcpy的安装

以Linux Mint 21 (基于Ubuntu)为例.

需要先安装adb, 建议去官网(需翻墙)下载最新版本: https://dl.google.com/android/repository/platform-tools_r34.0.1-linux.zip, 解压后将其目录中的platform-tools/adb软连接到/usr/local/bin/adb; 也可以直接在软件源中安装adb: sudo apt update && sudo apt install adb android-tools-adb.

随后参照GitHub上的教程安装最新版本scrcpy(旧版本对最新的安卓系统可能不兼容, 也无法转发手机声音至电脑):

sudo apt update
sudo apt install ffmpeg libsdl2-2.0-0 adb wget \
                 gcc git pkg-config meson ninja-build libsdl2-dev \
                 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev \
                 libswresample-dev libusb-1.0-0 libusb-1.0-0-dev
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
./install_release.sh

当然如果想省事也可以尝试sudo apt update && sudo apt install scrcpy.

有线版scrcpy

安卓手机需要先打开开发者模式(自行百度), 并且打开USB调试. 随后将手机用USB数据线连接到电脑, 手机进入USB文件传输模式(一些旧版的安卓系统可能不需要). 使用adb devices查询手机的序列号, scrcpy -s 序列号来连接手机的远程桌面, 第一次连接时候可能会显示”unauthorized”, 在手机上勾选始终同意该计算机进行USB调试, 再尝试连接一次即可.

我们可以通过添加参数来自定义scrcpy, 例如:

scrcpy --window-title '窗口名称' --shortcut-mod="lctrl,rctrl" --push-target="/sdcard/手机中的某个目录" --no-audio -K --power-off-on-close --window-width=窗口宽(像素) --window-height=窗口高(像素) -s 序列号

其中:

  • --shortcut-mod="lctrl,rctrl"代表可以通过Ctrl组合键(下文以”MOD + …”的形式表示)模拟手机上的原生按键, 比如
    • MOD + $\uparrow$/$\downarrow$: 调节音量
    • MOD + b/Backspace: 返回键 (鼠标右键有同样作用)
    • MOD + h: 主页键 (鼠标中键有同样作用)
    • MOD +$\leftarrow$/$\rightarrow$/r: 旋转屏幕
    • MOD + s: 任务切换
    • MOD + m: 菜单键
    • MOD + o: 关屏幕键
    • MOD + 屏幕拖拽: 放大缩小
    • MOD + c/x/v: 复制/剪贴/粘贴
  • --push-target="/sdcard/手机中的某个目录": 当将电脑上的文件拖入scrcpy时, 如果为apk文件, 则安装, 否则将文件保存在此处设置的目录中
  • --no-audio: 不要发送手机的声音到电脑上去
  • --power-off-on-close: 电脑上关闭scrcpy时关闭手机屏幕
  • -K: 将电脑键盘作为实体键盘设备接入手机
  • -M: 将电脑鼠标作为实体鼠标设备接入手机
  • -w: 保持手机屏幕常亮
  • -r 文件名.mp4: 将操作过程录屏

无线版scrcpy

当手机与电脑接入同一局域网时, 可以使用网络(WiFi)进行scrcpy连接.

需要先开启手机的无线调试:

  • 将手机与电脑通过USB数据线连接并且按照上述有线连接的方式连接手机.
  • 电脑上执行adb -s 序列号 tcpip 5555

注意手机重启后无线调试会自动关闭, 需要再次进行上述操作以开启.

这样开启无线调试后还需要知道手机的IP, 可以在手机的WLAN设置中查询.

当使用最新版的adb以及scrcpy时, 可以直接使用命令scrcpy --tcpip=手机IP ...(自定义scrcpy的参数)通过网络连接手机. 当adb的版本较旧时, 上述命令可能报错, 解决方法是先进行adb connect 手机IP:5555连接手机, 随后scrcpy -s=手机IP ...(自定义scrcpy的参数)来获取手机屏幕.

在一些新版本的安卓系统中, 必须先将手机解锁或者删除锁屏密码后才能进行无线连接.

设置手机自动解除锁屏

可以利用adb向手机注入操作来实现解锁, 常用操作:

  • adb -s 序列号 shell input keyevent 224: 开启手机屏幕
  • adb -s 序列号 shell input swipe 300 1000 300 500: 模拟向上滑动手机
  • adb -s 序列号 shell input text 手机锁屏密码: 输入密码

实际上如果手机设置了锁屏密码, 直接开启手机屏幕并且输入密码就能解锁, 所以我最终将

adb -s 序列号 shell input keyevent 224 2> /dev/null
adb -s 序列号 shell input text 手机锁屏密码 2> /dev/null
scrcpy --window-title '窗口名称' --shortcut-mod="lctrl,rctrl" --push-target="/sdcard/手机中的某个目录" --no-audio -K --window-width=窗口宽(像素) --window-height=窗口高(像素) -s 序列号 2> /dev/null &

写成了一个脚本文件, 方便一键连接手机.

注意如果是使用无线连接手机, 则需要事先进行adb connect 手机IP:5555后才能进行adb操作注入:

adb connect 手机IP:5555
adb -s 手机IP shell input keyevent 224 2> /dev/null
adb -s 手机IP shell input swipe 300 1000 300 500
scrcpy --tcpip=手机IP ... 2> /dev/null    或者    scrcpy -e ... 2> /dev/null

在一些新版本的安卓系统中, 必须先删除锁屏密码后才能在息屏情况下进行无线连接.

scrcpy -e仅能在adb connect 手机IP:5555后使用, 表示scrcpy通过网络连接到安卓设备, 如果电脑通过网络连接了多台安卓设备则报错.



software

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!