麒麟os开机“dhcp获取超时”主因是networkmanager-wait-online.service阻塞启动,需禁用该服务并配置networkmanager.conf的dhcp-timeout=10、ignore-carrier=false,再为有线连接设置ipv4.may-fail=yes以跳过强制等待。

麒麟OS开机时反复提示“DHCP获取超时”,说明系统在启动阶段未能及时从路由器获取IP地址,导致网络服务卡在初始化环节,进而拖慢开机速度、中断自动连接或使桌面网络图标长期显示灰色/问号。
确认DHCP超时是否由NetworkManager-wait-online阻塞引起
该systemd服务默认要求NetworkManager完成联网(含DHCP成功)后才允许系统继续启动,但若路由器响应慢、网线未插稳或AP未就绪,它会硬等60秒再报超时——这是开机卡顿和提示的主因。
执行:systemd-analyze blame | grep wait-online,若看到NetworkManager-wait-online.service排在前3名且耗时>50s,即可锁定问题。
禁用该服务:【sudo systemctl disable NetworkManager-wait-online.service】
执行后必须运行:sudo systemctl daemon-reload,否则禁用不生效。
强制NetworkManager跳过DHCP等待,启用异步模式
让NetworkManager在后台尝试DHCP,不阻塞图形界面加载。这一步解决“开机黑屏久、桌面出来后网络才连上”的典型现象。
编辑NetworkManager主配置:【sudo nano /etc/NetworkManager/NetworkManager.conf】
在[main]段落下新增一行:dhcp-timeout=10
再新增一行:ignore-carrier=false(防止网线刚插上时被忽略)
保存退出,立即执行:sudo systemctl restart NetworkManager
为有线连接单独关闭“需要IPv4地址完成连接”
该选项在图形界面中默认开启,会强制NetworkManager等待完整DHCP响应(IP+网关+DNS)才上报“已连接”。对于DHCP慢的老旧路由器,它极易触发超时。
第一步:查当前有线连接名
运行:nmcli connection show --active | grep wired,记下名称,如“有线连接 1”
第二步:关闭强制等待
执行:sudo nmcli connection modify "有线连接 1" ipv4.may-fail yes
第三步:确保不勾选“需要IPv4地址完成连接”
执行:sudo nmcli connection modify "有线连接 1" ipv4.ignore-auto-routes no
第四步:重新激活连接
执行:sudo nmcli connection down "有线连接 1" && sudo nmcli connection up "有线连接 1"
检查并替换底层DHCP客户端(可选,针对Realtek/Intel网卡)
部分国产主板搭载的Realtek RTL8168或Intel I219-V网卡,在麒麟OS中与默认dhclient兼容性差,易出现超时重试失败。
方法一:切换为dhcpcd
安装:【sudo apt install dhcpcd5】
停用原dhclient:【sudo systemctl stop systemd-networkd && sudo systemctl disable systemd-networkd】
启用dhcpcd:【sudo systemctl enable dhcpcd && sudo systemctl start dhcpcd】
方法二:降级dhclient版本(仅当升级后出现异常时使用)
执行:sudo apt install dhclient=4.4.1-2.1+kylin1(具体包名以apt list --installed | grep dhclient输出为准)
⚠️ 注意:执行降级前先运行sudo apt-mark hold dhclient,防止下次更新覆盖。
验证DHCP行为是否已优化
重启系统,观察开机过程:不再出现红色“DHCP timeout”提示,且桌面启动后5秒内网络图标应显示满格信号。
开机后立即打开终端,运行:journalctl -u NetworkManager -n 50 --no-pager | grep -i "dhcp\|timeout"
正常输出中不应出现"timeout"或"failed to get address",而应看到类似"dhcp4 (ens33): state changed bound -> bound"的循环绑定日志。
执行:ip a show ens33 | grep "inet ",确认已获得有效IP(非169.254.x.x)。











