Intel Joule 570 Ubuntu16.04下NetworkManager每30分钟收睡眠请求致WiFi断连求助
我之前在Intel嵌入式设备上遇到过几乎一模一样的问题,给你梳理几个逐步排查的方向,应该能帮你定位到根源:
先搞清楚谁在发睡眠请求:
NetworkManager只是接收方,得找到发起睡眠请求的进程。你可以用journalctl -u systemd-logind -f实时监控系统登录管理器的日志,当睡眠请求触发时,日志里会显示触发的进程ID(PID)。拿到PID后用ps -p <PID> -o comm=就能看到是哪个进程在搞事情。另外也可以用dbus-monitor --system "type='signal',interface='org.freedesktop.login1.Manager'"监听DBus信号,直接捕获睡眠请求的发送源。排查定时任务/定时器:
30分钟的间隔很像定时任务触发的,先查系统级的定时任务:cat /etc/crontab、ls -la /etc/cron.*;再查当前用户的:crontab -l。别忘了systemd的定时器,很多嵌入式设备会用这个代替crontab,执行systemctl list-timers --all看看有没有和30分钟周期匹配的定时器,尤其是Intel Joule专属的电源管理相关定时器。检查systemd电源管理配置:
打开/etc/systemd/logind.conf看看IdleAction和IdleActionSec这两个选项——如果IdleAction设成了suspend或者sleep,且IdleActionSec刚好是30分钟,那就是它的问题。把IdleAction改成ignore,或者把IdleActionSec调得足够长,改完后重启logind服务:systemctl restart systemd-logind。排查硬件/驱动层面的触发:
Intel Joule可能有厂商特有的电源管理驱动,比如intel_powerclamp这类模块。用lsmod列出所有加载的模块,过滤掉电源相关的,再用modinfo <模块名>查看模块参数,有没有定时休眠的配置项。另外也可以检查/sys/power/目录下的文件,比如/sys/power/autosleep,看看是不是被设置成了自动休眠模式。调整NetworkManager的睡眠响应策略(临时规避):
如果暂时找不到根源,可以先让NetworkManager忽略睡眠请求,避免WiFi断连。新建一个配置文件/etc/NetworkManager/conf.d/99-disable-wifi-sleep.conf,写入以下内容:[main] sleep-wifi-disconnect=false保存后重启NetworkManager服务:
systemctl restart NetworkManager,这样即使收到睡眠请求,WiFi也不会断开。不过这只是权宜之计,还是建议找到根源彻底解决。
内容的提问来源于stack exchange,提问作者milan

