11
8
2018
8

与 Android 进行 WLAN Direct 连接

本文来自依云's Blog,转载请注明。

首先 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 调试(安全设置)」,否则会是「只读模式」,只能看,所有交互操作无效。

参考资料

Category: 网络 | Tags: linux 网络 Android | Read Count: 27317
anonymous 说:
Nov 09, 2018 02:39:31 AM

> PPS: scrcpy 在我的 XZ2C 上运行完美,但是在 MIUI 10 上是「只读模式」,只能看,所有交互操作无效。

https://github.com/Genymobile/scrcpy/blob/master/FAQ.md#mouse-clicks-do-not-work

Avatar_small
依云 说:
Nov 10, 2018 05:39:57 PM

原来是这样,感谢!

Arch 说:
Nov 15, 2018 03:12:36 PM

依云大佬,请问下。Linux桌面系统下,笔记本带独显和集显,默认只用到了集显,平时一直用集显开发观察了下速度没什么影响,我以后买笔记本只买集显,CPU和内存尽量配到上限是否就行?现在笔记本带一个GTX 1050一直没有用上在笔记本内吃灰。N卡驱动不想打(里面坑太多怕弄坏系统) ,我不在linux笔记本上打游戏和渲染。特地咨询做下次更换笔记本前提准备。把独显的价钱用到CPU和内存上。多谢。

Avatar_small
依云 说:
Nov 15, 2018 08:22:12 PM

是啊。我的双显卡的独显也很少用得上。之前我跑火狐还用它的,后来启用 webrender 了,然后用独显会崩。现在只有 minecraft 能用上了。

不过现在不容易买到只有集显的本子了吧。另外独显还可以用来跑机器学习什么的。我的N卡用大黄蜂也没出什么问题。

zbinlin 说:
Nov 17, 2018 09:42:30 PM

试了下,在我这边不需要添加新的网络接口那一步,直接使用 `wpa_cli` 就可以创建并连接成功了,但发现不太好用(不知是不是我的网卡出的问题,因为之前经常需要重连)。只有第一次连接,电脑端是作为 Group Client,之后的连接都是作为 Group Owner(即便使用了 `go_indent=0` 参数)。

BTW: p2p_cancel 或 p2p_group_remove 不知能不能删除那个 `type __p2pdev`

>>> 使用 p2p_connect 对端MAC pdc go_intent=0 连接,在对端接受连接即可。
这里有个 typo,应该是 pbc 的。

Avatar_small
依云 说:
Nov 18, 2018 12:45:27 PM

我后来又尝试了连接到 XZ2C,也遇到了一堆问题:

1. pbc 不能用,只能去手机上输入 pin
2. 记住之后因为输入不了 pin 就连不上了
3. managed 总是会断开

这东西文档资料少,遇到莫名其妙的问题就没办法了 ¯\_(ツ)_/¯

zbinlin 说:
Nov 18, 2018 01:26:51 PM

这里有些资料文档,可以去看下

https://w1.fi/cgit/hostap/plain/wpa_supplicant/README-P2P
https://w1.fi/wpa_supplicant/devel/p2p.html
https://w1.fi/wpa_supplicant/devel/ctrl_iface_page.html

理发计划 说:
Aug 08, 2019 07:39:07 PM

您好依云先生:
我想在Android P系统的 命令行上 连接wifi但是确实不会弄。
可以指点下吗谢谢!


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com