[Ethernet] Déterminer si le câble RJ45 est connecté

Applications, problèmes de configuration réseau
Avatar de l’utilisateur
dmganges
Daikyu
Messages : 54
Inscription : ven. 04 nov. 2022, 03:22

[Ethernet] Déterminer si le câble RJ45 est connecté

Message par dmganges »

Bonjour,

D’ordinaire ma carte Ethernet est déconnectée (pour être sûr que Win11 [carte WiFi invalidée] ne s'en va pas faire des MàJ à l’insu de mon plein gré...).
Depuis une .iso Arch qui se connecte automatiquement en ETH je dois télécharger des modules.
Je désire m'envoyer une alerte si j'ai oublié de brancher la prise RJ45.

Avec dmesg je vois que eth0 est renommé enp57s0u2u4u2c2

Code : Tout sélectionner

root @ sysrescue
/root
#> dmesg | grep eth
[    4.608796] wmi_bus wmi_bus-PNP0C14:00: [Firmware Bug]: WQ00 data block query control method not found
[    4.609162] wmi_bus wmi_bus-PNP0C14:03: [Firmware Bug]: WQBC data block query control method not found
[    4.771029] usbcore: registered new interface driver cdc_ether
[    4.810488] cdc_ncm 4-2.4.2:2.0 eth0: register 'cdc_ncm' at usb-0000:39:00.0-2.4.2, CDC NCM (NO ZLP), 6c:1f:f7:1e:91:32
[    4.978115] e1000e 0000:00:1f.6 eth1: (PCI Express:2.5GT/s:Width x1) c0:47:0e:3e:65:25
[    4.978118] e1000e 0000:00:1f.6 eth1: Intel(R) PRO/1000 Network Connection
[    4.978195] e1000e 0000:00:1f.6 eth1: MAC: 15, PHY: 12, PBA No: FFFFFF-0FF
[    5.156868] VGA switcheroo: detected Optimus DSM method \_SB_.PC00.PEG1.PEGP handle
[   11.741144] e1000e 0000:00:1f.6 enp0s31f6: renamed from eth1
[   12.240638] cdc_ncm 4-2.4.2:2.0 enp57s0u2u4u2c2: renamed from eth0
[   12.818039] Bluetooth: hci0: DSM reset method type: 0x00
root @ sysrescue
/root
#> dmesg | grep enp57s0u2u4u2c2:
[   12.240638] cdc_ncm 4-2.4.2:2.0 enp57s0u2u4u2c2: renamed from eth0
root @ sysrescue
/root

Code : Tout sélectionner

root @ sysrescue
/root
#> dmesg | grep enp57s0u2u4u2c2:
[   12.240638] cdc_ncm 4-2.4.2:2.0 enp57s0u2u4u2c2: renamed from eth0
root @ sysrescue
/root
En fouinant sur Internet j'ai vu que ethtool pouvait fournir l'information dont j'ai besoin, mais que la prise RJ45 soit branchée ou non j'ai toujours la même réponse : Link detected: no :

Code : Tout sélectionner

root @ sysrescue
/root
#> ethtool enp57s0u2u4u2c2
Settings for enp57s0u2u4u2c2:
	Supported ports: [  ]
	Supported link modes:   Not reported
	Supported pause frame use: No
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Speed: Unknown!
	Duplex: Unknown! (255)
	Auto-negotiation: off
	Port: Twisted Pair
	PHYAD: 0
	Transceiver: internal
	MDI-X: Unknown
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: no
root @ sysrescue
/root
#>
Je m'y prends certainement comme un manche...
Y a-t-il une solution, avec ethtool ou autre ?
MERCI :!:
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17815
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Ethernet] Déterminer si le câble RJ45 est connecté

Message par benjarobin »

Bonjour,
Je te conseil plutôt d'utiliser cette commande :

Code : Tout sélectionner

ip link show dev enp57s0u2u4u2c2 | grep LOWER_UP
Si LOWER_UP est présent, alors le câble est forcément branché.
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
dmganges
Daikyu
Messages : 54
Inscription : ven. 04 nov. 2022, 03:22

Re: [Ethernet] [RÉSOLU] Déterminer si le câble RJ45 est connecté

Message par dmganges »

Merci pour ta réponse benjarobin qui m'a bien aidé !

En fait :

Code : Tout sélectionner

root @ sysrescue
/root
#> ip link show dev enp0s31f6 | grep LOWER_UP
root @ sysrescue
/root
#>
Ne retournait rien.
J'ai donc essayé :

Code : Tout sélectionner

root @ sysrescue
/root
#> ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp57s0u2u4u2c2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 6c:1f:f7:1e:91:32 brd ff:ff:ff:ff:ff:ff
    altname enx6c1ff71e9132
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether c0:47:0e:3e:65:25 brd ff:ff:ff:ff:ff:ff
    altname enxc0470e3e6525
