如何设置WiFi驱动程序的偏好,使其优先选择5 GHz频道而不是2.4 GHz。

目前我在大学的一座新建筑里。在这栋建筑里,我的WiFi经常断开然后重新连接。这真的很烦人,因为它经常发生。

现在巧合的是,有几个技术人员在这里四处奔波,询问每个人的WiFi是否正常。我告诉他们我的WiFi经常断开然后重新连接。他们发现我的WiFi一直在2.4 GHz频道和5 GHz频道之间切换。他们问我是否可以访问无线网卡的驱动程序设置。不幸的是,我不知道如何在Linux或Windows中进行此操作。而且不幸的是,他们只知道Windows的解决方案 xD。

所以我希望有人告诉我如何告诉我的WiFi应该保持在5 GHz网络上,而不是断开连接并切换到2.4 GHz频道?

-编辑-

@arhimed,首先感谢你的帮助。

我刚刚尝试了你说的方法。对我来说有些不同。当我更改设置并选择仅使用5 GHz频段时,似乎无法保存设置。

"网络连接" -> "选择适当的无线网络并点击编辑" -> "在无线选项卡中" -> "将模式从基础设施更改为自组网" -> "选择5 GHz频段"

Wireless connection settings panel

然而,当我想将模式从基础设施更改为自组网时,“保存”按钮告诉我需要进行身份验证。但是,我没有弹出窗口要求输入密码。使用sudo gnome-control-center也没有帮助,我仍然无法保存。此外,在终端中出现了一个错误:
** (nm-connection-editor:5577): WARNING **: 无效的设置:无线安全性与自组网模式不兼容
希望这些信息对您有所帮助,以便进一步协助我。

1如果可能的话,请考虑关闭您其他一些未解决的问题,通过选择最佳答案(如果有的话)。请考虑哪些答案对您有帮助并需要点赞。我们需要用户维护他们的问题,以便该网站能成为下一个遇到类似问题的人的有效工具。有关最佳实践的更多详细信息,请阅读有关提问的常见问题解答。 - fossfreedom
1我没有尝试过,但我希望这会对您有所帮助。因此,请转到网络管理器->编辑连接,无线连接->选择您的网络->更改...将“模式”设置为“特殊”,将频率设置为5GHz。 - Viktor K
@arhimed 我在我的主贴中回复了你。希望你能根据这些新信息进一步帮助我。 - WG-
嗯,那样对你没有帮助。你试过通过终端连接网络了吗? - Viktor K
不,因为我不知道如何做。我发现关于这个的所有信息都很难理解。 - WG-
这里可能有一些信息!http://portforward.com/ - Alvar
那是一个关于如何在不同类型的路由器上转发端口以进行游戏等的网站,还有基本的Wi-Fi设置。无法帮助我修复Wi-Fi连接问题,例如更改设置以优先使用5 GHz而不是2.4 GHz。 - WG-
这里的答案有点过时,在Ubuntu 20中很简单:运行nm-connection-editor,点击您的WiFi,在“模式”中选择2.4Ghz。 - Plumpie
相关链接:https://askubuntu.com/questions/202288/how-do-i-require-use-of-the-5-ghz-band-when-connecting-to-a-wireless-n-access-po - Gabriel Staples
还有相关的内容:https://bbs.archlinux.org/viewtopic.php?id=250872。其中包含了一个看起来很有用的命令`nm-connection-editor`,可以打开一个图形化配置工具(在Ubuntu 20.04上似乎不是默认的)。 - Gabriel Staples
5个回答

运行:
$ iwlist wlan0 scanning | grep -C3 <name of your network>

你应该找到2个网络的条目,例如:
Cell XX - Address: 11:11:11:11:11:11 // This will be different in your machine
ESSID: "name of your network" // This will be different on your machine
Protocol: IEEE 802.11bgn
Mode: Master
Frequency: 2.437 Ghz

--

Cell XX - Address: 22:22:22:22:22:22 // This will be different on your machine
ESSID: "name of your network // This will be different on your machine
Protocol: IEEE 802.11AC
Mode: Master
Frequency: 5.18 Ghz
  • 5Ghz网络的BSSID,在此示例中为:22:22:22:22:22:22
  • 2.4 Ghz网络的BSSID,在此示例中为:11:11:11:11:11:11

