ubuntuusers.de

script um alle paar minuten wlan verbindung herzustellen

Status: Ungelöst | Ubuntu-Version: Ubuntu 22.04 (Jammy Jellyfish)
Antworten |

jumbo125

Anmeldungsdatum:
4. April 2023

Beiträge: 40

hallo zusammen weiß jemand wie ein script aussehen soll, welches prüft, ob eine akjtive wlan verbindung besteht und falls nicht, soll es versuchen sich mit einem bestimmten netzwerk ssid zu verbinden?

mein raspi baut nicht immer eine verbindung zum wlan her... manchmal schaltet sich das wlan vom repeater auch zu spät ein.

daher würde ich gerne ein script alle 30-60 sekunden durchführen. das könnte ich einfahc über crontab... aber wie sieht das script aus? ein einfaches linux/debian script

danke euch lg jumbo

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 809

Wohnort: Hamburg

mein Ansatz (umsetzen muss du es dann selbst):

  • Ping entweder auf dein Gateway oder eine dir bekannte Webseite die immer erreichbar ist

  • Ist ping erfolgreich muss nichts gemacht werden da du ins internet/wlan Verbindung hast

  • Klappt der ping nicht dann den Netzwerk dienst neustarten und erneut prüfen ob es erfolgreich war

Das ist grob wie ich beginnen würde, und beim Testen dann halt fein Tuning

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

jumbo125 schrieb:

mein raspi baut nicht immer eine verbindung zum wlan her... manchmal schaltet sich das wlan vom repeater auch zu spät ein.

Wenn es sich um eine 24/7-Wlan-Verbindung handelt, könntest Du den den wpa_supplicant, mit einer _optimierten_ config für deinen Anwendungsfall (z. B. kein roaming, kein bg-scan, etc) kompilieren. Zum überwachen der Wlan-Verbindung eine timer-unit/service-unit und den wpa_cli mit einem action-Script für die Zustände connected bzw. disconnected benutzen.
Aber wenn Du einen _benutzerdefinierten_ wpa_supplicant (mit der richtigen wpa_supplicant.conf-Datei; d. h. u. a. auch mit "hardcodierter" BSSID) hast/benutzt, wird es fast keine Unterbrechung in der Wlan-Verbindung geben.

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 809

Wohnort: Hamburg

was ich mich Frage, warum nutz du nicht Ethernet. Da hast du dann nicht das Problem mit dem WLAN?

jumbo125

(Themenstarter)

Anmeldungsdatum:
4. April 2023

Beiträge: 40

micneu schrieb:

mein Ansatz (umsetzen muss du es dann selbst):

  • Ping entweder auf dein Gateway oder eine dir bekannte Webseite die immer erreichbar ist

  • Ist ping erfolgreich muss nichts gemacht werden da du ins internet/wlan Verbindung hast

  • Klappt der ping nicht dann den Netzwerk dienst neustarten und erneut prüfen ob es erfolgreich war

Das ist grob wie ich beginnen würde, und beim Testen dann halt fein Tuning

wenn ich den netzwerk dienst neu starte, versucht er automatisch eine verbindung herzustellen ?

micneu

Avatar von micneu

Anmeldungsdatum:
19. Januar 2021

Beiträge: 809

Wohnort: Hamburg

gehe ich von aus. ich setze in meinem netzwerk die raspis nur mit ethernet ein. deshalb kann ich es nicht für dich testen.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9721

Wohnort: Münster

jumbo125 schrieb:

[…] weiß jemand wie ein script aussehen soll, welches prüft, ob eine akjtive wlan verbindung besteht und falls nicht, soll es versuchen sich mit einem bestimmten netzwerk ssid zu verbinden?

Das Wiki weiß, wie man eine solche Aufgabe lösen kann: NetworkManager/Dispatcher

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3790

aber wie sieht das script aus?

Hier ein grober Vorschlag, sicherlich ausbaufähig. Setzt voraus, daß die WLAN-Verbindung per NetworkManager hergestellt ist.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#! /bin/bash

if [ "$(whoami)" != "root" ]; then
    echo "du musst root sein oder sudo benutzen"
    echo && exit 1
fi

pruefhost1="www.debian.org"
pruefhost2="www.google.de"
wartezeit=60
wlanssid="deine wlan ssid"
wlanpsk="dein wlan kennwort"

# initiale wartezeit bei systemstart
sleep 120

while [ true ];do
	echo
	echo warte $wartezeit sek.
	sleep $wartezeit
	echo prüfe verbindung
	ping $pruefhost1 -c 1 -W 1 &>/dev/null
	if [ $? -eq 0 ]; then
		echo verbunden
	else
		ping $pruefhost2 -c 1 -W 1 &>/dev/null
		if [ $? -eq 0 ]; then
			echo verbunden
		else
			echo nicht verbunden, beende NetworkManager.service
			systemctl stop NetworkManager.service
			sleep 10
			echo starte NetworkManager.service
			systemctl start NetworkManager.service
			sleep 10
			echo prüfe verbindung
			ping $pruefhost1 -c 1 -W 1 &>/dev/null
			if [ $? -eq 0 ]; then
				echo verbunden
			else
				ping $pruefhost2 -c 1 -W 1 &>/dev/null
				if [ $? -eq 0 ]; then
					echo verbunden
				else
					echo nicht verbunden, verbinde zu $wlanssid
					nmcli device wifi connect $wlanssid password $wlanpsk
				fi
			fi
		fi
	fi
done

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3790

Statt den PSK im Klartext ins Skript zu schreiben, kann man ihn auch "on the fly" aus der Verbindungsdatei auslesen:

wlanpsk=$(cat /etc/NetworkManager/system-connections/$wlanssid.nmconnection | grep psk= | cut -d '=' -f 2)

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

jumbo125 schrieb:

... wlan verbindung besteht ...

BTW: Teste auch über einen geeigneten Zeitraum (z. B. ca. 48 Std) ob der (persistente) promisc mode der Wlan-NIC, einen positiven Einfluss auf den Signal level einer 24/7 Wlan-Verbindung hat.

wxpte

Anmeldungsdatum:
20. Januar 2007

Beiträge: 1388

dingsbums schrieb:

aber wie sieht das script aus?

Hier ein grober Vorschlag, sicherlich ausbaufähig.

Verbesserungsvorschlag: statt den Exitstatus jedes Mal explizit abzufragen:

1
2
3
4
... 
	ping $pruefhost1 -c 1 -W 1 &>/dev/null
	if [ $? -eq 0 ]; then
...

könnte man das auch wie folgt formulieren:

1
2
3
...
if ping $pruefhost1 -c 1 -W 1 &>/dev/null; then
...

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14347

wxpte schrieb:

könnte man das auch wie folgt formulieren:

1
2
3
...
if ping $pruefhost1 -c 1 -W 1 &>/dev/null; then
...

Ja, ... wenn man icmp via Internet (... und Namensauflösung mit ping) testen will/muss. Wenn man nur den Wlan-Zugang zum Router/Repeater/etc. prüfen will, geht auch lokal arp (statt icmp). Z. B.:

if /usr/bin/arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.1 &>/dev/null; then
	exit 0
else
...
:~# arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.1 &>/dev/null; echo $?
0
:~# arping -c 5 -I wlan0 -f -q -w 5 -s 192.168.178.13 192.168.178.2 &>/dev/null; echo $?
1
Antworten |