Adva van egy laptop. Debian van rajta. Nagyon zavar, hogy amikor file-t másolok, akkor is néha a wireless lan-on keresztül másol, ha be van dugva a 100Base-T LAN. Hogyan lehet megoldani? Ennek jártam utána. A kiindulási alapnak a superuser.com egy nálam csak félig működő megoldását választottam. Némi küzdelem után azért sikerült működőképes alternatívát is kidolgoznom.
Az eredeti, félig működő megoldás az, hogy hozzunk létre két file-t, mint root (a kedvenc vi-unkkal, vagy ahogy tetszik), Majd "chmod 700"-at nekik.
/etc/network/ip-up.d/wlan
#!/bin/sh
# If eth0 goes up, disable wireless
if [ "$IFACE" = "eth0" ]; then
dbus-send --system --type=method_call \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.DBus.Properties.Set\
string:org.freedesktop.NetworkManager \
string:WirelessEnabled variant:boolean:false
fi
/etc/network/if-down.d/wlan
#!/bin/sh
# If eth0 goes down, enable wireless
if [ "$IFACE" = "eth0" ]; then
dbus-send --system --type=method_call \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.DBus.Properties.Set \
string:org.freedesktop.NetworkManager \
string:WirelessEnabled variant:boolean:true
fi
Csak a true/false-ben különböznek egymástól. A két szkriptet persze linkelhetjük is egymásra, de nem érdemes, mert sajnos nem működ rendesen. Csak az up fut le. A down valami miatt nem. A második sorba betettem, hogy a /tmp alá log-oljon valamit egy file-be, de down-ra semmi.
Utána próbálkoztam a /etc/network/interfaces módosításával. Ott is van egy up, pre-up, post-up és down, pre-down, post-down parancs minden interface-re. De ez is csak up-ra futott le. Hmmm... Valami nem kóser.
Nézzünk csak körül egy picit jobban. A /etc/network alatti if-pre-up.d, if-up.d, if-down-up.d, if-post-down.d könyvtárakban van egy be-soft-linkelt szkript, ami viszont mindig lefut. Ez a wpasupplicant. A környezeti változókat kiírattam a lefutáskor és azt láttam, hogy az IFACE='eth0'-val ezekre fut le: PHASE='post-up', PHASE='post-down'. Hurrá! Kerestem egy jó kis helyet (én az <<if [ "$IFACE" = lo ]; then>>-nel kezdődő if utánra tettem be)if [ "$IFACE" = eth0 -a "$ADDRFAM" = NetworkManager ]; then
És ez már működik! Ha van ethernet, akkor kikapcsol a wireless lan, ha kihúzom a ethernet kábelt, akkor bekapcsol. Kb. 15 másodpercet még kell várni, amíg feljön az új kapcsolat és után még kb. 30 mp-t, hogy az új kapcsolatra váltsanak az alkalmazások. És induláskor is, ha feljön az eth0, akkor lelövi a wlan0-át. Esetleg a PHASE helyett lehetne használni a MODE környezet változót. Ez start, illetve stop értékeket vehet fel.
if [ "$PHASE" = post-up ]; then on=false; else on=true; fi
dbus-send --system --type=method_call \
--dest=org.freedesktop.NetworkManager \
/org/freedesktop/NetworkManager \
org.freedesktop.DBus.Properties.Set \
string:org.freedesktop.NetworkManager \
string:WirelessEnabled variant:boolean:$on
fi
Még annyit változtattam, hogy a /etc/netwokk/interfaces file elején kiszedtem a kezelt lan interface-eket az auto kulcsszó utánról. Ez lett az eredmény:
auto lo
Ekkor a boot alatt nem kezd el a DHCP-vel szöszölni és egy kicsit gyorsul az (újra)indulás.
allow-hotplug eth0 wlan0
Néha-néha valami miatt a wlan nem jön fel, ha nincs induláskor bedugva az ethernet kábel. Ilyenkor root jogosultsággal a
/etc/init.d/network-manager restart
parancsot kell kiadni és az rendbe teszi a dolgokat. Legalább addig, amíg meg nem találom a probléma okát.
Kapcsolódjunk ki (és be) minden nap!
+jegyzések