4: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether bc:cd:99:c9:19:2c brd ff:ff:ff:ff:ff:ff
    altname wlxbccd99c9192c
root @ sysrescue
/root
#>
Et suivant que je branche on non RJ45, j'obtiens :

Code : Tout sélectionner

root @ sysrescue
/root
#> ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp57s0u2u4u2c2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 6c:1f:f7:1e:91:32 brd ff:ff:ff:ff:ff:ff
    altname enx6c1ff71e9132
3: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether c0:47:0e:3e:65:25 brd ff:ff:ff:ff:ff:ff
    altname enxc0470e3e6525
4: wlp0s20f3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DORMANT group default qlen 1000
    link/ether bc:cd:99:c9:19:2c brd ff:ff:ff:ff:ff:ff
    altname wlxbccd99c9192c
root @ sysrescue
/root
#>
Donc ETH est sur enp0s31f6 et non enp57s0u2u4u2c2

Donc je teste :

Code : Tout sélectionner

root @ sysrescue
/root
#> ip link show dev enp0s31f6 | grep LOWER_UP
3: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
root @ sysrescue
/root
#> ip link show dev enp0s31f6 | grep LOWER_UP
root @ sysrescue
/root
#>
Et ça fonctionne !


Et pour info ethtool fonctionne aussi :

Code : Tout sélectionner

root @ sysrescue
/root
#> ethtool enp0s31f6
Settings for enp0s31f6:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Half 1000baseT/Full
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: Unknown!
	Duplex: Unknown! (255)
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 2
	Transceiver: internal
	MDI-X: Unknown
	Supports Wake-on: pumbg
	Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: no

root @ sysrescue
/root
#> ethtool enp0s31f6
Settings for enp0s31f6:
	Supported ports: [ TP ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Supported pause frame use: Symmetric Receive-only
	Supports auto-negotiation: Yes
	Supported FEC modes: Not reported
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	                        1000baseT/Full
	Advertised pause frame use: Symmetric Receive-only
	Advertised auto-negotiation: Yes
	Advertised FEC modes: Not reported
	Link partner advertised link modes:  10baseT/Half 10baseT/Full
	                                     100baseT/Half 100baseT/Full
	                                     1000baseT/Half 1000baseT/Full
	Link partner advertised pause frame use: No
	Link partner advertised auto-negotiation: Yes
	Link partner advertised FEC modes: Not reported
	Speed: 1000Mb/s
	Duplex: Full
	Auto-negotiation: on
	Port: Twisted Pair
	PHYAD: 1
	Transceiver: internal
	MDI-X: off (auto)
	Supports Wake-on: pumbg
	Wake-on: g
        Current message level: 0x00000007 (7)
                               drv probe link
	Link detected: yes
root @ sysrescue
/root
#>

Lors de mes tests j'avais bien testé enp0s31f6, mais je lançais la commande trop précipitamment... Il faut au moins une dizaine de secondes pour que le UP soit reconnu.

Désolé pour le dérangement par cette chaleur...
Et encore MERCI :!:

[RÉSOLU]
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17815
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

Re: [Ethernet] Déterminer si le câble RJ45 est connecté

Message par benjarobin »

Sinon tu peux aussi utilisé le flag NO-CARRIER, si présent le câble n'est pas branché. Mais oui il faut attendre un peu que le câble soit detecté
Zsh | KDE | PC fixe : AMD Ryzen 9900X, Radeon RX 7700 XT
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
dmganges
Daikyu
Messages : 54
Inscription : ven. 04 nov. 2022, 03:22

Re: [Ethernet] Déterminer si le câble RJ45 est connecté

Message par dmganges »

Oui merci, ça fonctionne aussi, ça inverse la logique :

Code : Tout sélectionner

root @ sysrescue
/root
#> ip link show dev enp0s31f6 | grep NO-CARRIER
3: enp0s31f6: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
root @ sysrescue
/root
0 = absent
1 = présent
benjarobin a écrit : mar. 23 juin 2026, 17:28 Mais oui il faut attendre un peu que le câble soit détecté
Oui d'autant que le câble est branché sur un hub qui est sur une multiprise et que j'utilise rarement.
En fait je fais On/Off sur la multiprise... le temps que le hub s'initialise... puis la carte ETH... 8-10s
Là c'est impeccable,
- Si j'oublie de brancher, j'ai un message d'alerte et je tue le script, ce qui m'évite d'avoir un environnement sans mes modules préférés...
- Et pour ne pas laisser la connexion, dès la MàJ terminée re-message d'alerte
:-D
MERCI :!:
Répondre