web-dev-qa-db-fra.com

SystemD: Comment désactiver sélectivement WPA_Supplicant pour une interface WLAN spécifique?

Sur un système Linux avec systemd et networkd Je dois utiliser un point d'accès WLAN sur une interface WLAN, tout en fonctionnant des interfaces WLAN supplémentaires dans la station normale ("Client").

Comme il s'avère, wpa_supplicant.service va en direct sur toutes mes interfaces WLAN, ce qui irait bien, si seulement toutes ces interfaces WLAN fonctionnaient en mode Station/client. Cependant, alors que wpa_supplicant.service sert une interface WLAN, ce n'est plus possible (plus?) Que hostapd.service opère cette interface WLAN en mode Point d'accès AP.

Donc, je veux désactiver wpa_supplicant.service pour une interface spécifique uniquement, dites wls35u2. Mon idée était d'avoir une unité [email protected] que je peux désactiver de manière sélective, mais pour laisser wpa_supplicant.service activé. Cependant, cela ne semble pas fonctionner ou je fais quelque chose de mal dans le [email protected].

Alors, comment puis-je désactiver le fichier WPA Service de suppliant sur une interface spécifique que sans le désactiver globalement?

7
TheDiveO

Utilisez l'option "nohook wpa_supplicant" dans /etc/dhcpcd.conf. Si vous ne voulez pas WPA_Supplicant pour WLAN0, ce serait:

interface wlan0
        nohook wpa_supplicant
9
PeterP

J'ai eu le même problème. @NPROJECT a trouvé une belle solution. Mais vous n'avez pas à modifier chacune de ces procédures. Allez simplement à la fin du fichier NPROJECTION mentionné (/lib/dhcpcd/dhcpcd-hooks/10-wpa_supplicant) et modifier ce qui suit si la clause:

[~ # ~] 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

Ajouter [ "$interface" != "TheInterfaceWPASupplicantShouldBeDisabledOn" ] de cette façon:

[~ # ~] modifié [~ # ~ ~]

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

En outre, cela empêchera le gestionnaire de réseau (GUI) dans votre barre des tâches de montrer cette interface.

4
rweisse

[edit: regarde @Rweisse répondre à une meilleure façon de le faire]

J'ai eu le même problème sur mon PI de framboise.

Ce que j'ai trouvé, c'est que les deux wpa_supplicant @ wlan0 et wpa_supplicant @ wlan1 (J'ai deux interfaces WLAN) et wpa_supplicant.service ont été handicapés.

J'ai réussi à trouver (sur Raspbian au moins, je ne sais pas comment il se trouve sur d'autres versions debian) que DHCPCD est responsable du début WPA_Supplicant.

Sous / Lib/DHCPCD/DHCPCD-Hooks, il existe un fichier nommé "10-WPA-Supplant", dans lequel vous trouverez des procédures de démarrage/reconfiguration/arrêt pour WPA_Supplicant .

Dans ce fichier, j'ai simplement ajouté une condition sur le $ interface étant traitée. Pour chaque Nom de procédure (début/arrêt/reconfiguration):

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

Après cela, j'ai redémarré le service DHCPCD avec

systemctl restart dhcpcd

Maintenant, l'interfacewpasupplicantShouldbedisableDon n'est plus un problème à l'aide d'HostapD. Cette solution est un peu brutale, car je ne pense pas que cela soit censé être fait comme ça, mais je n'ai pas pu trouver de manuel sur la façon de faire cette autre voie.

J'espère que cela t'aides.

2
NProject