首先 iw list 看是否支持。如果支持,那就
iw dev wlan0 interface add p2p0 type __p2pdev
这样其实并不会多出一个叫 p2p0 的网络接口。iw dev 能看到多了个「Unnamed/non-netdev」设备。不执行这个也可以连接上 WLAN Direct,但是当前的 managed Wi-Fi 连接会断掉。执行之后再连接,managed 连接会持续,iw dev 里会有两个 Unnamed,不知道何故。另外这个 type __p2pdev
加上去了我就不知道怎么删除了。试了几个命令,结果搞得内核 oops 了……
然后是 wpa_supplicant 配置文件:
ctrl_interface=/run/wpa_supplicant_p2p ap_scan=1 device_name=起一个名字 device_type=1-0050F204-1 driver_param=use_p2p_group_interface=1
wpa_supplicant 跑起来。注意这里的接口名还是那个 managed 接口的。
wpa_supplicant -i wlan0 -c p2p_config.conf
然后 wpa_cli 连过去操作:
wpa_cli -p /run/wpa_supplicant_p2p
首先用 p2p_find 开启搜索。这时候对端设备能够看到自己了。使用 p2p_connect 对端MAC pbc go_intent=0 连接,在对端接受连接即可。go_intent=0 是让对方作为 group owner,这样对端 Android 才会提供 DHCP 服务(否则要本地提供了)。
然后就可以给自己添加 IP 地址了。此时是可以用 dhcpcd 的,然而直接跑的话它会抢走默认路由,所以知道地址范围之后手动加一个好了:
ip a add 192.168.49.22/24 dev p2p-wlan0-1
Android 设备的地址是 192.168.49.1。
之后就可以用 adb connect 然后 scrcpy 了。
PS: Android 很喜欢四十几的 IP 段呢。USB 网络共享是 192.168.42.129/24,Wi-Fi 网络共享是 192.168.43.1/24,而 WLAN Direct 是 192.168.49.1/24。不知道蓝牙网络共享是多少呢。
PPS: scrcpy 在我的 XZ2C 上运行完美,但是在 MIUI 10 上需要去开发者选项里开启选项「USB 调试(安全设置)」,否则会是「只读模式」,只能看,所有交互操作无效。