Day After Day
tsurezure naru mamani...
ANOTHER DECADE

from 2021 when it's begining after/with CORONA Virus.

テキストモードWi-Fi接続の安定化(2)

2月
11
2011
Back
HOME


Raspberry Pi OS も世代が進み WiFi 接続も工夫を凝らして簡単に接続出来る(ただしGUI)ものが増えてきた。ただ GUI が使えないほど古い機種も現役で活躍している。そこでこれからも利用しやすいように10年前のブログを検証し直した。 これらを統合して、起動制御を施した。
使用するネットワークプロトコルは systemd-networkd によるもので NetworkManagerは停止 している。 更に、NetworkManager では使うことが無い systemd-resolved はバンドルされていない事が有るのでインストールしている。 然し Bookworm 以後のプロトコルとして益々重要なものと言える。


=MEMO= リモート・アクセスしている場合、全ての設定を完了するまでは再起動しないこと。 又、hostname.local でアクセスすること。

ネットワークの詳細を設定する


ケーブルによるネットワーク

$ sudo nano /etc/systemd/network/wired.network
  GNU nano 7.2                /etc/systemd/network/wired.network
[Match]
Name=eth0

[Network]
DHCP=yes

#DHCP=no
#Address=192.168.0.10/24
#Gateway=192.168.0.1

無線 LAN によるネットワーク

$ sudo nano /etc/systemd/network/wireless.network
  GNU nano 7.2                /etc/systemd/network/wireless.network
[Match]
Name=wlan0

#[Link]                         # 他のサービスが network-online.target に依存している場合有効にする
#RequiredForOnline=yes          # ( systemd-networkd-wait-online.service を使う場合 )

[Network]
DHCP=yes
#ConfigureWithoutCarrier=yes    # systemd-networkd が wlan0 を no-carrier と判断しても DHCP 処理させる


rfkill による WiFi ブロックを解除


$ sudo nano /etc/systemd/system/wifi-unblock.service
  GNU nano 7.2                /etc/systemd/system/wifi-unblock.service
Description=Unblock WiFi Modem
DefaultDependencies=no
Before=sys-subsystem-net-devices-wlan0.device
Before=wpa_supplicant@wlan0.service
Before=systemd-networkd.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill unblock wifi

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable wifi-unblock.service


WiFi モデムの省エネ設定を解除


$ sudo nano /etc/systemd/system/wifi-powersave-off@.service
  GNU nano 7.2                /etc/systemd/system/wifi-powersave-off@.service
[Unit]
Description=Disable WiFi power save on
After=sys-subsystem-net-devices-%i.device
Requires=sys-subsystem-net-devices-%i.device

Before=wpa_supplicant@%i.service

[Service]
Type=oneshot
ExecStart=/usr/sbin/iw dev %i set power_save off

[Install]
WantedBy=multi-user.target
$ sudo systemctl enable wifi-powersave-off@wlan0.service


WiFi モデムの起動サービス


$ sudo nano /etc/systemd/system/wpa_supplicant@.service
  GNU nano 7.2                /etc/systemd/system/wpa_supplicant@.service
[Unit]
Description=WPA supplicant daemon (interface-specific version)
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Wants=wifi-unblock.service wifi-powersave-off@%i.service
After=wifi-unblock.service wifi-powersave-off@%i.service

[Service]
Type=simple
ExecStart=/sbin/wpa_supplicant \
    -i%i \
    -c/etc/wpa_supplicant/wpa_supplicant-%i.conf
#   -Dnl80211,wext \
#   -C/run/wpa_supplicant
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

ユニットファイル名の「@」の後ろに、wireless.network で指定した Name=wlan0 を追記して有効にする。

$ sudo systemctl enable wpa_supplicant@wlan0.service

既存のネットワークサービスを無効にする

$ sudo systemctl disable wpa_supplicant.service
$ sudo systemctl disable NetworkManager.service

次に、WiFi の接続情報ファイル wpa_supplicant-wlan0.conf を作成する

wpa_passphraseを使用して出力をそのまま目標のファイルにリダイレクトしてファイルを作成する。 > は新規に記入、>> はその後ろに加えて記入となる。

例のように、WARPSTAR-8FE884 は対象ルータの SSID、またその後ろの13桁はWPA暗号化キーである。
=MEMO= 直接 /etc/wpa_supplicantフォルダを指定しても書き込めないので、一旦homeにファイルを作って後で mv する。


$ sudo wpa_passphrase WARPSTAR-8FE884 0046D824FE72C > wpa_supplicant-wlan0.conf
$ sudo wpa_passphrase AndroidHotspot9999 256tugh6755ef >> wpa_supplicant-wlan0.conf
$ sudo mv wpa_supplicant-wlan0.conf /etc/wpa_supplicant/
$ sudo nano /etc/wpa_supplicant/wpa_supplicant-wlan0.conf
  GNU nano 2.2.6                   File: /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

network={
ssid=”WARPSTAR-8FE884″
#psk=”0046D824FE72C”
psk=19f5f008061fd70d815cfa74377a73222e0e42df442f76225f73b30d9bd3fb18
}
network={
ssid=”AndroidHotspot9999″
#psk=”256tugh6755ef”
psk=5162a3ce57038a908e5eda9e238f87f419e38f288ed327d77ea60dfa0f97019f
}       
ファイルを確認したら、#psk=”—-” の部分はパスワード同然なので [Ctrl]+[k]で行削除する。
Ctrl]+[o]で保存、[Ctrl]+[x]で終了したら、ファイルへのアクセス権限を制限する。

$ sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

デフォルトゲートウェイを自動で設定させる


$ sudo apt -y install systemd-resolved

$ sudo systemctl enable systemd-resolved.service
$ sudo systemctl start systemd-resolved.service

$ sudo rm /etc/resolv.conf
$ sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf



Back
HOME