hostapdが動かない。
エラーの内容から原因が類推できず、若干悩んだので、メモ。
環境
Ubuntu Desktop 16.04 64bit
エラー
# hostapd /etc/hostapd/hostapd.conf
nl80211: Could not configure driver mode
nl80211: deinit ifname=wlx001122334455 disabled_11b_rates=0
nl80211 driver initialization failed.
wlx001122334455: interface state UNINITIALIZED->DISABLED
wlx001122334455: AP-DISABLED
hostapd_free_hapd_data: Interface wlx001122334455 wasn't started
これじゃ原因がわからん。ググってもいまいち。
そこでデバッグオプション。
# hostapd -dd /etc/hostapd/hostapd.conf
:
nl80211: Failed to set interface 4 to mode 3: -16 (Device or resource busy)
:
nl80211: Failed to set interface 4 to mode 2: -16 (Device or resource busy)
なんか競合っぽい!
ググる
色々出てくる。結局、NetworkManagerと干渉しているようだ。
詳細はこちらやこちらを参照。
またもArchWikiから発想をいただく。
解決策
- NetworkManagerを完全に消し去る
- NetworkManagerを止める
- 該当NICをNetworkManagerの管理外にする
今回は2.で。
NetworkManagerの止め方
Ubuntu Community Help Wikiによると、
sudo systemctl stop NetworkManager.service
sudo systemctl disable NetworkManager.service
がよさそう(Ubuntu 15.04以降)。
おまけ: Ubuntuのsystemdとネットワーク設定
UbuntuでNetworkManagerを止めて/etc/network/interfaces
を使う場合、systemd-networkdとの関係はどうなっているのだろう。
systemd-networkd
ps
で見ても、居ない。動いていないのだろう。
networking.service
/etc/systemd/system/network-online.target.wants/networking.service
ExecStart=/sbin/ifup -a --read-environment
などとある。これで/etc/network/interfaces
が読まれているのだろうか。
逆に言うと、network-online.target は、ネットワークの設定が施された後の条件として使える、ということか。
/etc/init.d/networking
init.dにもnetworkingは存在する。Ubuntu 16.04ではupstartは使われていないようだが、このディレクトリの使われ方は?
宿題
ubuntu wikiやこのへんを見て、お勉強。
あと、NetworkManager
とnetwork-manager
の違いの調査。