现在你要做的是:

  1. 点击'网络连接'
  2. '编辑连接...'
  3. [选择您的网络连接](可能会有2个条目,任意一个都可以)
  4. 点击“编辑”
  5. 转到'Wi-Fi'或'无线'选项卡
  6. 点击BSSID下拉菜单
  7. 选择与5 GHz网络匹配的BSSID(在此示例中为22:22:22:22:22:22)
  8. 切换到'常规'选项卡
  9. 确保选中标记为“当可用时自动连接到此网络”的复选框
  10. 将连接名称(不是SSID)重命名为'您的网络名称'_AC
  11. 点击保存
  12. 如果在您的网络连接列表中有2个条目是'您的网络名称',请继续执行下一步,否则进行最后一步。
  13. 点击另一个'您的网络名称'条目
  14. 点击“编辑”
  15. 转到'Wi-Fi'或'无线'选项卡
  16. 点击BSSID下拉菜单
  17. 选择与2.4 GHz网络匹配的BSSID(在此示例中为11:11:11:11:11:11),或者如果有多个其他次要接入点,则将BSSID留空
  18. 切换到'常规'选项卡
  19. 取消选中标记为“当可用时自动连接到此网络”的复选框
  20. 将'连接名称'设置为[您的网络名称]_N
  21. 点击保存...
  22. 断开与您的网络的连接,然后重新连接
你现在应该已经连接到了5Ghz的网络,如果要连接到2.4Ghz的网络,你需要明确地执行相反的步骤。

谢谢,这真的非常有帮助!在Ubuntu 20.04上也可以使用。 - Mike Chelen
4-C3的上下文行不足以获取包含BSSID的Cell xx行。我必须使用-C5或更高的值来获得该行。例如:iwlist wlan0 scanning | grep -C5 my_network_name - Gabriel Staples
2非常感谢你提供如此详细的答案。只是想指出你的网络接口可能有不同的命名方式。在我的情况下,它不是wlan0,而是wlx0013eff40041。要获取真实的名称,你可以使用iwconfig命令。 - faiwer
"Network Connections"在哪里? - tparker
@tparker - 如果你在顶部栏上有一个Wifi图标(对我来说是在右边),点击它,你会得到一个子菜单,其中包含部分“Wi-Fi网络”的列表,以及一些命令。从这些命令中,点击“编辑连接...”,你将进入一个网络连接窗口。或者直接从终端输入nm-connection-editor。另外,在我的Ubuntu 22上,iwlist不会报告BSSID - 但是在网络连接条目中有一个下拉菜单显示BSS。 - sdbbs
接口不支持扫描。 - Line

方法一 — 适用于家庭使用单个无线路由器

首先,在“基础设施”下连接到您的基本Wi-Fi网络。接下来,点击BSSID。当您点击那个箭头时,您当前连接的BSSID应该会出现。这个功能可以防止您的计算机切换网络。2.4 GHz和5 GHz。


方法二 — 在像大学校园或公共WiFi这样的具有多个接入点的网络上漫游

注意:如果您使用了上述方法,开始之前需要执行相反的操作。确保BSSID未设置为任何内容(为空白),以便您可以使用多个接入点并在网络中漫游。

首先,您需要编辑与您的网络对应的系统连接文件。在本示例中,我将使用一个名为“咖啡店”的网络。

sudo nano /etc/NetworkManager/system-connections/coffee-shop

现在,在[wifi]部分下,将band字段编辑为以下内容(如果band=未列出,可以在[wifi]的下一行插入):

band=a

这将设置网络仅使用5 GHz频段。如果您想使用2.4 GHz频段,请使用band=bg

编辑完成后,按下CTRL+o,然后按下ENTER保存文件,再按下CTRL+x退出nano。

最后,重新启动network-manager以应用更改:

sudo systemctl restart network-manager

点击此处获取更多信息。

