Ubuntu 14.04 在恢复后无法使用无线网络。

【更新】:
在Kubuntu中存在相同的问题,并以相同的方式解决。
【已解决】:
通过应用以下命令nmcli nm,我得到了以下结果:
在暂停之前
RUNNING         STATE           WIFI-HARDWARE   WIFI       WWAN-HARDWARE   WWAN      
running         connected       enabled         enabled    enabled         enabled  

如你所见,状态已连接,其余部分已启用并运行。
暂停后。
RUNNING         STATE           WIFI-HARDWARE   WIFI       WWAN-HARDWARE   WWAN      
running         asleep          enabled         enabled    enabled         disabled

正如你所见,系统正在休眠,这意味着我们亲爱的网络管理员还在打盹,所以请使用以下命令行解决:
sudo nmcli nm sleep false
这会让网络管理器醒过来。 要使此变更永久生效:
/etc/pm/sleep.d创建一个脚本,包含以下内容(别忘了将脚本标记为可执行):

#!/bin/sh

case "${1}" in
        resume|thaw)
        nmcli nm sleep false
                ;;
esac

感谢this

原始问题:

我刚刚下载了Ubuntu 14.04并安装在我的笔记本电脑上:ASUS X61SL,配备Intel P8400 Core2Duo x64处理器。
当我关闭盖子时,系统会进入暂停状态,但是当我再次打开盖子并恢复时,无线网络不会被激活(整个网络都被禁用),而且当我选择“启用网络”时没有任何反应。
这是关于我的无线适配器的信息:

$ lspci | grep -i wireless
02:00.0 Network controller: Qualcomm Atheros AR928X Wireless Network Adapter (PCI-Express) (rev 01)  

这个问题在Ubuntu 13.04、Linux Mint Debian Edition或Debian 7 wheezy(GNOME或KDE)中不存在。

编辑:进行了一些测试,结果如下:
该问题影响我的无线和有线网络。
注意:我需要在grub中添加pci=nomsi行才能启动。
手动注销、暂停、恢复、登录后一切正常。
直接暂停登录时会出现问题。
锁定和暂停会导致与直接暂停相同的问题。
此外,这个问题显然也影响了注销功能:如果你从unity面板的用户菜单中选择注销,那么你就不能注销,但如果你使用命令行gnome-session-quit --logout,那么你就可以注销。
现在使用lshw -C network输出:
正常(完全功能的网络):

  *-network               
       description: Ethernet interface
       product: 191 Gigabit Ethernet Adapter
       vendor: Silicon Integrated Systems [SiS]
       physical id: 4
       bus info: pci@0000:00:04.0
       logical name: eth0
       version: 02
       serial: 00:24:8c:1e:f8:53
       size: 10Mbit/s
       capacity: 100Mbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=sis190 driverversion=1.4 duplex=half latency=0 link=no multicast=yes port=MII speed=10Mbit/s
       resources: irq:19 memory:fddfcc00-fddfcc7f ioport:cc00(size=128)
  *-network
       description: Wireless interface
       product: AR928X Wireless Network Adapter (PCI-Express)
       vendor: Qualcomm Atheros
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: wlan0
       version: 01
       serial: 00:15:af:e2:13:db
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=ath9k driverversion=3.13.0-24-generic firmware=N/A ip=6.6.6.8 latency=0 link=yes multicast=yes wireless=IEEE 802.11bgn
       resources: irq:16 memory:fdff0000-fdffffff

恢复后("/etc/pm/config.d" 不包含 "unload_modules"):

 *-network DISABLED      
       description: Ethernet interface
       product: 191 Gigabit Ethernet Adapter
       vendor: Silicon Integrated Systems [SiS]
       physical id: 4
       bus info: pci@0000:00:04.0
       logical name: eth0
       version: 02
       serial: 00:24:8c:1e:f8:53
       size: 10Mbit/s
       capacity: 100Mbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=sis190 driverversion=1.4 duplex=half latency=0 link=no multicast=yes port=MII speed=10Mbit/s
       resources: irq:19 memory:fddfcc00-fddfcc7f ioport:cc00(size=128)
  *-network DISABLED
       description: Wireless interface
       product: AR928X Wireless Network Adapter (PCI-Express)
       vendor: Qualcomm Atheros
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: wlan0
       version: 01
       serial: 00:15:af:e2:13:db
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=ath9k driverversion=3.13.0-24-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11bgn
       resources: irq:16 memory:fdff0000-fdffffff

