web-dev-qa-db-fra.com

Prenant une action après la connexion d'un adaptateur USB à Ethernet

Lorsque je connecte un adaptateur USB-to-Ethernet (qui a déjà été utilisé), je reçois une adresse MAC, puis s'il y a quelque chose de connecté à l'autre extrémité, je reçois également une adresse IP (192.168.1.1 dans mon cas, configuré dans statique dans NetworkManager). De l'autre extrémité, divers instruments attendent que le serveur DHCP s'exécute sur ce PC pour leur donner une adresse IP.

Le problème est que le serveur DHCP refuse de démarrer si le sous-réseau n'est pas trouvé, il ne peut donc pas être lancé avant la mise en place de la connexion. Comment puis-je faire systemctl restart isc-dhcp-server.service Après avoir reçu le IP 192.168.1.1 de NetworkManager?

J'ai pensé à utiliser une règle Udev avec ATTR{address}=="f0:1f:af:3d:6c:e7" RUN+="systemctl restart isc-dhcp-server.service" Mais il fonctionne avant l'attribution de la propriété intellectuelle. Y a-t-il une option Udev que je peux utiliser ou dois-je utiliser une autre méthode via SystemD ou NetworkManager ou autre?

4
dargaud

Enfin passé du temps à ce problème et résolu avec un script que j'ai nommé restart-dhcpd.sh et placé dans /etc/NetworkManager/dispatcher.d/. (Remarque: vous devrez peut-être avoir besoin de systemctl restart network-manager.service et/ou systemctl daemon-reload ensuite):

#! /bin/bash
IF=$1
STATUS=$2
case "$2" in
    dhcp4-change|up)
            logger -s "NM Script $STATUS $IF triggered"
            if [ "$1" = "enx6cf0496c6947" ]; then
                    /bin/systemctl restart isc-dhcp-server.service
            fi
    ;;
esac
0
dargaud

Votre système est configuré avec SystemD.

Donc, une solution consiste à ajouter une dépendance entre isc-dhcp-server et le périphérique USB.

  1. identifier le nom de l'appareil sous SystemD System
systemctl | grep -i sys-subsystem-net-devices.*6c.*e7

pS 6c & E7 Les 2 derniers octets de votre Mac de votre périphérique USB

vous devez avoir quelque chose comme

 sys-subsystem-net-devices-enxf01faf3d6ce7.device
  1. modifier le fichier de l'unité pour isc-dhcp-server
export EDITOR=emacs # <= change to what you want 
systemctl edit isc-dhcp-server.service

et ajoutez ces lignes

[Unit]
After=sys-subsystem-net-devices-enxf01faf3d6ce7.device
Wants=sys-subsystem-net-devices-enxf01faf3d6ce7.device
  1. redémarrer

  2. vérifiez l'état et la configuration de isc-dhcp-server en exécutant ces commandes

systemctl show --property=After isc-dhcp-server.service 

systemctl status isc-dhcp-server.service
0
EchoMike444

Udev déclenchant un service SystemD est le moyen de le faire.

vous pouvez correspondre à votre adaptateur USB par USB ID, c'est trop tard lorsque vous pouvez voir une adresse MAC.

cet article a les instructions

https://unix.stackexchange.com/questions/229987/udev-rule-to-match-any-usb-storage-device

0
Amias