web-dev-qa-db-ja.com

systemd:特定のWLANインターフェースでwpa_supplicantを選択的に無効にする方法は?

systemdnetworkdを使用するLinuxシステムで、1つのWLANインターフェースでWLANアクセスポイントを操作し、さらに(ホットプラグ)WLANインターフェースを通常のステーション(「クライアント」)モードで操作する必要があります。

それが判明したとして、 wpa_supplicant.serviceすべてのWLANインターフェースで稼働しますが、これらすべてのWLANインターフェースのみがステーション/クライアントモードで動作する場合は問題ありません。ただし、wpa_supplicant.serviceはWLANインターフェースを提供しますが、それは(もう?)不可能ですhostapd.serviceは、そのWLANインターフェイスをAPアクセスポイントモードで動作させます。

だから私はwpa_supplicant.service特定のインターフェースのみ、wls35u2。私の考えは[email protected]選択的に無効にできるユニットですが、そのままにしておきますwpa_supplicant.service有効。ただし、これは機能していないようです。または[email protected]

それで、グローバルに無効にすることなく、特定のインターフェイスでWPAサプリカントサービスのみを無効にする方法を教えてください。

7
TheDiveO

/etc/dhcpcd.confの「nohook wpa_supplicant」オプションを使用します。 wlan0にwpa_supplicantを使用したくない場合は、次のようになります。

interface wlan0
        nohook wpa_supplicant
9
PeterP

同じ問題がありました。 @Nprojectは素晴らしいソリューションを見つけました。ただし、この手順をそれぞれ変更する必要はありません。上記のNprojectファイル(/lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant)、次のif句を変更します。

[〜#〜]元の[〜#〜]

if [ "$ifwireless" = "1" ] && \
    type wpa_supplicant >/dev/null 2>&1 && \
    type wpa_cli >/dev/null 2>&1
then
        case "$reason" in
        PREINIT)        wpa_supplicant_start;;
        RECONFIGURE)    wpa_supplicant_reconfigure;;
        DEPARTED)       wpa_supplicant_stop;;
        esac
fi

追加 [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] この方法では:

[〜#〜]変更[〜#〜]

if [ "$ifwireless" = "1" ] && [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ]  && \
    type wpa_supplicant >/dev/null 2>&1 && \
    type wpa_cli >/dev/null 2>&1
then
        case "$reason" in
        PREINIT)        wpa_supplicant_start;;
        RECONFIGURE)    wpa_supplicant_reconfigure;;
        DEPARTED)       wpa_supplicant_stop;;
        esac
fi

さらに、これにより、タスクバーのネットワークマネージャー(GUI)がこのインターフェイスを表示できなくなります。

4
rweisse

[編集:それを行うためのより良い方法については、@ rweisseの回答を参照してください]

Raspberry Piでもまったく同じ問題が発生しました。

私が見つけたのはその両方です wpa_supplicant @ wlan0 そして wpa_supplicant @ wlan1 (私は2つのwlanインターフェースを持っています)と wpa_supplicant.service 無効になりました。

私はどうにかしてdhcpcdがwpa_supplicantの起動を担当していることを確認できました(少なくともraspbianでは、他のdebianリリースでの状況がわかりません)。

/ lib/dhcpcd/dhcpcd-hooksの下に、"10-wpa-supplicant"という名前のファイルがあり、wpa_supplicantの開始/再構成/停止手順を見つけることができます。

このファイルでは、処理中の$ interfaceに条件を追加しました。 PROCEDURE_NAMEごとに(開始/停止/再構成):

PROCEDURE_NAME( )
    if [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] then
        Code of the prodecure
    else
        return 0
    fi

その後、dhcpcdサービスを再起動しました

systemctl restart dhcpcd

これで、InterfaceWPASupplicantShouldBeDisabledOnはhostapdを使用した問題ではなくなりました。この解決策は、このように行われるべきではないと思うので、少し残忍ですが、これを別の方法で行う方法に関するマニュアルを見つけることができませんでした。

お役に立てれば。

2
NProject