注意:此设置不排除您使用无线N或无线C(所以不用担心),此功能仅用于选择2.4或5 GHz频率。


如果同时勾选了2.4 GHz和5 GHz网络连接的“当此网络可用时自动连接”复选框,这个方法就行不通了,这也是问题的关键所在。 - Marcel Valdez Orozco
1@MarcelValdezOrozco 我相信解决那个问题的方法是取消勾选2.4网络的框。 - mchid
是的,没错。 - Marcel Valdez Orozco
当你的公司/学校在多个建筑物和楼层上有100多个接入点时,这种方法并不真正有效... - Nathan J.B.
@mchid,不确定你是从哪里得到这个想法的。如果我将我的无线连接限制在一个MAC地址上,当我去到另一个建筑物或不同楼层(那个MAC地址不可用的地方),我将无法连接,直到我更新我的网络设置以接受不同的MAC地址(当我回到我的办公桌时,我还需要再次更新)。而且我还没有提到如何找到哪些MAC ID是5GHz和2.4GHz的(下拉列表中列出了数百个MAC ID,不仅仅是你提到的两个)。 - Nathan J.B.
@NathanJ.Brauer 这取决于您使用的network-manager版本。在14.04上,您可以轻松使用nm-tool命令列出本地BSSIDs、它们的强度和频率。根据信号强度,很容易看出应该选择哪一个。使用grep将输出缩小到只包括相关结果,例如:nm-tool | egrep 'Freq 5.......' 如果您使用的是15.04,则可以从此处下载旧版network manager:http://security.ubuntu.com/ubuntu/pool/main/n/network-manager/network-manager_0.9.8.8-0ubuntu7.1_amd64.deb 提取deb并且nm-tool位于usr/bin/nm-tool下。 - mchid
@NathanJ.Brauer,为了明确起见,请不要安装旧版本的network-manager,只需下载它,从中提取nm-tool,然后丢弃其余部分。 - mchid
@NathanJ.Brauer 同时,要明确一点,为您使用的每个应用程序设置一个新的独立配置文件,而不是不断更新现有的配置文件,并确保使用“自动连接到此网络”的选项。这样,您就可以更加自由地漫游。同时,需要毫无疑问地删除任何现有的2.4Ghz配置文件。 - mchid
哎呀,看起来如果我们可以全球禁用2.4GHz的话,可能会更容易一些。 - Nathan J.B.
@NathanJ.Brauer Android是我听说过的唯一一个具备这种功能的操作系统,似乎这也是其他主流操作系统的一个令人沮丧的问题:http://superuser.com/questions/362366/does-it-make-sense-to-keep-different-ssids-for-2-4ghz-and-5ghz-wireless-networks。而且,Windows的解决方案似乎与此处描述的相同,即删除所有2.4Ghz网络的现有配置文件,并将5Ghz网络设置为自动连接:http://www.tomshardware.com/answers/id-2156077/forcing-5ghz-band-windows.html。 - mchid
2对我来说起作用了(通过BSSID方法强制使用5GHz)。我以为Linux的无线网卡驱动程序会透明地支持同时使用双频段,但看来并非如此。 - kchoi
1还可以强制使用2.4Ghz频段,这让我的信号范围显著提升。 - Jesse Glick
1F@JesseGlick 是的,低频信号更容易穿透固体物体,所以2.4GHz的覆盖范围要好得多。然而,几乎所有的无线干扰都存在于接近2.4GHz的频率附近,所以5GHz有一个优势,那就是空中信道相对较少拥挤和噪音较少。 - mchid
谢谢,这个方法在我使用的Ubuntu 20.04上也有效! - Mike Chelen
@NathanJ.B. 我终于找到了一个方法来实现这个。请参考上方附加的说明。 - mchid

将“Ad-hoc”选项更改为其他选项,比如“基础设施”(或类似的菜单选项)。基础设施无线是您典型的“许多设备连接到一个单一路由器”的方法,而ad-hoc无线则适用于没有集中式路由器的“网状”无线设备。
很可能是处于ad-hoc模式导致了您的问题(这也可以从您提供的错误信息中进一步证明)。

