我有一台配备 Broadcom BCM43228 的 HP ProBook 650,我在其上全新安装了 Ubuntu 20.04。
在设置中启用非免费 WiFi 驱动程序后,一切都正常。除了当我将笔记本电脑从睡眠状态唤醒时:WiFi 连接大约需要 30 秒。
在 18.04 上它几乎是即时的,并且重新启动后(在 20.04 上)它立即连接。
我/var/log/syslog
发现,首先扫描似乎失败,然后大约 30 秒内什么都没有发生,最后它顺利连接。
我已经尝试安装 broadcom-sta-dkms,但没有什么变化。
在我看来,系统似乎在卡准备好之前尝试连接,但这只是一种感觉......
我搜索了论坛,但只在 12.04 或更早的版本中发现了类似的问题。由于它在 18.04 中可以正常工作,所以再次出现同样的问题会很奇怪...
我可以尝试什么想法或方法来改善这种行为?
答案1
好的,我找到了一个解决方案,它基于如何防止 Wi-Fi 挂起后进入睡眠状态
/lib/systemd/system-sleep/wlwifi-reset
我创建了一个包含以下内容的文件:
#!/bin/sh
# NAME: /lib/systemd/system-sleep/wlwifi-reset
# DESC: Resets Broadcom WiFi after suspend to speed up reconnect
# DATE: Apr 28, 2020
MYNAME=$0
restart_wifi() {
/usr/bin/logger $MYNAME 'restart wifi to speed up reconnect'
/sbin/modprobe -v -r wl
/sbin/modprobe -v wl
/usr/bin/logger $MYNAME 'restart wifi done'
}
/usr/bin/logger $MYNAME 'case=[' ${1}' ]'
case "${1}/${2}" in
hibernate|suspend|pre*)
;;
resume|thaw|post*)
restart_wifi;;
esac
使其可执行:
sudo chmod a+x /lib/systemd/system-sleep/wlwifi-reset
现在,当笔记本电脑唤醒时,wl 内核模块会重新加载,重新连接时间只需几秒钟!
不确定这是否是最好的解决方案,以及为什么它在 18.04 上开箱即用...如果有人有更好的解决方案:请随时分享。
答案2
我遇到了类似的问题,我找到的所有解决方案都无法完全解决问题。对我来说,从暂停状态恢复后最多需要 5 分钟才能连接 WiFi。我最初尝试在 中编辑配置/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
,但发现它没有任何作用。经过进一步挖掘,我找到了解决方案让我们来看看 FOSS - Ubuntu 挂起后 WiFi 无法使用,它会触发网络管理器服务在恢复时重新启动,但网络管理器服务重新启动后仍然需要整整一分钟。
但我注意到,使用重新启动网络管理器sudo service network-manager restart
会导致它在 30 秒到 1 分钟内连接。
因此,在尝试了设置并做了更多研究之后,我找到了以下解决方案。
解决方案
打开终端(CTRL++ )并输入,然后编辑它ALT,使其内容如下所示:T
sudo nano /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
[connection] wifi.powersave = 1
CTRL按+保存文件X,然后按ENTER保存到当前文件路径。
输入以下命令,创建一个
default-wifi-powersave-off.conf
内容与以下内容相同的文件default-wifi-powersave-on.conf
sudo cp /etc/NetworkManager/conf.d/default-wifi-powersave-on.conf \ /etc/NetworkManager/conf.d/default-wifi-powersave-off.conf
/lib/systemd/system-sleep/wififix
使用以下命令创建并编辑新脚本sudo nano /lib/systemd/system-sleep/wififix
添加以下内容
wififix
:#!/bin/sh # command line input we're expecting: # # wififix <pre|post> <suspend|hybrid-sleep> set -e if [ $2 = "suspend" ] || [ $2 = "hybrid-sleep" ]; then case $1 in pre) true ;; post) # After 0.1 seconds, restart the network manager service sleep 0.1 && service network-manager restart ;; esac fi
wififix
按CRTL+保存X,然后按ENTER。然后使用以下命令使文件可执行sudo chmod +x /lib/systemd/system-sleep/wififix
wififix
通过输入命令来测试脚本sudo /lib/systemd/system-sleep/wififix post suspend
它应该在终端上停留一瞬间,然后您会看到 WiFi 状态指示器消失,然后快速重新出现并连接。
解释
只是一个免责声明,我是一个偶尔使用 Ubuntu 的 PHP 开发人员,而不是 Linux/Ubuntu 专家。
wififix
中的脚本是/lib/systemd/system-sleep/
此处的主要修复。它强制网络管理器服务在从挂起状态恢复后 0.1 秒内重新启动。这总是让我的连接速度比我让系统自行重新连接/重新启用时更快。
创建这些文件的目的/etc/NetworkManager/conf.d/default-wifi-powersave-*.conf
是为了确保没有行为在进入和退出暂停时使用(看这里)。我发现,这样一来,WiFi 在网络管理器重启后启动和运行的速度会更快,因为它不会尝试更改无线网卡或其他任何地方的任何设置(这可能会导致问题,具体取决于.conf
中的其他设置文件/etc/NetworkManager/
)。如果没有这些脚本,连接 WiFi 仍然需要一分钟左右的时间,但有了它们,现在只需要几秒钟,而且我通常在输入密码之前就连接上了!