簡介
scrcpy 可以透過 USB 或是 TCP/IP 來投影或是控制 Android 裝置,且不需要 root 權限。目前支援 GNU/Linux、macOS、Windows 平臺。
特色是效能很好(30-60 fps)、支援高解析度(1920x1080 or above)、低延遲(35-70 ms)、可以經由 wifi 無線連接,且不需要安裝任何東西在手機上。
如果 chromecast 不算在內的話,是我目前使用過最方便好用的 android 投影方式。
專案網址
https://github.com/Genymobile/scrcpy
系統需求
可參考專案的 Requirements 說明:
- 你需要一台電腦,GNU/Linux, macOS, Windows 都可以
- 一台 Android 手機(Android 5.0 以上)
- 手機開啟 USB 偵錯功能
安裝
android tools 內含 adb (android debug bridge) 相關工具
sudo pacman -S android-tools
# 我使用 yay 來安裝 AUR 的軟體
sudo yay -S srcrpy
開始投影
步驟好像有點少,但順利的話到這邊已經可以投影了。
接上 USB,並且在手機上選擇 USB 用途爲 MTP 或 PTP(我的手機只有 PTP 可以選),選擇後應該會跳出「允許 USB 偵錯嗎?」的確認框,選擇「允許」。
接着在電腦上執行指令即可投影:
# 投影
scrcpy
# 全螢幕模式
scrcpy --fullscreen
# 調整方向
scrcpy --rotation 0|1|2|3
# 螢幕錄影
scrcpy --record path/to/file.mp4
如果你有多個設備:
# 列出設備 id
adb devices
scrcpy --serial [DEVICE_ID] # 可以簡寫爲 scrcpy -s [DEVICE_ID]
Troubleshooting
- no permissions
adb devices
顯示沒有權限,如以下訊息:
$ adb devices
List of devices attached
[DEVICE_ID] no permissions; see [http://developer.android.com/tools/device.html]
# 列出 usb 設備
lsusb
# 以下爲參考輸出
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 8087:0a2b Intel Corp. Bluetooth wireless interface
Bus 001 Device 004: ID 045e:0782 Microsoft Corp. Microsoft USB Optical Mouse
Bus 001 Device 003: ID 0f39:1083 TG3 Electronics K108D
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 021: ID 18d1:4ee4 Google Inc. Nexus/Pixel Device (tether+ debug)
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
找到手機的資訊:Bus 003 Device 021: ID 18d1:4ee4 Google Inc. Nexus/Pixel Device (tether+ debug)
記下 18d1:4ee4
,這兩個 ID 分別是 idVendor 以及 idProduct,接着來調整 udev 設定:
cd /etc/udev/rules.d
ls
# 名稱可能是 51-android.rules,沒有的話就自己新增一個
sudo vim 51-android.rules
加入以下:
# 1. [USER_NAME] 填入自己的 user name
# 2. idVendor 及 idProduct 填入自己手機的 id
# 3. MODE 爲權限設定
OWNER=="[USER_NAME]", SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="4ee4", MODE="0666"
reload 剛剛加上的設定:
# archlinux
sudo udevadm control --reload
# 如果是其他系統,也許要改用
sudo service udev restart
接着拔掉 usb 重新接上,執行以下指令即可:
sudo adb kill-server
sudo adb start-server
adb devices