自从用上 KDE Connect 来连接手机浏览手机内部存储之后就再也无法割舍了。可是办公室使用的无线网络(也许只是部分地)隔离了客户端,所以在办公室的时候笔记本和手机之间就无法发现对方了。想到的解决办法是用笔记本创建一个虚拟的无线热点(AP),然后手机连接这个热点来上网。在 Linux 系统上使用 create_ap 这个程序可以很快速地完成 AP 的创建和管理。
前面简单介绍了 create_ap 这个工具,这一部分算是继续介绍 create_ap 的使用。考虑到简洁的需要,就将这一部分单独分出来了。这样一来两篇博文都不算太长。
根据博主的需要,创建热点的要求很简单:在连接到互联网的同一个无线网卡上创建一个无线热点供手机连接来上网。但是还是要注意:这样的话该无线网卡的负荷就比较大了,速度也需要在这两个角色间均衡。
使用 create_ap 其实很简单,因为其默认配置(/etc/create_ap.conf)考虑了常用的场景。安装完成后只需要在命令行运行类似于下面的指令就可以了,
$ sudo create_ap wlp58s0 wlp58s0 MyAccessPoint MyPassPhrase
嗯,create_ap 需要 root 权限来运行;wlp58s0 是我的无线网卡的名称;后面两个就是要创建的无线热点的名称和密码了。
但是博主需要记录和介绍自己折腾的一点经验,所以就有了这篇博文。
硬件支持
在同一个无线网卡既要连接到路由器或热点来上网,又要让它当作 AP 来接受其它设备的连接,这个是需要硬件支持的。这种 AP 又叫做「软 AP」、「虚拟 AP」,详见 ArchLinux 上的介绍。
检查无线网卡是否支持 AP 模式,
$ sudo iw list | grep -C 5 "AP"
Supported interface modes:
* IBSS
* managed
* AP
* AP/VLAN
* monitor
* mesh point
* P2P-client
* P2P-GO
在输出中有 「* AP」 字样表示至少支持热点模式。
要让无线网卡在连接到一个无线热点的同时还开启自己的热点,就要看是否支持接口组合(interface combination)(也就是混合模式)。下面看网卡是否支持同时使用客户端(连接到无线网络)和 AP(虚拟一个无线热点)。
$ sudo iw list | grep -A 10 "interface combinations"
如果是,
interface combinations are not supported
则网卡不支持混合模式;如果是类似于,
valid interface combinations:
* #{ managed } <= 1, #{ AP, P2P-client, P2P-GO } <= 1, #{ P2P-device } <= 1,
total <= 3, #channels <= 2
则支持。上面 #channels <= 2 表示可以使用不同的信道给 VLAN 和 AP。
之前的 ThinkPad T420s 选配了 RTL8192ce 的无线网卡就不支持混合模式。但是不知道为什么在 Windows 7 下可以实现无线网上的同时开启热点。在 Windows 7 的命令行界面使用下面的指令即可,
netsh wlan set hostednetwork mode=allow ssid=cnzhx key=12345678
netsh wlan start hostednetwork
netsh wlan stop hostednetwork
netsh wlan show hostednetwork
当然目前在用的 ThinkPad T470s 选配了 Intel Dual Band Wireless AC(2×2) 8265 网卡,是支持混合模式的。
修改配置文件
为了让它自动运行,必须的参数需要直接放到配置文件 /etc/create_ap.conf 里。
按照上面的需求,至少需要修改下面的四个参数,
WIFI_IFACE=wlp58s0
INTERNET_IFACE=wlp58s0
SSID=cnzhx
PASSPHRASE=12345678
wlp58s0 是我的网卡名称。「WIFI_IFACE」是我们要创建 AP 的地方,「INTERNET_IFACE」是上网的通道。
其它参数可以不动。
创建系统服务文件
关于 systemd 系统服务的服务文件的说明可见 systemd.unit 文档。
前面介绍 create_ap 的时候提到了其自带的 create_ap.service 这个 systemd 系统服务文件的使用。在修改了默认的 create_ap 配置文件之后,将那个服务文件 create_ap.service 里的,
ExecStart=/usr/bin/create_ap
改成,
ExecStart=/usr/bin/create_ap --config /etc/create_ap.conf
也就是加上配置文件的调用。然后将这个服务文件复制到 /etc/systemd/system 路径下 即可启用它,
$ sudo systemctl enable create_ap.service$ sudo systemctl start create_ap.service
但是它只有在系统开机/重启的时候才起作用,而从休眠/睡眠中恢复的话则不起作用。本来想自己写这样的服务文件,但是经过测试发现有时工作有时不工作,所以暂时先不放上来了。等以后有机会了再接着弄,现在没有时间。忽然想到一个方法实现在休眠/睡眠后恢复这个服务的方法,简单到爆,惭愧啊。只需要新启用一个服务,让它在系统从休眠/睡眠中恢复后重启(restart)前面的 create_ap 服务即可。
假设新建服务名称为 create_ap_resume.service,服务文件内容如下,
[Unit]
Description=Resume create_ap service after resuming from hibernate/sleep
After=suspend.target
#After=hibernate.target
#After=hybrid-sleep.target
[Service]
Type=simple
ExecStart=/usr/bin/systemctl restart create_ap.service
KillSignal=SIGINT
Restart=on-failure
RestartSec=10
[Install]
WantedBy=suspend.target
#WantedBy=hibernate.target
#WantedBy=hybrid-sleep.target
上面的服务在从睡眠中恢复系统的时候可用,但是我没有测试过休眠(hybernate)/混合睡眠(hybrid-sleep)的情况。如果上面的不行,可以将上面对应的注释掉的行启用再试试看。比如休眠,对应的删除包含 hibernate.target 的两行前面的 # 号后保存并禁用后重新启用 create_ap_resume.service 即可。
对网络速度的影响
在同一个无线网卡上既要连接互联网又要创建虚拟热点供手机连接,肯定会影响网络速度。简单的测试表明在我的 Intel Dual Band Wireless AC(2×2) 8265 网卡上同时执行这两个任务会让我的网络连接速度降低一半。
我在办公室使用的 eduroam,没有启用虚拟 AP 的时候连接速度在 上测试的结果是下载 91.15 Mbps,上传 82.26 Mbps。而开启无线热点之后速度降低了。测试了两次,下行/上行速度分别是 42.88Mbps/36.31Mbps 以及 42.58Mbps/36.05Mbps,低于无 AP 时候的一半。
而在手机端测试的结果是,直接连接到 eduroam 的下/上行速度是 87.09Mbps/63.6036.05Mbps,连接虚拟 AP 的下/上行速度是 29.54Mbps/9.31Mbps。这个速度降低更严重,特别是上传速度降低得非常严重。而且从电脑访问手机文件的速度会受限于这两个速度。比如从手机复制文件到电脑上限速度就是手机连接虚拟 AP 的上行速度极限(这里是 9 Mbps 也就是约 1MB/s)。
考虑到 MTP 协议(用 USB 线缆直连手机)在 Linux 上的不稳定,KDE Connect + 虚拟 AP 还是首选。鉴于对速度的影响,也许还是即用即开比较好,使用系统服务一直开启这个真的是有些过了。©
linux无线网卡模拟ap 在 openSUSE 上使用 create_ap 创建虚拟 WiFi 热点来方便使用 KDE Connect 连接手机...