我昨天在 Unix-Linux 板上提出了一个问题,关于如何以一种不太不稳定的方式将 Linux 笔记本电脑连接到我的个人 iPhone 热点。除了我自己的解决方法之外,它还没有真正得到真正的答案。
但在这里,我想在更理论的层面上提出这个问题。我熟悉的所有操作系统,主要是多种 Linux 以及 Windows,都使用我所谓的“扫描/选择/连接”模型来建立 WiFi 连接。所有这些系统的用户界面都有某种方式将可用 Wifi 网络列表(从扫描过程编译)显示在屏幕上,邀请用户从中选择,然后提示输入凭据(密码),如果经过验证, 允许并建立连接。这无疑是绝大多数 wifi 连接用户交互的理想选择。
但是,请考虑 iPhone 个人热点用例。用户同时拥有一部 iPhone 和一台运行某些操作系统(比如 Linux)的笔记本电脑,但它也可能是 Windows。用户经常需要在没有 wifi 的环境中使用他们的 iPhone 作为笔记本电脑的互联网提供商。
在这个用例中,用户拥有两台设备。他们知道他们的 iPhone 热点的 ID 和密码。应该可以编写某种 shell 脚本(或 Windows 中的批处理文件)来提供这两个数据项,并告诉他们的系统将其网络从它试图指向的任何位置(如果没有 wifi,则失败)切换到 iPhone ,用户知道它就在附近并且正在运行。在这种情况下不需要扫描,这会使整个过程更加令人沮丧。在我的场景中,连接尝试将成功或失败并相应地报告。
我在互联网上搜索了这个用例的普遍接受的答案,但没有找到任何权威的答案。我想知道为什么不。有人可以为我解释为什么这通常不发布,或者指出我可以回答的地方吗?
一个相关的问题是:如果一个IPhone热点没有出现在试图连接它的计算机的扫描列表中,那么任何这样的脚本在尝试时是否会保证失败?
这是可能的,但仍然涉及扫描,因为计算机必须找出网络可用的频率。
例如,NetworkManager 将每个 Wi-Fi 网络保存为“连接配置文件”,您可以随时激活它,例如使用
nmcli con up <name>
. 但是,无论何时这样做,它仍然需要搜索所有通道以查找提供该 SSID 的任何接入点——其中可能有多个,和/或它们可能具有与上次不同的功能。(您的热点每次启用时总是会找到一个新频道,因此计算机无法记住。)但是,它可能仍然可以实现更快连接的目标,因为 NetworkManager 在寻找新网络之前会先断开与旧网络的连接。通常,当您在一个特定通道上积极使用网络时,Wi-Fi 适配器不能过于激进地扫描其他通道上的网络,因为它无法在此期间发送/接收数据(参见例如各种帖子游戏玩家询问如何禁用后台扫描,因为它们会导致意外延迟)——它需要检查很多通道,一次一个。这至少是可用网络出现在列表中速度缓慢的部分原因。(话虽如此,在当前版本的 GNOME 中打开网络列表确实会触发立即扫描——但“nmcli”等效项不会。)