$ sudo systemctl list-unit-files --no-pager |grep -e network
$ sudo systemctl start systemd-networkd
$ ls /sys/class/net
eth0
wlan0
$ sudo vim /etc/systemd/network/eth0.network
[Match]
Name=eth0
[Network]
Address=192.168.x.x/x
Gateway=192.168.x.1
DNS=192.168.x.1
$ sudo cp /etc/systemd/network/eth0.network /etc/systemd/network/wlan0.network
$ sudo vim !$
- Name=eth0
+ Name=wlan0
$ sudo systemctl restart systemd-networkd
# wifiのdeviceが起き上がってない場合の処理
$ ip link set wlan0 up
もしローカルIPを動的にする場合は、 `sudo systemctl start dhcpcd` とかして `/etc/systemd/network` 以下の設定ファイルに
[Match]
Name=eth0
[Network]
# DHCP=ipv4
DHCP=yes
と書きます。その際は、ゲートウェイとDNSとかは削除します。Nameはwifiの場合、wlan0
などになります。
設定が完了しているかどうかは、以下のコマンドで確認します。関係ありませんが、systemd-resolved
を使ってみてもいいかもしれません。
$ ip a
$ sudo systemctl status systemd-networkd
$ sudo systemctl status systemd-resolved
設定を永続化するには、以下です。
$ sudo systemctl enable systemd-networkd
# sudo systemctl daemon-reload
wifiを永続化するのにちょっとハマりました。どうやら systemctl enable wpa_supplicant
が必要みたいです。起動時には有効にならず systemctl restart systemd-networkd
で有効になる現象に遭遇していました。
$ sudo vim /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
network={
ssid="xxxxx"
psk="xxxx"
}
$ sudo systemctl enable wpa_supplicant@wlan0
ssidなど調べるのが面倒なら wifi-menu
などで作成したファイルなどから持ってくると良いです。あと、平文で保存されるのが嫌な場合は、以下のように暗号化して保存します。コメントの行は削除します。
$ sudo wpa_passphrase ssid pass > /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
$ sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
wifiの自動起動の設定はArchWikiが参考になります。以下は、DHCPの設定です。IPを固定する場合は別の方法になります。これもArchWikiの下のほうに掲載されていますので参照してください。
$ sudo cp /etc/wpa_supplicant/wpa_supplicant-wlan0.conf /etc/wpa_supplicant.conf
$ sudo vim /etc/systemd/system/network-wireless@.service
[Unit]
Description=Wireless network connectivity (%i)
Wants=network.target
Before=network.target
BindsTo=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/ip link set dev %i up
ExecStart=/usr/bin/wpa_supplicant -B -i %i -c /etc/wpa_supplicant.conf
ExecStart=/usr/bin/dhcpcd %i
ExecStop=/usr/bin/ip link set dev %i down
[Install]
WantedBy=multi-user.target
$ sudo systemctl enable network-wireless@wlan0.service
$ sudo systemctl start network-wireless@wlan0.service
細かい設定は、/etc/systemd/system/network@.service
, /usr/lib/systemd/system/systemd-networkd.*
などを見てみるといいかもしれませんね。
問題
新たな問題が出てきました。
色々やってみたのですが、接続できたりできなかったりで、主に systemd-networkd
と wpa_supplicant
なんですが、自分の環境ではどうやら具合が悪いのではないかという結論になってる。
まず、 enable wpa_supplicant
すると、何故かwifiで接続できない状態が続いてしまう。
disableしてから、 netctl start
すると普通に接続できるのですが、wpa_supplicantがenableされている状態では、たとえ、stopさせても、wlan0 downさせてもnetctl startで接続できなくなってしまう。
systemd-networkdのほうは、wifiの設定を入れると、eth0まで接続できなくなってしまうことがあるみたいです。
その後
どうやら私の環境ではwifiはDHCP
を書かないとうまく動作しないっぽい。有線は固定もできて接続もできるんだけど、それをwifiで設定すると、うまくいかないみたいです。
DHCP=ipv4
# DHCP=yes