wpa_supplicantがsystemdで機能しない

wpa_supplicantがsystemdで機能しない

私には一人では解決できない奇妙な行動があります。私はRPi2でRaspbian Stretch Liteを実行しています。 WiFiアダプタにはRealtek RTL8188EU(ステージングディレクトリのドライバ)を使用します。

デフォルトではwlan0インターフェイスを作成しますが、アクセスポイントにまったく接続しようとしません。他のWiFiアダプタが正しく動作するため、設定は正確です。

これは私の/etc/wpa_supplicant/wpa_supplicant.confファイルです:

country=IT
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
    ssid="ssid"
    scan_ssid=1
    psk="password"
    key_mgmt=WPA-PSK
}

何度も試した最後に動作するコマンドが見つかりました。

wpa_supplicant -u -Dwext,nl80211 -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B

コンソールでこのコマンドを実行すると、予想される動作(APへの接続など)が発生します。しかし、次の行をsystemdサービスに入れると:

$ cat /etc/systemd/system/multi-user.target.wants/wpa_supplicant.service 
[Unit]
Description=WPA supplicant
Before=network.target
After=dbus.service
Wants=network.target

[Service]
Type=dbus
BusName=fi.epitest.hostap.WPASupplicant
#ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
ExecStart=/sbin/wpa_supplicant -u -Dwext,nl80211 -i wlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B

[Install]
WantedBy=multi-user.target
Alias=dbus-fi.epitest.hostap.WPASupplicant.service

動作しません。繋がらないという意味です。 systemdサービスを手動で(再)開始しても。

systemdで同じコマンドを実行したときに正しい動作を妨げる可能性は何ですか?

参考までに、役に立つ場合は動作しても(コンソールから手動でコマンドを実行した後)、コマンドはiw list何も出力しません。

答え1

dbusの代わりにフォークロタイプを変更することは私にとって効果的でした。

[Service]
Type=forking

答え2

問題は、「systemdで同じコマンドを実行すると正しい動作を妨げることができるのは何ですか?」です。

wpa_supplicantはデーモンとして実行され、ハードコーディングされた接続の詳細を含む構成ファイルを使用せずに接続を確立するには、クライアントを使用してwpa_supplicantに接続の詳細を提供する必要があります。

クライアントは、制御ファイルインターフェースとDBUS方式の2つの方法で実行されているwpa_supplicantに接続できます。

wpa_supplicantのためにDebian(およびUbuntu)によって提供されるsystemdユニットファイルは、「-u」パラメータでデーモンを起動してDBUSインターフェースを使用するように指示します。 -O /run/wpa_supplicant パラメーターが提供される理由を理解できません。これは、このインタフェースが生成されず、クライアントが存在しない制御ファイルソケットを介して接続できないためです。 wpa_supplicantソースの一部として提供されるクライアント、つまりwpa_cliおよびwpa_gui(Qt4)にはDBUS機能がないため、ソケットファイルインターフェースのみを使用できます。 systemdユニットファイルは、ネットワーク管理者(DBUSを介して通信)を持つシステムでネットワーク接続を管理したり、「wicd」を置き換えるために使用するためのものです。

自分で作成したコマンド

  wpa_supplicant -u -Dwext,nl80211 -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B

wpa_supplicantにSSIDと許可の詳細を含む構成ファイルを使用するように指示すると、起動時にSSIDに接続し、接続を確立します。

対照的に、systemdユニットファイルはwpa_supplicantデーモンを起動し、DBUSインタフェースを介してどの接続を試み、どのように設定するかを知らせるメッセージを永遠に待ちます。

固定構成を使用するようにシステムデバイスファイルをハードワイヤードできますが、DBUSへの参照を削除して-uフラグを使用しないでください。 DBUSインターフェースを使用するときは、wpa_supplicant用のdbus-1構成ファイルが存在し、必要に応じてポリシーがroot以外のユーザーの対話を許可することを確認する必要があります(通常は/etc/dbus-1/systemのnetdevグループメンバーシップによって許可されます)。 .d /wpa_supplicant.conf.

Manuは上記で「type」を「dbus」から分岐に変更すると説明しましたが、「-B」(フォークデーモンをバックグラウンドオプションとして)を使用するのではなく、「simple」を使用する方が良いと提案しています。なぜなら、 systemd ユニットはより簡単ではないときに使用されるからです。フォーク時に管理します(フォークされたプロセスのPIDファイルの作成と監視を心配する必要はありません)。

関連情報