1谢谢您的回复。此外,我不在Ad-hoc模式中。选项是基础设施模式。在基础设施模式下,Wi-Fi频段一直在2.4 GHz和5 GHz之间切换。我想尝试将设置放在Ad-hoc模式中,因为在该模式下我可以选择要使用的频段。在基础设施模式下,我无法选择频段。 - WG-
2好的,那么...Ad-hoc模式的问题在于它与WPA和WPA2安全协议不兼容(这就是你遇到错误的原因)。通常,频道/频率由路由器设置。你可以使用iwconfig手动设置频道。在终端中尝试以下命令:iwconfig eth0 freq 5G - YellowApple
非常感谢。我会在周一去大学的时候尝试一下。这确实是路由器上的问题,但只发生在我在大学某栋楼里使用路由器的时候。而且那里的IT人员不会专门为我来配置所有的路由器 ;) - WG-
嗯,我偶尔仍会断线,但我感觉比以前少多了。 - WG-
2我应该纠正一下我的评论... eth0 通常指的是有线网络连接,所以请尝试使用 iwconfig wlan0 freq 5G。对此我表示抱歉。 - YellowApple
是的,你完全正确。我也应该提到,我确实已经把它改成了正确的名字 ;-). - WG-
2019年打来电话:iwconfig wlan0 freq 5 - Ufos

这可能有效,也可能无效。根据我的经验,它是不一致的。在网络管理器设置中,您可以手动输入AP的BSSID。您可以使用名为“WIFI分析器”的安卓应用程序找到BSSID。您还可以使用其他基于Linux的WiFi监控工具,如Kismet,但我发现使用安卓应用程序是最简单的方法。如果您不知道,5Ghz AP具有更高的信道号(超过13)。现在,不一致性在于,根据发行版的不同,BSSID选择框可能会自动填充,或者您必须手动输入。无论哪种方式,输入您希望连接的BSSID,并将网络名称设置为您可以记住的内容,例如“U-WIFI-5Ghz”。不幸的是,有时候网络会出现(您可以连接到特定的AP),有时候即使您知道AP就在附近也不会出现。

1你还可以通过使用以下命令之一来查找:nm-tooliwlist scan | grep -B 4 "Frequency:5" | grep "Address:"。你也可以使用iwlist scan | grep -B 4 "Frequency:5"。你还可以缩小第一个命令的结果范围:nm-tool | egrep 'Freq 5.......'。你甚至可以在你的bashrc文件中设置别名来调用其中任何一个命令,只需使用一个单独的命令即可。 - mchid
使用命令iwlist scan | grep -B 4 "Frequency:5",然后在wifi->我的连接->编辑->身份验证->BSSID中找到我的BSSID。 - jason m

在终端(CTRL+ALT+T)中逐行运行以下命令:
echo "options iwlwifi 11n_disable=1" | sudo tee /etc/modprobe.d/iwlwifi.conf
sudo modprobe -rfv iwldvm
sudo modprobe -rfv iwlwifi
sudo modprobe -v iwlwifi

这是做什么用的?11n_disable选项可以禁用802.11n功能。将其添加到...

/etc/modprobe.d/iwlwifi.conf

使更改在重新启动后持久化(因为它将成为模块配置的一部分)。modprobe -rfv命令正在删除内核模块iwldvmiwlwifi,最后一行modprobe -viwlwifi添加回去。
要了解这些内核模块是做什么的,可以运行modinfo | grep description,它会告诉你以下内容: iwlwifi是Linux的Intel(R)无线WiFi驱动程序(通用Intel驱动程序) iwldvm是Linux的Intel(R)无线WiFi Link AGN驱动程序(更具体的驱动程序)
其他建议
现在,请检查路由器的设置。首选WPA2-AES;不要选择任何WPA和WPA2混合模式,当然也不要选择TKIP。其次,如果您的路由器支持N速度,在2.4 GHz频段中,使用20 MHz的信道宽度可能会更好,而不是自动选择20/40 MHz。我还发现,固定信道(1、6或11)比自动信道选择更可靠。在进行这些更改后,您可能需要重新启动路由器。