Entschuldigung für meine vorherige Antwort, wie ich es vor Jahren getan hätte. Scheint, als hätten sich die Dinge geändert.
Es stellt sich heraus, dass Network Manager ALLE Skripte im /etc/NetworkManager/dispatcher.d/
Verzeichnis ausführt (die im Besitz von root sind, die ausführbar sind, von anderen Benutzern nicht gelesen werden können und nicht setuid), wenn sich eine Verbindung ändert (aufwärts, abwärts, vorab, vorab). .
Umgebungsvariablen werden vom Netzwerkmanager festgelegt und an dieses Skript übergeben. Sie interessieren sich für die Umgebungsvariable CONNECTION_UUID (enthält eine eindeutige Zeichenfolge).
So lösen Sie Ihr Problem (führen Sie ein Skript aus, wenn eine Verbindung zu einem bestimmten drahtlosen Netzwerk besteht):
1) Finden Sie die UUID der Funkverbindung heraus, an der Sie interessiert sind (indem Sie in die entsprechende Verbindungsdatei im /etc/NetworkManager/system-connections/
Verzeichnis schauen ).
2) Schreiben Sie ein Bash-Skript (oder Perl-, Python- oder was auch immer), das das tut, was Sie wollen, wenn die Umgebungsvariable CONNECTION_UUID mit der UUID des drahtlosen Netzwerks in (1) oben übereinstimmt.
3) /etc/NetworkManager/dispatcher.d/
Setzen Sie dieses Skript in und stellen Sie den Eigentümer und die Berechtigungen entsprechend ein.
Lesen Sie weiter: man networkmanager (und ein wenig stöbern in den Skripten in den oben genannten Verzeichnissen).
Ein Beispielskript:
#!/bin/bash
#####################################
# MounterBeast Script
# /etc/NetworkManager/dispatcher.d/02remotemount
# Copyright 2011 Nathan E. Williams
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# Usage:
# This script must be customized for your configuration.
# By default, the script will attempt to mount a CIFS share
# when a specified MAC address is found at the network gateway,
# or over sshfs if the MAC address of the gateway is not the specified MAC.
# e.g. I mount over CIFS to the servers internal IP when at home, and
# over sshfs when away from home.
#
# id gateway mac without physically checking the sticker:
# $ arp -n -a $(ip route show 0.0.0.0/0 | awk '{print $3}') | awk '{print $4}'
#
# Testing:
# up) sudo /etc/NetworkManager/dispatcher.d/02remotemount wlan0 up
# down) sudo /etc/NetworkManager/dispatcher.d/02remotemount wlan0 down
#####################################
#
# Configuration:
#
targetmac='xx:xx:xx:xx:xx:xx'
mount_user='$USER'
mount_pass='pass'
internal_server_name='192.168.1.102'
external_server_name='my.dyndns.com'
share_name="music"
mount_point='/mnt/remote'
ssh_port='22'
#
# Should not need to edit below
#
gateway=$(ip route show 0.0.0.0/0 | awk '{print $3}')
mactest=$(arp -n -a $gateway | awk '{print $4}')
if [[ "$mactest" == "$targetmac" ]]
then
case "$2" in
up)
sleep 5
mount -t cifs -o username=$mount_user,password=$mount_pass //$internal_server_name/$share_name $mount_point
;;
down)
umount -l $mount_point
;;
esac
else
case "$2" in
up)
sleep 5
sshfs -p $ssh_port $external_server_name:$share_name $mount_point
;;
down)
umount -l $mount_point
;;
esac
fi
exit $?
/etc/NetworkManager/dispatcher.d/01ifupdown
führt Skripte in/etc/networking/if-*
Verzeichnissengrep
die Systemverbindungsdateien verwendet. Funktioniert gut. So etwas wieessid=$(grep -l "uuid=$CONNECTION_UUID" /etc/NetworkManager/system-connections/*)
gefolgt vonessid=$(basename $essid)
.Ich weiß nicht, ob es eine Möglichkeit gibt, dies mit Network Manager zu tun. Es gibt wahrscheinlich eine, aber ich habe eine andere Lösung für Sie. Sie können Wicd installieren:
Wicd hat Unterstützung direkt auf der GTK-Oberfläche, um jedem Netzwerk, das Sie verbinden können, Pre-Script- und Post-Script-Unterstützung hinzuzufügen. Achten Sie darauf, dass Wicd den Network-Manager deinstalliert, damit er funktioniert (beide Konflikte). Wenn also etwas schief geht, sollten Sie die .deb des Network-Managers herunterladen oder eine Live-CD / Live-USB mit sich führen.
Wicd ist einfach zu bedienen und schneller zu verbinden, es fehlen jedoch einige erweiterte Funktionen von Network-Manager (wie VPN). Hier ist ein Screenshot:
quelle
Ja, Shell-Skripte in
/etc/NetworkManager/dispatcher.d/
für NetworkManager sind eine sehr gute Idee.Es gibt auch eine Dbus-Methode mit NetworkManager, die unterhaltsamer und komplizierter ist:
man nm-settings
.Eine Zusammenfassung der Argumente aus der Manpage von NetworkManager zu Shells
dispatcher
:Aktion kann sein: hoch, runter, vpn-hoch, vpn-runter, Hostname, dhcp4-Änderung, dhcp6-Änderung. (Veröffentlichung der Manpage: 17. Januar 2012)
Hier ist ein sehr einfaches Skript, um OpenVPN neu zu starten, nachdem eine Netzwerkschnittstelle war
up
:quelle