systemd
とnetworkd
を使用する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サプリカントサービスのみを無効にする方法を教えてください。
/etc/dhcpcd.confの「nohook wpa_supplicant」オプションを使用します。 wlan0にwpa_supplicantを使用したくない場合は、次のようになります。
interface wlan0
nohook wpa_supplicant
同じ問題がありました。 @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)がこのインターフェイスを表示できなくなります。
[編集:それを行うためのより良い方法については、@ 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を使用した問題ではなくなりました。この解決策は、このように行われるべきではないと思うので、少し残忍ですが、これを別の方法で行う方法に関するマニュアルを見つけることができませんでした。
お役に立てれば。