web-dev-qa-db-ja.com

wpa_supplicantはsystemdからは機能しません

自分では直せない奇妙な行動をしています。 RPi2でRaspbianStretchLiteを実行しています。 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
Mark

タイプをdbusではなくフォークに変更するとうまくいきました:

[Service]
Type=forking
2
MANU KRISHNAN P

問題は、「systemdから同じコマンドを起動したときに正しい動作を妨げる可能性があるのは何ですか?」です。

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

クライアントが実行中のwpa_supplicantに接続する方法には、制御ファイルインターフェイスとDBUSメソッドの2つがあります。

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

あなたの手作りのコマンド

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

wpa_supplicantに、SSIDと認証の詳細を含む構成ファイルを使用するように指示するため、起動時にSSIDへの接続と接続の確立を試みます。

比較すると、systemdユニットファイルはwpa_supplicantデーモンを起動し、DBUSインターフェイスを介して接続の確立を試みる内容と方法を通知するメッセージを永久に待機します。

固定構成を使用するようにsystemdユニットファイルを配線することもできますが、-uフラグを使用せずにDBUSへの参照を削除する必要もあります。 DBUSインターフェースを使用する場合は、wpa_supplicantのdbus-1構成ファイルが存在すること、および必要に応じて非rootユーザーが対話できるようにする必要もあります(通常は/ etc/dbus-のnetdevグループのメンバーシップによって許可されます1/system.d /wpa_supplicant.conf。

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

0
J G Miller