之前还在用windows的时候,360有自带的手机管家可以将手机屏幕投放在电脑屏幕上,而切了Ubuntu之后,这个需求就一直无法实现。
其实解决方案很简单,只需要使用scrcpy框架就可以了,然而如果按照"Ubuntu","安卓手机投屏"这几个关键词去搜,搜出来的往往是不够实用或者是无关的信息,我也是偶然看到微信公众号的推送才知道有这个神器的,用它不仅仅可以实现投屏,甚至可以在电脑上操作手机,结合图像识别与模拟鼠标就可以做一些很有趣的东西出来。
项目地址:https://github.com/Genymobile/scrcpy
教程没有提ADB的安装,我也不知道是因为构建的时候包含ADB还是因为我之前安装过ADB所以没有遇到问题,如果有遇到问题的可以考虑一下是不是没有安装ADB
一、安装
首先需要安装几个必要的依赖:
# runtime dependencies
sudo apt install ffmpeg libsdl2-2.0-0
# client build dependencies
sudo apt install make gcc git pkg-config meson ninja-build \
libavcodec-dev libavformat-dev libavutil-dev \
libsdl2-dev
# server build dependencies
sudo apt install openjdk-8-jdk
在比较老的Ubuntu版本,如16.04,需要用如下方式来安装meson
sudo apt install python3-pip
pip3 install meson
这里我们使用已经编译好的server,官网教程中也提供了自己编译server的方式,不过这里没有采用,官网教程是:https://github.com/Genymobile/scrcpy/blob/master/BUILD.md
这里我们下载它编译好的jar包:
wget https://github.com/Genymobile/scrcpy/releases/download/v1.9/scrcpy-server-v1.9.jar
如图:
下一步需要克隆整个项目并进入项目目录
git clone https://github.com/Genymobile/scrcpy
cd scrcpy
然后构建项目:
meson x --buildtype release --strip -Db_lto=true
cd x
ninja
这里在运行ninja命令的时候会报错,查看报错内容发现是构建server时出错:
不过这不重要,因为之前已经下好了编译好的server。
接下来需要把之前下好的scrcpy-server-v1.9.jar重命名为scrcpy-server.jar并移动到scrcpy/x/server目录下,否则一会运行会报如下错误:
二、利用USB调试模式运行
首先连接手机,然后打开USB调试,之后进入scrcpy目录下,可以看到当前目录下有可执行文件run:
接下来利用如下命令运行即可:
./run x
运行之后,就可以看到手机界面出现在了电脑屏幕上,这个界面是可以交互的,在这里的操作会同步到手机上:
到这里,我们已经实现了使用USB模式来进行投屏了。
启动时还有很多可选参数,这里可以参考这篇博客,我觉得已经很细致了:
scrcpy - Android无需ROOT的跨平台投屏工具
三、利用无线模式运行
当我以为这个神器已经很NB的时候,对面宿舍的兄弟告诉我他发现这玩意还能无线投屏,只要知道手机的IP地址就能够实现这个功能。折腾了半个多小时之后,我们成功实现了无线投屏功能。
首先需要知道手机的IP地址,这里为了确保电脑能够连接到手机,我用电脑开了一个WIFI,怎么开WIFI可以参考一下这篇博客:信息安全实验:实现一个fake-wifi
手机连接到和电脑相同WiFi之后,就需要找到手机IP了,具体方法每个手机可能不一样吧,我这里华为荣耀4找到高级WLAN设置就能看到IP了(实在不行可以10.42.0.X一个一个ping)。
可以从电脑ping一下,可以看到是可以ping通的:
前期准备做好了,下一步就是正式的链接了,通过多次的实验验证,我们找到了正确的启动顺序:
1.连接数据线
2.允许USB调试
3.连接电脑相同WIFI
4.找到手机IP
这几步在之前说过了,接下来就是关键步骤
5.
adb tcpip 5555
这样将在手机上开启5555端口:
执行这步的时候记得在手机上点击下"确定"。
6.
adb connect 10.42.0.78:5555
依然要在手机上点击"确定"。
此时通过adb devices可以看到adb列表中已经出现了新的设备:
7.
拔掉数据线。
8.
adb reconnect offline
这条命令将会强制未授权的设备重新链接。
9.
adb connect 10.42.0.78:5555
最后重新连接一波。
此时再查看所有设备:
可以看到已经授权成功。
此时可以利用run x再次运行投屏了:
无线投屏的延迟肯定是有的,不过亲测利用手机在四米之内开摄像头传输图像基本上没有延迟,,此时的画面延迟主要是手机性能造成的。