使用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通过网络连接到安卓设备, 如果电脑通过网络连接了多台安卓设备则报错.
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!