我有一个基于 Ubuntu 16.04 的小型无线嵌入式系统。如果无线接口配置不正确或接入点关闭,则ifup wlan0
永远不会完成,因为dhclient
在获得租约之前不会对自身进行守护进程。这是一个问题,因为ifdown wlan0
由于锁ifup
仍然保持而挂起:
ifdown: waiting for lock on /run/network/ifstate.wlan0
我该如何解决这个问题?
- 选项1:
pkill -f 'ifup .*wlan0'; ifdown wlan0
这很粗鲁,但如果必须这么做,我就会这么做。我宁愿有一个更好的解决方案。
- 选项 2:
dhclient
支持-nw
nowait 选项,该选项告诉它立即进行守护进程,但ifup
不使用它,并且该命令似乎是通过名为的源文件dhclient
硬编码的:ifup
inet.defn
。
$ apt-get source ifupdown
$ grep -n 'dhclient -1' ifupdown-*/inet.defn | head -1
97: /sbin/dhclient -1 -v -pf /run/dhclient.%iface%.pid -lf /var/lib/dhcp/dhclient.%iface%.leases -I -df /var/lib/dhcp/dhclient6.%iface%.leases %iface% \
- 选项 3:有没有办法让 dhcp 由 wpa_supplicant 的状态控制?因此,dhclient 直到 wpa_supplicant 完成与接入点的关联后才会运行。
额外的信息:
/etc/network/interfaces
:
auto lo
iface lo inet loopback
# ifplugd configuration
mapping hotplug
script grep
map eth0
map wlan0
auto eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
/etc/wpa_supplicant.conf
:
ctrl_interface=DIR=/var/run/wpa_supplicant
network={
ssid="AccessPoint"
scan_ssid=1
proto=WPA RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="passphrase"
priority=10
}
network={
key_mgmt=NONE
priority=0
disabled=1
}
答案1
我遇到了同样的问题一段时间,并做了一个简单的:
$ systemctl enable netctl.service
$ systemctl start netctl.service
修复了我的 ubuntu 17.04 上的所有问题。
希望能帮助到你。