systemd: Wie deaktiviere ich wpa_supplicant selektiv für eine bestimmte WLAN-Schnittstelle?


8

Auf einem Linux-System mit systemdund muss networkdich einen WLAN-Zugangspunkt auf einer WLAN-Schnittstelle betreiben, während weitere (Hotplug-) WLAN-Schnittstellen im normalen Stationsmodus ("Client") betrieben werden.

Wie sich herausstellt, werden wpa_supplicant.servicealle meine WLAN-Schnittstellen live geschaltet, was in Ordnung wäre, wenn nur alle diese WLAN-Schnittstellen im Stations- / Client-Modus arbeiten würden. Während jedoch wpa_supplicant.serviceeine WLAN - Schnittstelle dient, ist es nicht möglich (mehr?) , Dass hostapd.servicediese WLAN - Schnittstelle in AP Access Point - Modus arbeitet.

Ich möchte wpa_supplicant.servicealso beispielsweise nur für eine bestimmte Schnittstelle deaktivieren wls35u2. Meine Idee war, ein wpa_supplicant@wls35u2.serviceGerät zu haben , das ich selektiv deaktivieren, aber wpa_supplicant.serviceaktiviert lassen kann. Dies scheint jedoch nicht zu funktionieren oder ich mache etwas falsch in der wpa_supplicant@wls35u2.service.

Wie kann ich den WPA-Supplicant-Dienst nur auf einer bestimmten Schnittstelle deaktivieren, ohne ihn global zu deaktivieren?

Antworten:


10

Verwenden Sie die Option "nohook wpa_supplicant" in /etc/dhcpcd.conf. Wenn Sie wpa_supplicant für wlan0 nicht möchten, wäre dies:

interface wlan0
        nohook wpa_supplicant

4

Ich hatte das gleiche Problem. @Nproject hat eine schöne Lösung gefunden. Sie müssen jedoch nicht jedes dieser Verfahren ändern. Gehen Sie einfach zum Ende der genannten Datei Nproject ( /lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant) und ändern Sie die folgende if-Klausel:

ORIGINAL

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

Fügen Sie [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ]auf diese Weise hinzu:

GEÄNDERT

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

Außerdem wird dadurch verhindert, dass der Netzwerkmanager (GUI) in Ihrer Taskleiste diese Schnittstelle anzeigt.


2

[BEARBEITEN: Schauen Sie sich die Antwort von @rweisse an, um einen besseren Weg zu finden]

Ich hatte genau das gleiche Problem mit meinem Himbeer-Pi.

Was ich gefunden habe ist, dass sowohl wpa_supplicant @ wlan0 als auch wpa_supplicant @ wlan1 (ich habe zwei wlan-Schnittstellen) und wpa_supplicant.service deaktiviert waren.

Ich habe festgestellt (zumindest bei Raspbian weiß ich nicht, wie es bei anderen Debian-Versionen ist), dass dhcpcd für den Start von wpa_supplicant verantwortlich ist.

Unter / lib / dhcpcd / dhcpcd-hooks befindet sich eine Datei mit dem Namen "10-wpa-Supplicant" , in der Sie Prozeduren zum Starten / Neukonfigurieren / Stoppen von wpa_supplicant finden.

In dieser Datei habe ich einfach eine Bedingung für die zu verarbeitende $ -Schnittstelle hinzugefügt . Für jeden PROCEDURE_NAME (Start / Stopp / Neukonfiguration):

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

Danach habe ich den dhcpcd-Dienst mit neu gestartet

systemctl restart dhcpcd

Jetzt ist das InterfaceWPASupplicantShouldBeDisabledOn mit hostapd kein Problem mehr. Diese Lösung ist ein bisschen brutal, da ich nicht denke, dass dies so gemacht werden soll, aber ich konnte kein Handbuch finden, wie man das anders macht.

Hoffe das hilft.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.