当我按照这里的建议将文件unload_modules添加到目录"/etc/pm/config.d"中后,注销、挂起、恢复然后登录,网络工作正常,但我无法连接到我的无线网络。
再次运行lshw -C network命令的结果如下("/etc/pm/config.d"包含"unload_modules"):
 *-network DISABLED      
       description: Ethernet interface
       product: 191 Gigabit Ethernet Adapter
       vendor: Silicon Integrated Systems [SiS]
       physical id: 4
       bus info: pci@0000:00:04.0
       logical name: eth0
       version: 02
       serial: 00:24:8c:1e:f8:53
       size: 10Mbit/s
       capacity: 100Mbit/s
       width: 32 bits
       clock: 33MHz
       capabilities: pm bus_master cap_list ethernet physical tp mii 10bt 10bt-fd 100bt 100bt-fd autonegotiation
       configuration: autonegotiation=on broadcast=yes driver=sis190 driverversion=1.4 duplex=half latency=0 link=no multicast=yes port=MII speed=10Mbit/s
       resources: irq:19 memory:fddfcc00-fddfcc7f ioport:cc00(size=128)
  *-network DISABLED
       description: Wireless interface
       product: AR928X Wireless Network Adapter (PCI-Express)
       vendor: Qualcomm Atheros
       physical id: 0
       bus info: pci@0000:02:00.0
       logical name: wlan0
       version: 01
       serial: 00:15:af:e2:13:db
       width: 64 bits
       clock: 33MHz
       capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical wireless
       configuration: broadcast=yes driver=ath9k driverversion=3.13.0-24-generic firmware=N/A latency=0 link=no multicast=yes wireless=IEEE 802.11bgn
       resources: irq:16 memory:fdff0000-fdffffff

"unload_modules" 的内容如下:
SUSPEND_MODULES="$SUSPEND_MODULES ath9k"
SUSPEND_MODULES="$SUSPEND_MODULES sis190"

'ath9k' 是我的无线模块,'sis190' 是我的以太网模块。


我在状态上设置了断线而不是睡眠,我该如何解决这个问题?谢谢。 - Luigi Tiburzi
暂停系统,然后恢复它。这样出人意料地解决了WiFi问题!对我来说有效(在华硕笔记本上的Ubuntu 14.04 LTS x64)。 - Nagendra Rao
可能是挂起后网络问题的重复问题。 - bain
11如果你解决了自己的问题,应该发布一个答案,而不是把答案包含在你的问题中。 - Duncan Jones
@Duncan 不好意思 :) - Ossama Nasser
3这个问题还没有官方的修复吗?根据阅读错误报告来看,没有。但是这非常令人惊讶,因为似乎影响了很多人... - Augustin Riedinger
在我的旧笔记本电脑Asus X61SL上,存在这个问题。但在我的新笔记本电脑Dell Inspiron 15R上,这个问题并不存在。显然,这与硬件有关。 - Ossama Nasser
每次我都得手动连接到代理服务器。唉,重启路由器(如果可能的话)顺便也有帮助。 - Rápli András
5命令 nmcli nm 抱怨说:对象 'nm' 未知 - Alireza
我也是,Object 'nm' is unknown。@Alireza 你找到解决办法了吗? - umpirsky
1@umpirsky 试试 nmcli general status - rsht
@罗曼 $ nmcli general status 状态 连接状况 无线硬件 无线网络 移动宽带硬件 移动宽带 已连接 完整 已启用 已启用 已启用 已启用 - umpirsky
@umpirsky 是的,我也有类似的结果。我认为这意味着你的WiFi故障原因与OP的不同,上面的解决方案对你可能没有帮助。在我的情况下,重新启动网络管理器(sudo service network-manager restart)有帮助,所以我建议你尝试一下。如果这对你有用,请告诉我。 - rsht
是的,那个有帮助,我在下面的答案中找到了。谢谢。 - umpirsky
我偶尔会遇到这个问题,但是当它发生时,我没有解决的办法,所以只能重新启动。网络应该是如此基本的功能,希望在后续版本的Ubuntu中能够自动化/解决这个问题,因为这真的很糟糕。 - matanster
在我的Kubuntu 16.04.1上可以工作。 - Kwaadpepper
5个回答

上述答案在14.10版本对我无效。经过一番试错,最终我得到了以下解决方法,
#!/bin/sh

case "${1}" in
  resume|thaw)
    nmcli r wifi off && nmcli r wifi on ;;
esac

把这段代码放在/etc/pm/sleep.d/10_resume_wifi里面, 然后给它加上可执行权限:sudo chmod 755 /etc/pm/sleep.d/10_resume_wifi, 问题应该会立即得到解决。

1这对我在15.04上解决了问题。 - STW
睡觉前为什么不关掉电源? - Petr Gladkikh
2‘r’是什么意思?我收到了“错误:对象‘r’未知。”这对我来说似乎有效:“nmcli nm wifi on;”(ubuntu 14.04 - dell precision笔记本电脑) - FizxMike
1对我来说工作了16.04 - belteshazzar
@FizxMike 在我的版本的nmcli(Ubuntu 16.04)中,r指定了对象'radio'。当我输入nmcli r --help时,我可以看到命令的可用目标是COMMAND := { all | wifi | wwan },而可用的命令是[ on | off]。我推测在Ubuntu 14.10之前,无法针对由NetworkManager控制的单个对象进行操作。 - MDMower
更干净的工作解决方案是'''sudo service network-manager restart'''。 - Matěj Kříž

我有一个解决方案,但只适用于重新启动您的网络管理器。
sudo service network-manager restart

这不是永久解决办法。

这个解决方案是唯一一个在我使用Intel Wireless 7260无线网卡的15.10版本上有效的。 - Anton Matosov
这个解决方案也适用于14.04 LTS和14.10版本。 - hmjha
工作了。@hmjha也许我们可以在/etc/pm/sleep.d中编写一个脚本,检查wifi是否正常工作,如果不正常则重新启动network-manager - umpirsky
@umpirsky 是的,我们也可以通过那种方法做。谢谢。 - hmjha
2在Ubuntu 16.10上对我起作用。然而,显然不再使用/etc/pm/sleep.d。我将其放在/lib/systemd/system-sleep中,如下所示:#!/bin/shcase $1 in post) service network-manager restart ;; esac - Marc Rochkind

我最终使用的脚本是:
$ cat /etc/pm/sleep.d/10_resume_wifi 
#!/bin/sh

case "${1}" in
  resume|thaw) nmcli nm sleep false ;;
esac

$ ll /etc/pm/sleep.d/10_resume_wifi
-rwxr-xr-x 1 root root 70 mars  31 09:09 /etc/pm/sleep.d/10_resume_wifi

另一个回答有一些错别字(我知道可以修正),但无论如何对我都没有起作用。

我能以某种方式进行测试而不使其永久化吗?这些命令是做什么用的? - tokam
Tokam,看一下我在Owais的帖子上关于“nmcli nm wifi on”在脚本中是否有效的评论。基本上,通过将脚本放置在sleep.d目录中,它将在恢复时执行,并传递'resume'或'thaw'。脚本检查是否有参数传递给脚本,并执行nmcli命令(网络管理器命令行界面)。我提到的具体命令相当于在状态栏中点击网络管理器并勾选“启用WiFi”。为了验证,请在终端中输入“nmcli nm help”。另外,你需要确保脚本是可执行的。 - FizxMike
这对我来说在mint mate 18上运行良好,它基于ubuntu 16.04.1。 - Eric

这对我在戴尔Precision笔记本上的Ubuntu 14.04系统有效。
在终端中输入:
sudo nano /etc/pm/sleep.d/10_resume_wifi

然后粘贴(ctrl+v):
#!/bin/sh
case "${1}" in
resume|thaw)
    nmcli nm wifi on
    ;;
esac

然后将脚本设为可执行:
sudo chmod +x /etc/pm/sleep.d/10_resume_wifi

测试一下挂起和唤醒功能,看看能否连接到WiFi!

你试过像这个一样输入另一个脚本吗?
#/bin/sh

    case ![1] in
        ./bin/sh
        network="true"
        nmcli nm -c sleep=false -network
    endasc

将其翻译成中文:将其保存为jsin7文件,放在/etc/network目录下,并将其命名为network.d,这样可能会正常工作。

1我觉得语法最近有所改变,我执行了nmcli nm sleep false然后跟着执行了nm wifi on来使它运行起来。谢谢你的建议! - Mahmoud Al-Qudsi
命令 sudo nmcli nm sleep false 对我来说是有效的,所以我没有卡住。但是 /etc/network/network.d 脚本不会自动恢复。如果我尝试执行它,会出现 Syntax error: newline unexpected (expecting ")") 的错误。你能更具体地解释一下:1. 为什么它不起作用?2. 这个脚本应该做什么(这样我们可以单独修复)?3. 为什么是 network.d?谢谢! - Augustin Riedinger
3这个是用来做什么的?![$]是什么意思?为什么要用./bin/sh?你在/etc/network目录下,那里不会有./bin/shjsin7文件是什么?case语句应该以esac结束,而不是easc。它们还需要一个变量和一个条件。 - terdon