Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
nombre réponses : 24

#0 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 25/09/2009, à 16:28

coredump
Réponses : 726

Moi, j'ai une solution avec NetworkManager.
Il s'agit d'un service qui utilise d-bus pour piloter le NetworkManager.
Le principe est assez simple, mais le script est assez complexe.
...

Suite aux différents échanges qui ont été fait sur le sujet, j'utilise ce post, pour proposer une solution simple et accessible aux néophytes.
Cette solution permet de lancer automatiquement une connexion vpn et qu'elle se reconnecte automatiquement en cas de coupure.
Remarques :
- Cette solution n'est pas forcément compatible avec d'ancienne version d'ubuntu.
- Pour une utilisation avancée, voir les autres posts de cette discussion, en particulier le post #28 (http://forum.ubuntu-fr.org/viewtopic.ph … 7#p3225667) de Papou qui propose des scripts qui permettent de lancer la connexion automatique "à la demande".
- Pour ceux qui auraient déjà mis en place le script connection-service, celui-ci a un peu évolué, il faut donc le mettre à jour.

Voici, la démarche, en deux étapes, à suivre :

- ajouter ce script exécutable 02-loop-vpn dans /etc/NetworkManager/dispatcher.d/ en ayant pris soin de renseigner le nom de la connexion vpn
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

#!/bin/bash
# Script de lancement de connection VPN avec verification

CONNECTION_NAME="Connexion VPN 1"


while ! connection-service "$CONNECTION_NAME" status
do
  connection-service "$CONNECTION_NAME" start
  sleep 30
done

Soit, en ligne de commande :
sudo gedit /etc/NetworkManager/dispatcher.d/02-loop-vpn
copier/coller le code ci-dessus dans le fichier, et renseigner le champ CONNECTION_NAME avec le nom utilisé par le Network Manager pour votre connexion
sudo chmod +x /etc/NetworkManager/dispatcher.d/02-loop-vpn

- ajouter ce script exécutable connection-service dans /usr/local/bin/
/usr/local/bin/connection-service :

#!/bin/bash


	############
	# SETTINGS #
	############

get_connections_paths()
{
	dbus-send --system --print-reply --dest="$1" "/org/freedesktop/NetworkManagerSettings" "org.freedesktop.NetworkManagerSettings.ListConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_connection_settings()
{
	dbus-send --system --print-reply --dest="$1" "$2" org.freedesktop.NetworkManagerSettings.Connection.GetSettings
}

get_connection_string_setting()
{
	echo "$1" | grep -A 1 \""$2"\" | grep variant | cut -d '"' -f2
}

get_connection_id()
{
	get_connection_string_setting "$1" "id"
}

get_connection_type()
{
	get_connection_string_setting "$1" "type"
}

get_device_type_by_connection_type()
{
	echo "$1" | grep -q "ethernet" && echo 1 && return
	echo "$1" | grep -q "wireless" && echo 2 && return
	echo 0
}

find_connection_path()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		[ "$connection_settings_id" = "$2" ] && echo "$1" "$connection_path"
	done
}

find_connection_path_everywhere()
{
	find_connection_path "org.freedesktop.NetworkManagerSystemSettings" "$1"
	find_connection_path "org.freedesktop.NetworkManagerUserSettings" "$1"
}

print_connections_ids()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}

print_connections_ids_everywhere()
{
	print_connections_ids "org.freedesktop.NetworkManagerSystemSettings"
	print_connections_ids "org.freedesktop.NetworkManagerUserSettings"
}


	###########
	# DEVICES #
	###########

get_devices_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.NetworkManager.GetDevices" \
	| grep "object path" | cut -d '"' -f2
}

get_device_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Device" string:"$2" \
	| grep variant | awk '{print $3}'
}

get_device_type()
{
	get_device_property "$1" "DeviceType"
}

get_device_path_by_device_type()
{
	device_path_by_device_type="/"
	for device_path in `get_devices_paths`
	do
		device_type=`get_device_type "$device_path"`
		[ "$device_type" = "$1" ] && device_path_by_device_type="$device_path"
	done
	echo "$device_path_by_device_type"
}


	#######################
	# ACTIVES CONNECTIONS #
	#######################

get_actives_connections_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager" string:"ActiveConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_last_active_connection_path()
{
	get_actives_connections_paths | tail -n 1
}

get_parent_connection_path_by_device_type()
{
	parent_connection_path="/"
	[ "$1" = 0 ] && parent_connection_path=`get_last_active_connection_path`
	echo "$parent_connection_path"
}

get_active_connection_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Connection.Active" string:"$2" \
	| grep variant | awk -F '"' '{print $2}'
}

get_active_connection_service()
{
	get_active_connection_property "$1" "ServiceName"
}

get_active_connection_path()
{
	get_active_connection_property "$1" "Connection"
}

get_active_connection_path_by_connection_path()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		[ "$service" = "$1" ] && [ "$path" = "$2" ] && echo "$active_connection_path"
	done
}

print_actives_connections_ids()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		connection_settings=`get_connection_settings "$service" "$path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}


	##############
	# START/STOP #
	##############

start_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_connection_settings=`get_connection_settings $my_connection_complete_path`
	my_connection_type=`get_connection_type "$my_connection_settings"`
	my_connection_device_type=`get_device_type_by_connection_type "$my_connection_type"`
	
	my_connection_service=`echo $my_connection_complete_path | awk '{print $1}'`
	my_connection_path=`echo $my_connection_complete_path | awk '{print $2}'`
	my_connection_device_path=`get_device_path_by_device_type "$my_connection_device_type"`
	my_parent_connection_path=`get_parent_connection_path_by_device_type "$my_connection_device_type"`
	
	echo "connection_service=$my_connection_service"
	echo "connection_path=$my_connection_path"
	echo "connection_device_path=$my_connection_device_path"
	echo "parent_connection_path=$my_parent_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.ActivateConnection" string:"$my_connection_service" objpath:"$my_connection_path" objpath:"$my_connection_device_path" objpath:"$my_parent_connection_path"
}

stop_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_active_connection_path=`get_active_connection_path_by_connection_path $my_connection_complete_path`
	
	echo "active_connection_path=$my_active_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.DeactivateConnection" objpath:"$my_active_connection_path"
}


	########
	# MAIN #
	########

invalid_arguments()
{
	echo "Usage: `basename "$0"` connexion_name start|stop"
	echo "Connexion disponibles:"
	print_connections_ids_everywhere
	echo "Connexion actives:"
	print_actives_connections_ids
	exit 0
}

[ "$#" != 2 ] && invalid_arguments

case "$2" in
	"start")
		start_connection "$1"
        	;;
	"stop")
		stop_connection "$1"
		;;
	"restart")
		stop_connection "$1"
		start_connection "$1"
		;;
	"status")
		if print_actives_connections_ids | grep -q -x "$1"
		then
			echo "Connexion \"$1\" active"
			exit 0
		else
			echo "Connexion \"$1\" inactive"
			exit 1
		fi
		;;
	*)
		invalid_arguments
		;;
esac

Soit, en ligne de commande :
sudo gedit /usr/local/bin/connection-service
copier/coller le code ci-dessus dans le fichier, puis
sudo chmod +x /usr/local/bin/connection-service

Enjoy it!

#1 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 22/12/2009, à 16:57

coredump
Réponses : 726

Désolé, si je réponds un peu tard, ça fait un moment que je consulte pas le forum.

Voici ma solution, si ça t'intéresse toujours ou si ça intéresse quelqu'un d'autre.

L'origine du problème a deux sources par rapport au VPN avec Network Manager :
- quand on coche "Connecter automatiquement", ceci n'est pas pris en compte
- quand on coche "Disponible pour tous les utilisateurs", la connexion ne marche pas (à cause d'une histoire de clé quand on regarde les logs)
(En général, je trouve que le Network Manager a de légers disfonctionnements qui démontrent à mon avis quelques problèmes de conceptions ...)

Les scripts que je propose tente de remédier à cela.

Leur but est de connecter automatiquement le VPN et de le reconnecter automatiquement si il se déconnecte.
(Avec de légères modifications, ça pourrait se comporter différemment selon le besoin.)

Le principe est de se lancer et de s'arrêter en fonction d'une autre connexion parente (eth0 par exemple).
Puis de surveiller d-bus pour voir :
- si les paramètres de la connexion VPN sont disponibles (quand l'utilisateur se connecte)
- si la connexion VPN ne s'est pas déconnectée

Il y a deux scripts :
02-service-vpn -> à mettre dans /etc/NetworkManager/dispatcher.d/ (lance ou arrête "checkVPN" en fonction de la connexion parente)
checkVPN -> à mettre dans /usr/local/bin/ (script python qui surveille que la connexion VPN soit toujours bien connecter)
Tous deux doivent être exécutables.

checkVPN dépend d'un autre fichier :
nm_utils.py -> à mettre dans /usr/local/bin/ (outils pour piloter le nm en python)

Il y a deux champs à renseigner dans le script 02-service-vpn :
ETH_INTERFACE_NAME : l'interface de la connexion parente (par exemple : eth0)
VPN_CONNECTION_NAME : le nom de la connexion VPN qui a été renseigner dans le network manager
(Pour que ça marche pour plusieurs utilisateurs, il faut pour chacun définir la connexion VPN.)
(Il y a aussi la possibilité de décommenter des lignes pour avoir des traces.)


/etc/NetworkManager/dispatcher.d/02-service-vpn :

#!/bin/bash

ETH_INTERFACE_NAME="eth0"

# The name of the VPN connection to activate
VPN_CONNECTION_NAME="Connexion VPN"
# Or the uuid of the VPN connection to activate
#VPN_CONNECTION_NAME="UUID=abcf8915-bb27-4634-94e6-04c65261a73e"

SERVICE_VPN_LOG="/dev/null"
#SERVICE_VPN_LOG="/tmp/serviceVPN.log"

CHECK_VPN_LOG="/dev/null"
#CHECK_VPN_LOG="/tmp/checkVPN.log"

echo `date`": $0 $@" >> "$SERVICE_VPN_LOG"

[ "$1" != "$ETH_INTERFACE_NAME" ] && exit 0

case "$2" in
    "up")
        echo "Starting CheckVPN ... ("`which checkVPN`")" >> "$SERVICE_VPN_LOG"
        # On vérifie que checkVPN ne tourne pas déjà
        if [ "`pgrep checkVPN`" == "" ]
        then
            echo "CheckVPN started." >> "$SERVICE_VPN_LOG"
            checkVPN "$VPN_CONNECTION_NAME" > "$CHECK_VPN_LOG" 2>&1 &
        else
            echo "CheckVPN already running !" >> "$SERVICE_VPN_LOG"
        fi
        ;;
    "down")
        echo "Stoping checkVPN ..." >> "$SERVICE_VPN_LOG"
        if [ "`pgrep checkVPN`" == "" ]
        then
            echo "CheckVPN not running !" >> "$SERVICE_VPN_LOG"
        else
            pkill checkVPN
            echo "CheckVPN stopped." >> "$SERVICE_VPN_LOG"
        fi
        ;;
    *)
        echo "Nothing to do" >> "$SERVICE_VPN_LOG"
        ;;
esac

/usr/local/bin/checkVPN :

#!/usr/bin/python -u
# coding=UTF-8


import sys
import dbus
from dbus.mainloop.glib import DBusGMainLoop
import gobject
from nm_utils import *


VPN_CONNECTION_UUID = VPN_CONNECTION_NAME = None

# Default values :
# The name of the VPN connection to activate
#VPN_CONNECTION_NAME = "Connexion VPN 1"
# or the uuid of the VPN connection to activate
#VPN_CONNECTION_UUID = "fabf8915-bb27-4634-94e6-04c65261a73e"


if len(sys.argv) > 1:
    vpn_argument = sys.argv[1]
    VPN_CONNECTION_UUID = VPN_CONNECTION_NAME = None
    if (vpn_argument[:5] == "UUID="):
        VPN_CONNECTION_UUID = vpn_argument[5:]
        print "VPN_CONNECTION_UUID=%s" % (VPN_CONNECTION_UUID)
    else:
        VPN_CONNECTION_NAME = vpn_argument
        print "VPN_CONNECTION_NAME=%s" % (VPN_CONNECTION_NAME)

if (not VPN_CONNECTION_UUID) and (not VPN_CONNECTION_NAME):
    print "Usage : "+sys.argv[0]+" connexion_vpn_name"
    print "Liste des connexions diponibles :"
    print_connections_infos()
    sys.exit(1)


vpn_connection_infos = {'vpn_connection_settings': None,
                        'vpn_connection_path': None}


def get_vpn_connection_settings():
    if VPN_CONNECTION_UUID:
        return get_connection_settings_by_uuid(VPN_CONNECTION_UUID)
    if VPN_CONNECTION_NAME:
        return get_connection_settings_by_name(VPN_CONNECTION_NAME)
    return None

def get_vpn_connection_path():
    if VPN_CONNECTION_UUID:
        return get_active_connection_path_by_uuid(VPN_CONNECTION_UUID)
    if VPN_CONNECTION_NAME:
        return get_active_connection_path_by_name(VPN_CONNECTION_NAME)
    return None

def get_eth_active_connection_path():
    try:
        active_connections_paths = get_active_connections_paths()
        active_connections_paths_count = len(active_connections_paths)
        if active_connections_paths_count == 0:
            return None
        return active_connections_paths[active_connections_paths_count-1]
    except Exception as exception:
        print exception
    return None


def update_vpn_connection_settings():
    vpn_connection_settings = get_vpn_connection_settings()
    vpn_connection_infos['vpn_connection_settings'] = vpn_connection_settings
    print "update_vpn_connection_settings=%s" % get_connection_infos(vpn_connection_settings)

def update_vpn_connection_path():
    vpn_connection_path = get_vpn_connection_path()
    vpn_connection_infos['vpn_connection_path'] = vpn_connection_path
    print "update_vpn_connection_path: vpn_connection_path=%s" % vpn_connection_path


def start_connection(settings, active_connection_path):
    
    def reply_handler(opath):
        vpn_connection_path = opath
        vpn_connection_infos['vpn_connection_path'] = vpn_connection_path
    
    def error_handler(*args):
        print args
    
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManager')
    iface.ActivateConnection(get_connection_settings_type(settings),
                             get_connection_settings_path(settings),
                             dbus.ObjectPath("/"),
                             active_connection_path,
                             reply_handler=reply_handler,
                             error_handler=error_handler)


def checkVPN():
    
    vpn_connection_settings = vpn_connection_infos['vpn_connection_settings']
    # Do nothing if vpn connection settings don't exist
    print "checkVPN: vpn_connection_settings=%s" % get_connection_infos(vpn_connection_settings)
    if not vpn_connection_settings:
        return
    
    vpn_connection_path = vpn_connection_infos['vpn_connection_path']
    # Do nothing if vpn connection already exist
    print "checkVPN: vpn_connection_path=%s" % vpn_connection_path
    if vpn_connection_path:
        return
    
    eth_connection_path = get_eth_active_connection_path()
    print "checkVPN: eth_connection_path=%s" % eth_connection_path
    # Do nothing if eth connection don't exist
    if not eth_connection_path:
        return
    
    start_connection(vpn_connection_settings, eth_connection_path)


def handle_connection_settings_changed():
    print "handle_connection_settings_changed"
    update_vpn_connection_settings()
    checkVPN()

def handle_connections_changed():
    print "handle_connections_changed"
    update_vpn_connection_path()
    checkVPN()


def all_signal_receiver(*args, **kwargs):
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManagerSettings"):
        handle_connection_settings_changed()
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManagerSettings.Connection")\
            and (kwargs['signal_name'] == "Updated"):
        handle_connection_settings_changed()
    if (kwargs['dbus_interface'] == "org.freedesktop.NetworkManager")\
            and (kwargs['signal_name'] == "PropertiesChanged")\
            and args[0].has_key('ActiveConnections'):
        handle_connections_changed()


DBusGMainLoop(set_as_default=True)

dbus.SystemBus().add_signal_receiver(all_signal_receiver,
    interface_keyword='dbus_interface', member_keyword='signal_name')

update_vpn_connection_settings()
update_vpn_connection_path()
checkVPN()

gobject.MainLoop().run()

/usr/local/bin/nm_utils.py :

# coding=UTF-8

import dbus


# Get connection settings from settings type and settings path
# (settings type is 'org.freedesktop.NetworkManagerSystemSettings' or 'org.freedesktop.NetworkManagerUserSettings')
def get_connection_settings(settings_type, settings_path):
    proxy = dbus.SystemBus().get_object(settings_type, settings_path)
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManagerSettings.Connection')
    settings = iface.GetSettings()
    settings['settings-type'] = settings_type
    settings['settings-path'] = settings_path
    return settings


# Get differents informations from connection settings
def get_connection_settings_type(settings):
    return settings['settings-type']

def get_connection_settings_path(settings):
    return settings['settings-path']

def get_connection_settings_uuid(settings):
    return settings['connection']['uuid']

def get_connection_settings_name(settings):
    return settings['connection']['id']


# Get all settings paths associated to a type of settings
def get_connections_settings_paths(settings_type):
    try:
        proxy = dbus.SystemBus().get_object(settings_type, '/org/freedesktop/NetworkManagerSettings')
        iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.NetworkManagerSettings')
        return iface.ListConnections()
    except Exception as exception:
        print " !!! get_connections_settings_paths:"
        print exception
    return []

# Get all connections settings associated to a type of settings
def get_connections_settings_by_type(settings_type):
    connections_settings = []
    for settings_path in get_connections_settings_paths(settings_type):
        connection_settings = get_connection_settings(settings_type, settings_path)
        connections_settings.append(connection_settings)
    return connections_settings

# Get all connections settings
def get_all_connections_settings():
    return get_connections_settings_by_type('org.freedesktop.NetworkManagerUserSettings') + \
           get_connections_settings_by_type('org.freedesktop.NetworkManagerSystemSettings')


# Get the esssential informations of the connection
def get_connection_infos(settings):
   if settings:
      conn = settings['connection']
      return "%s (type=%s, UUID=%s)" % (conn['id'], conn['type'], conn['uuid'])
   else:
      return None

# Print the list of connections
def print_connections_infos():
    for connection_settings in get_all_connections_settings():
        print get_connection_infos(connection_settings)


# Get connection settings from the settings UUID
def get_connection_settings_by_uuid(uuid):
    try:
        for settings in get_all_connections_settings():
            if get_connection_settings_uuid(settings) == uuid:
                return settings
    except Exception as exception:
        print exception
    return None

# Get connection settings from the settings UUID
def get_connection_settings_by_name(name):
    try:
        for settings in get_all_connections_settings():
            if get_connection_settings_name(settings) == name:
                return settings
    except Exception as exception:
        print exception
    return None


# Get list of active connections paths
def get_active_connections_paths():
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager')
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
    return iface.Get('org.freedesktop.NetworkManager', 'ActiveConnections')

# Get connection settings from the connection path
def get_connection_settings_by_connection_path(connection_path):
    proxy = dbus.SystemBus().get_object('org.freedesktop.NetworkManager', connection_path)
    iface = dbus.Interface(proxy, dbus_interface='org.freedesktop.DBus.Properties')
    settings_type = iface.Get('org.freedesktop.NetworkManager.Connection.Active', 'ServiceName')
    settings_path = iface.Get('org.freedesktop.NetworkManager.Connection.Active', 'Connection')
    return get_connection_settings(settings_type, settings_path)

# Get list of active connections paths
def get_active_connections_settings():
    actives_connections_settings = []
    for connection_path in get_active_connections_paths():
        settings = get_connection_settings_by_connection_path(connection_path)
        settings['connection-path'] = connection_path
        actives_connections_settings.append(settings)
    return actives_connections_settings

# Look for connexion path in active connexions with particular uuid
def get_active_connection_path_by_uuid(uuid):
    try:
        for connection_path in get_active_connections_paths():
            settings = get_connection_settings_by_connection_path(connection_path)
            if get_connection_settings_uuid(settings) == uuid:
                return connection_path
    except Exception as exception:
        print exception
    return None

# Look for connexion path in active connexions with particular name
def get_active_connection_path_by_name(name):
    try:
        for connection_path in get_active_connections_paths():
            settings = get_connection_settings_by_connection_path(connection_path)
            if get_connection_settings_name(settings) == name:
                return connection_path
    except Exception as exception:
        print exception
    return None

Voilà, ça peut certainement être amélioré ou généralisé, mais j'espère au moins que ça pourra te dépanner.

#2 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 29/12/2009, à 09:21

coredump
Réponses : 726

Merci ElFabio pour ton soutien et content que ça puisse te servir.

Une solution plus propre serait de trouver une correction au niveau du network manager ou de l'applet (est-ce que l'applet KDE marche ?).

Si j'avais un peu de temps et plus d'expérience dans la rédaction d'articles, j'aurais bien fait un tuto sur l'utilisation de d-bus pour contrôler le NM, car la documentation à ce sujet est assez maigre sur le net.

Voici quand même quelques liens qui m'ont été utiles :
  - http://doc.ubuntu-fr.org/networkmanager … e_commande
  - http://doc.ubuntu-fr.org/dbus
  - http://old.nabble.com/dbus-and-OpenVPN- … 05375.html
  - http://projects.gnome.org/NetworkManage … /spec.html
  - http://linuxfr.org/forums/15/27406.html
  - http://dbus.freedesktop.org/doc/dbus-py … orial.html

Je recommande aussi l'interface graphique d-feet pour s'exercer à utiliser d-bus (pratique aussi pour retrouver les API des services).
(Quand on veut être "listener" - à l'écoute - d'un service, la commande dbus-monitor aussi est pratique.)


Et pour ceux qui voudraient piloter NM à l'aide de d-bus, voici quelques exemples de lignes de commande qui permettent de le faire :

Afficher la liste des chemins des définitions des connexion selon leurs appartenances (système - disponibles pour tous les utilisateurs / personnel - propre à l'utilisateur) :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManagerSystemSettings "/org/freedesktop/NetworkManagerSettings" \
	org.freedesktop.NetworkManagerSettings.ListConnections

(ou --dest="org.freedesktop.NetworkManagerUserSettings")

Afficher les paramètres d'une connexion selon son appartenance et connaissant son chemin

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManagerSystemSettings "/org/freedesktop/NetworkManagerSettings/0" \
	org.freedesktop.NetworkManagerSettings.Connection.GetSettings

(ou --dest="org.freedesktop.NetworkManagerUserSettings")

Afficher la liste des chemins des connexions actives :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.DBus.Properties.Get string:"org.freedesktop.NetworkManager" string:"ActiveConnections"

Afficher une propriété d'une connexion active connaissant son chemin :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager/ActiveConnection/2" \
	org.freedesktop.DBus.Properties.Get string:"org.freedesktop.NetworkManager.Connection.Active" string:"nom_de_la_propriete"

"nom_de_la_propriete" est à renseigner.
Par exemple, "nom_de_la_propriete" peut-être "ServiceName" ou "Connection" pour connaître l'appartenance et le chemin de la définition de la connexion.

Arrêter une connection active connaissant son chemin :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.DeactivateConnection objpath:"/org/freedesktop/NetworkManager/ActiveConnection/2"

Démarrer une connexion :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.ActivateConnection string:"org.freedesktop.NetworkManagerSystemSettings" objpath:"/org/freedesktop/NetworkManagerSettings/0" objpath:"/org/freedesktop/NetworkManager/Devices/0" objpath:"/"

ou dans le cas d'une connection vpn :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
	org.freedesktop.NetworkManager.ActivateConnection string:"org.freedesktop.NetworkManagerUserSettings" objpath:"/org/freedesktop/NetworkManagerSettings/1" objpath:"/" objpath:"/org/freedesktop/NetworkManager/ActiveConnection/2"

Le problème de cette commande est qu'il faut passer en argument de la commande le chemin du device (ethN ou rien pour le vpn) et le chemin de la connexion active dont elle dépend (si elle n'utilise pas de device). Malheureusement ces informations ne sont pas évidentes à déduire.


Pour terminer voici un exemple de script utilisant ces commandes et permettant de démarrer ou d'arrêter une connexion en lui passant le nom de la connexion.
Pour l'utiliser, nommer le fichier "connection-service", le rendre exécutable et placer le dans "/usr/local/bin/", puis taper :
connection-service "nom_de_la_connexion" start|stop
Par exemple :
connection-service "Connection VPN 1" start

/usr/local/bin/connection-service :

#!/bin/bash


	############
	# SETTINGS #
	############

get_connections_paths()
{
	dbus-send --system --print-reply --dest="$1" "/org/freedesktop/NetworkManagerSettings" "org.freedesktop.NetworkManagerSettings.ListConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_connection_settings()
{
	dbus-send --system --print-reply --dest="$1" "$2" org.freedesktop.NetworkManagerSettings.Connection.GetSettings
}

get_connection_string_setting()
{
	echo "$1" | grep -A 1 \""$2"\" | grep variant | cut -d '"' -f2
}

get_connection_id()
{
	get_connection_string_setting "$1" "id"
}

get_connection_type()
{
	get_connection_string_setting "$1" "type"
}

get_device_type_by_connection_type()
{
	echo "$1" | grep -q "ethernet" && echo 1 && return
	echo "$1" | grep -q "wireless" && echo 2 && return
	echo 0
}

find_connection_path()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		[ "$connection_settings_id" = "$2" ] && echo "$1" "$connection_path"
	done
}

find_connection_path_everywhere()
{
	find_connection_path "org.freedesktop.NetworkManagerSystemSettings" "$1"
	find_connection_path "org.freedesktop.NetworkManagerUserSettings" "$1"
}

print_connections_ids()
{
	for connection_path in `get_connections_paths "$1"`
	do
		connection_settings=`get_connection_settings "$1" "$connection_path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}

print_connections_ids_everywhere()
{
	print_connections_ids "org.freedesktop.NetworkManagerSystemSettings"
	print_connections_ids "org.freedesktop.NetworkManagerUserSettings"
}


	###########
	# DEVICES #
	###########

get_devices_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.NetworkManager.GetDevices" \
	| grep "object path" | cut -d '"' -f2
}

get_device_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Device" string:"$2" \
	| grep variant | awk '{print $3}'
}

get_device_type()
{
	get_device_property "$1" "DeviceType"
}

get_device_path_by_device_type()
{
	device_path_by_device_type="/"
	for device_path in `get_devices_paths`
	do
		device_type=`get_device_type "$device_path"`
		[ "$device_type" = "$1" ] && device_path_by_device_type="$device_path"
	done
	echo "$device_path_by_device_type"
}


	#######################
	# ACTIVES CONNECTIONS #
	#######################

get_actives_connections_paths()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "/org/freedesktop/NetworkManager" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager" string:"ActiveConnections" \
	| grep "object path" | cut -d '"' -f2
}

get_last_active_connection_path()
{
	get_actives_connections_paths | tail -n 1
}

get_parent_connection_path_by_device_type()
{
	parent_connection_path="/"
	[ "$1" = 0 ] && parent_connection_path=`get_last_active_connection_path`
	echo "$parent_connection_path"
}

get_active_connection_property()
{
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" "$1" "org.freedesktop.DBus.Properties.Get" string:"org.freedesktop.NetworkManager.Connection.Active" string:"$2" \
	| grep variant | awk -F '"' '{print $2}'
}

get_active_connection_service()
{
	get_active_connection_property "$1" "ServiceName"
}

get_active_connection_path()
{
	get_active_connection_property "$1" "Connection"
}

get_active_connection_path_by_connection_path()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		[ "$service" = "$1" ] && [ "$path" = "$2" ] && echo "$active_connection_path"
	done
}

print_actives_connections_ids()
{
	for active_connection_path in `get_actives_connections_paths`
	do
		service=`get_active_connection_service $active_connection_path`
		path=`get_active_connection_path $active_connection_path`
		connection_settings=`get_connection_settings "$service" "$path"`
		connection_settings_id=`get_connection_id "$connection_settings"`
		echo "$connection_settings_id"
	done
}


	##############
	# START/STOP #
	##############

start_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_connection_settings=`get_connection_settings $my_connection_complete_path`
	my_connection_type=`get_connection_type "$my_connection_settings"`
	my_connection_device_type=`get_device_type_by_connection_type "$my_connection_type"`
	
	my_connection_service=`echo $my_connection_complete_path | awk '{print $1}'`
	my_connection_path=`echo $my_connection_complete_path | awk '{print $2}'`
	my_connection_device_path=`get_device_path_by_device_type "$my_connection_device_type"`
	my_parent_connection_path=`get_parent_connection_path_by_device_type "$my_connection_device_type"`
	
	echo "connection_service=$my_connection_service"
	echo "connection_path=$my_connection_path"
	echo "connection_device_path=$my_connection_device_path"
	echo "parent_connection_path=$my_parent_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.ActivateConnection" string:"$my_connection_service" objpath:"$my_connection_path" objpath:"$my_connection_device_path" objpath:"$my_parent_connection_path"
}

stop_connection()
{
	my_connection_complete_path=`find_connection_path_everywhere "$1"`
	my_active_connection_path=`get_active_connection_path_by_connection_path $my_connection_complete_path`
	
	echo "active_connection_path=$my_active_connection_path"
	
	dbus-send --system --print-reply --dest="org.freedesktop.NetworkManager" /org/freedesktop/NetworkManager "org.freedesktop.NetworkManager.DeactivateConnection" objpath:"$my_active_connection_path"
}


	########
	# MAIN #
	########

invalid_arguments()
{
	echo "Usage: `basename "$0"` connexion_name start|stop"
	echo "Connexion disponibles:"
	print_connections_ids_everywhere
	echo "Connexion actives:"
	print_actives_connections_ids
	exit 0
}

[ "$#" != 2 ] && invalid_arguments

case "$2" in
	"start")
		start_connection "$1"
        	;;
	"stop")
		stop_connection "$1"
		;;
	"restart")
		stop_connection "$1"
		start_connection "$1"
		;;
	"status")
		if print_actives_connections_ids | grep -q -x "$1"
		then
			echo "Connexion \"$1\" active"
			exit 0
		else
			echo "Connexion \"$1\" inactive"
			exit 1
		fi
		;;
	*)
		invalid_arguments
		;;
esac

#3 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 29/12/2009, à 19:39

coredump
Réponses : 726

Par les temps qui courent, il vaut mieux surfer bien couvert wink

#4 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 30/12/2009, à 13:17

coredump
Réponses : 726

À noter, que le script "connection-service" défini dans mon post #11 ci-dessus peut aussi être utilisé pour connecter automatiquement le VPN.

Pour cela, créer un script "vpn-autostart" exécutable dans "/usr/local/bin/",
/usr/local/bin/vpn-autostart :

#!/bin/bash

# Délai de 10 secondes pour laisser le temps à nm-applet de démarrer
sleep 10 && connection-service "Connection VPN 1" start

Ajouter ensuite un programme "VPN" dans la liste des "Applications au démarrage" avec comme commande :

vpn-autostart

Ceci démarrera la connexion "Connection VPN 1" à l'ouverture de la session.

Et pour reconnecter automatiquement la connexion en cas de coupure, ajouter ce script "02-loop-vpn" exécutable dans "/etc/NetworkManager/dispatcher.d/":
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

#!/bin/bash

[ "$2" = "vpn-down" ] && vpn-autostart

Et voilà !

#5 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 02/01/2010, à 12:11

coredump
Réponses : 726

Bonne année à tous  !

Au sujet de ton problème, ElFabio, je ne pense pas pouvoir t'aider beaucoup.

À vue de nez, voici mes impressions :

- Concernant le script de reconnexion, ça m'étonnerait qu'il puisse provoquer un "engorgement".
La plupart du temps il est au repos (en attente d'évènements) et quand il bosse, il ne fait jamais que quelques petites opérations.
Le seul petit souci que je verrais, serait le délai de reconnexion.
En cas de coupure, il cherche instantanément à se reconnecter et ce n'est peut-être pas très bon.
J'ai remarqué qu'en cas de coupure, la reconnexion ne se fait pas toujours à la première tentative.
Le fait d'envoyer des requêtes de reconnexion aussi proches n'est peut-être pas très bon.
En même temps, une fois qu'il s'est reconnecté, je n'ai pas observé pour ma part de diminution de la bande passante.

Mais, si tu veux chercher dans cette voie, tu peux essayer avec l'autre méthode (elle n'utilise pas de process en fond de tâche)
et jouer sur le délai de reconnection.

Les autres pistes pourraient venir à mon avis de la connexion Wifi, du client torrent ou du service VPN :

- Pour la connexion Wifi, j'ai entendu dire que le peer-to-peer n'est pas très bon.
J'ai eu à une époque un fournisseur internet wifi qui interdisait de faire du peer-to-peer sur son réseau (sinon ça le faisait planter).
De cette époque, j'ai pris l'habitude de faire du warez, je n'utilise les torrents que de façon ponctuel, donc je n'ai pas trop d'expérience à ce sujet.
Tout ce que je peux te dire, c'est que je ne rencontre pas ce problème avec les boards warez et JDownloader.

Pour explorer cette piste, il faudrait que tu es la possibilité de tester la différence avec une connexion filaire,
ou consulter les forums sur les torrents et le Wifi.

- Pour le client torrent, peut-être que le fait d'avoir des coupures le perturbe.
Une possibilité pourrait être de le relancer quand tu observes une diminution de débit et voir si ça change quelque chose.
Ou voir si tu observes aussi sur cette baisse de débit sur un test de bande passante (avec speedtest.net, par exemple).

- Le fournisseur VPN peut-être aussi offre de moins bon service au bout d'une certaine durée de connexion.
Là, si tu as la possibilité d'essayer une autre connexion VPN pour voir la différence.
Ou provoquer volontairement les coupures VPN depuis l'applet du Network Manager pour voir si ce sont bien les coupures qui font baisser le débit.

En gros, essaye de voir, et si c'est possible, si ton problème persiste :
- sans vpn (mais ça, tu le sais surement déjà)
- ou avec une connexion réseau filaire
- ou en redémarrant le client torrent
- ou en redémarrant le Network Manager (sudo service network-manager restart, NetworkManager pour les versions d'ubuntu plus anciennes)
- ou en espaçant les délais entre les reconnections
- ou avec un autre fournisseur VPN (personnellement, j'utilise HideMyNet, un peu payant)
ça t'aidera peut-être mieux à localiser ton problème qu'en redémarrant le pc.

Bonne chance !

#6 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 18/01/2010, à 15:41

coredump
Réponses : 726

Tout d'abord merci ElFabio pour ton retour d'expérience.
A mon avis :
- la première solution (en python) est plus fiable, car le service tourne en tâche de fond et ne dépend  pas de la connexion de l'utilisateur, mais plus complexe et donc plus difficile à maintenir,
- la deuxième (en shell) est plus simple et plus clair, et donc plus adaptable et plus facile à maintenir, et par expérience marche bien.
Et en définitif, je conseillerai donc plutôt celle-ci.
Pour rappel, cette méthode est décrite dans le post #15 avec le script "connection-service" de la fin du poste #11.
(Si je trouve un peut de temps, j'en ferais bien la synthèse dans un tuto ...)

Ensuite par rapport à Papou, si tu veux que le vpn se reconnecte quand ta connexion adsl se reconnecte (j'imagine que tu utilises la deuxième méthode et qu'il ne s'agit pas d'une connexion adsl pppoe ?), tu peux essayer d'ajouter cette ligne dans le script
/etc/NetworkManager/dispatcher.d/02-loop-vpn :

[ "$2" = "up" ] && vpn-autostart

(Pour voir si ça marche, tu peux essayer en redémarrant à la main ton modem en cours de connexion.)

#7 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 19/01/2010, à 23:15

coredump
Réponses : 726

Oui, en fait je m'en doutais un peu Papou ;
même si le modem se déconnecte à internet, l'ordi lui ne se déconnecte pas du modem.
Par contre, j'aurais penser que le NM envoyait un signal "vpn-up" au moment de tenter la connexion et qu'il renvoyait un signal "vpn-down" si la connexion échouait, ce qui aurait permis de boucler tant que la connexion n'est pas établie.

Du coup, il faudrait peut-être mettre en place un script pour ce cas particulier qui se fie plutôt au résultat d'ifconfig.
Par exemple :
/usr/local/bin/loop-vpn :

#!/bin/bash

while ! ifconfig | grep ppp0
do
  vpn-autostart
  sleep 30
done

et appeler ce script à la place de "vpn-autostart" aux autres endroits (au démarrage et dans 02-loop-vpn).
J'ai mis ppp0 à titre d'exemple, il faut mettre le nom de l'interface de la connexion vpn à la place.

Plutôt que d'utiliser ifconfig avec le nom de l'interface, ce serait aussi possible d'utiliser un script qui liste les noms des connexions actives comme sait le faire le script "connection-service" quand on le lance sans argument.

Voilà, dis-moi ce que tu en penses - pour ma part, je ne l'ai pas testé. Et tu peux aussi essayer avec l'autre méthode en python.
Mais c'est vrai que les connexions pppoe compliquent bien les choses, je ne sais d'ailleurs pas comment on fait avec le NM.

Bon courage !

#8 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 20/01/2010, à 23:36

coredump
Réponses : 726

@ Papou
Si ça marche, c'est le principal !
Il faut bien faire avec les moyens du bord en attendant d'avoir un correctif du NM.
Et puis au moins tu sais ce que ça fait.
Remarque : plutôt que des cp et des rm, tu peux aussi faire des :
chmod -x /etc/NetworkManager/dispatcher.d/02vpnredo
et chmod +x.

@ Corn51130
Il semblerait que ton service network-manager ne tourne pas.
Ceci peut venir du fait que tu ais configuré des connexions en manuel.
Dans ton fichier /etc/network/interfaces, tu ne devrais avoir que ces deux lignes là :

auto lo
iface lo inet loopback

#9 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 21/01/2010, à 20:14

coredump
Réponses : 726

Oui, l'API a dû changer, j'ai cherché sur le site de Network Manager,
http://projects.gnome.org/NetworkManager/developers/
mais il n'y a que les API de la version 0.7 et 0.8.

Regarde avec d-feet (System bus), il doit manquer les bus :
org.freedesktop.NetworkManagerSystemSettings
org.freedesktop.NetworkManagerUserSettings
et le bus org.freedesktop.NetworkManager ne doit pas comporter la méthode GetDevices.

Si c'est bien ça, cela veut dire que le script "connection-service" n'est pas compatible avec cette version du NM.
À moins de trouver les moyens équivalents de faire le job, la solution la plus simple reste d'upgrader la version du NM.

Si l'API n'a pas trop changé, une possibilité serait de trouver à la main (avec d-feet) les arguments de la commande - ou celle équivalente - de lancement de la connexion :

dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager "/org/freedesktop/NetworkManager" \
    org.freedesktop.NetworkManager.ActivateConnection ...

Et que ton script "connection-service" ne fasse que ça (sans faire tous les traitements pour déterminer les bons arguments - en particulier tout ce qui concerne les "Settings").

Par exemple, si les arguments de cette commande n'ont pas trop changé :
connection_service=deux possibilités user/system pour le vpn system ne marche pas, donc c'est user
connection_path=à rechercher mais ne change pas
connection_device_path=dans le cas du vpn c'est "/"
parent_connection_path=trouver un moyen de le déterminer

Exemple, pour ma part :

connection_service=org.freedesktop.NetworkManagerUserSettings
connection_path=/org/freedesktop/NetworkManagerSettings/3
connection_device_path=/
parent_connection_path=/org/freedesktop/NetworkManager/ActiveConnection/0

Une fois que tu as le bon "connection_path", seul "parent_connection_path" change à chaque reconnexion.

Bon courage !

#10 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 26/01/2010, à 22:19

coredump
Réponses : 726

Je ne perds pas espoir de trouver le temps de faire un tuto à partir de cette discussion.
En proposant la solution de démarrage automatique avec le script connexion-service et la solution de Papou pour utiliser ce script dans des lanceurs permettant de démarrer et arrêter le VPN à la demande.

En attendant, si la connexion automatique te conviens, j'ai trouvé ce lien qui indique la démarche à suivre à partir des différents posts :
http://papillon-butineur.blogspot.com/2 … n-cas.html

#11 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 27/01/2010, à 22:33

coredump
Réponses : 726

Les scripts qui se trouve dans /etc/NetworkManager/dispatcher.d/ sont appelés par le network manager chaque fois qu'une connexion change d'état.
Le premier argument est l'interface qui a changé, le deuxième est le type de changement.

Par exemple, si tu veux tracer ce qu'il fait, tu peux y ajouter ce script trace.sh (il faut qu'il soit exécutable) :

#!/bin/bash

date >> /tmp/network-manager.log
echo "$0" "$@" >> /tmp/network-manager.log

Tu pourra suivre les changements de tes connexions dans le fichier /tmp/network-manager.log.

Donc même si les scripts ne bouclent pas, ils sont systématiquement appelés quand une connexion change.

Pour plus de prudence, tu peux aussi utiliser les scripts de Papou (post #28) qui ne tiennent pas compte des arguments passés par le network-manager et qui bouclent tant que la connexion n'est pas établie, de telle sorte que soit la connexion est présente et le script ne tourne pas, et soit elle s'est déconnectée et le script tourne en boucle.

Mais le nerf de la guerre est le script "connection-service" (post #11), place le dans le répertoire /usr/local/bin/ et apprend à lancer tes connexions en ligne de commande.
Tu pourras ensuite trouver le script qui te convient pour assurer ta connexion vpn.
Par exemple, si tu veux faire simple et sûr, place le script "vpnstartandcheck" de Papou dans /etc/NetworkManager/dispatcher.d/.
Ta connexion vpn tournera en permanence du démarrage à l'arrêt de l'ordinateur.

Bon courage !

#12 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 28/01/2010, à 11:32

coredump
Réponses : 726
MasterDav a écrit :

Je suppose qu'il en va de même avec la plupart des dossiers en .d qui se trouvent dans etc ? (là je HS un peu)

Effectivement, il s'agit bien de ça. Par exemple,
pour init (le premier service qui gère tous les autres services), tu as rc0.d, rc1.d, ... (qui font référence à init.d)
pour network tu as /etc/network/if-up.d /etc/network/if-down.d ...
pour grub, tu as /etc/grub.d
...

MasterDav a écrit :

Ceci dit, est-ce que ça serait pas plus "propre" de placer directement un seul script dans /etc/NetworkManager/dispatcher.d/

Oui, ce serait la solution la plus propre et je pense que le script fonctionne, mis à part le "down" de "tap0" à contrôler (avec le script trace, par exemple) car il me semble que pour le vpn, NM n'utilise pas up/down mais vpn-up/vpn-down ...

Je pense d'ailleurs que déjà pour ta première solution le script de démarrage est inutile.

Tu peux d'ailleurs faire encore plus simple, et pas forcément plus bourrin, en plaçant seulement le script vpn-loop dans /etc/NetworkManager/dispatcher.d/.
C'est à dire que le network-manager tentera systématiquement de connecter, si nécessaire, le vpn quand il y aura un changement d'état des connexions, mais que rien ne tourne tant que le vpn reste connecté.

Bonne continuation !

#13 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 28/01/2010, à 12:31

coredump
Réponses : 726

@ La Hyène et à tous ceux qui chercheraient le moyen simple de mettre en place ces scripts, j'ai résumé la solution la plus aboutie, et la plus basique, dans le post #7 (http://forum.ubuntu-fr.org/viewtopic.ph … 1#p2945261)

#14 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 29/01/2010, à 19:33

coredump
Réponses : 726

@ MasterDav

Je ne sais pas si tu as remarqué, mais dans le script loop-vpn que j'ai communiqué à tous, j'ai ajouté cette partie avant la boucle while :
edit:
...
Faux !

#15 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 30/01/2010, à 12:09

coredump
Réponses : 726

Ah oui, effectivement, je suis désolé ; je n'avais en fait pas tester la modification.

En fait, ça vient du fait, que NM n'appelle pas les scripts si le dernier appel aux scripts n'est pas encore terminé.
Du coup, ceux-ci ne peuvent pas être appelés en double, ces lignes sont donc inutiles.
Je les ai donc supprimées.

Merci de m'en avoir averti.

#16 Re : -1 »  Connexion VPN automatique (NetworkManager) » Le 01/03/2010, à 12:00

coredump
Réponses : 726

Désolé Papou, j'ai pas beaucoup de temps pour consulter le forum.

Tu pourrais faire un script du style,
/usr/local/bin/debloque-vpn :

#!/bin/bash

ERROR_MESSAGE="RESOLVE: Cannot resolve host address: miranda.vpntunnel.se: \[HOST_NOT_FOUND\] The specified host is unknown."

tail -f /var/log/daemon.log | while read line
do
	openvpn_message=`echo "$line" | grep -o "nm-openvpn.*$"`
	# Pour ignorer les doublons
	if [ "$openvpn_message" != "$last_openvpn_message" ]
	then
		if echo "$openvpn_message" | grep "$ERROR_MESSAGE"
		then
			connection-service "VPN anonine" restart
		fi
		last_openvpn_message="$openvpn_message"
	fi
done

(ça c'est avec la dernière version du script "connection-service", sinon faut faire deux lignes : "stop", puis "start", à la place de "restart")

Puis faire en sorte qu'il tourne en permanence en tâche de fond.
Par exemple, tu peux l'appeler dans tes scripts d'en/déclenchement :
ajouter cette ligne avant le "vpnstartandcheck" :
debloque-vpn &
et cette ligne avant le "connection-service "VPN anonine" stop"
pkill debloque-vpn
(Sinon faire un service dans /etc/init.d/ qui appel ce script avec un start et un stop, puis en faire un lien en /etc/rc5.d/S99...)

Voilà, tout ça est à tester et à arranger selon ton besoin, mais j'espère que ça pourra t'aider.

#17 Re : -1 »  [Résolu] Gravures échouent systematiquement...sur karmic » Le 16/02/2010, à 15:38

coredump
Réponses : 109

edit: Mon ancien message :

coredump a écrit :
breakolami a écrit :

Il est possible que le bios soit réglé en AHCI c'est peut être ça

Un grand grand grand merci à toi breakolami !

Ça a marché pour moi, j'ai changé dans mon bios AHCI par ATA et tout est revenu dans l'ordre. En effet, j'avais le même problème de gravure (une vingtaine de dvd grillé - je suis têtu) et il commençait à me venir des boutons d'avoir à passer sous window$ juste pour graver mes dvds.

J'espère que ça pourra en aider d'autres.

Suite au retour d'expérience, je mets quelques bémols à mon message :
- le démarrage du bios devient très long (style une trentaine de seconde) - du coup c'est un peu flippant (on se demande si le pc pourra démarré)
- windows ne marche plus (mais ça c'est pas grave wink)
- je n'ai fait que deux essais (avec succès) en passant à chaque fois de l'un à l'autre (AHCI/ATA, et en AHCI, ça ne marchait pas)

Il semblerait donc que ça marche pour moi, mais c'est une solution un peu extrême, par rapport au démarrage du pc (pour ma part, mon pc reste souvent allumé, donc ça ne me dérange pas trop) et la perte de windows.
Mais peut-être que pour ceux qui seraient en mesure de corriger le problème, ça peut être une piste.

#18 Re : -1 »  [Résolu] Gravures échouent systematiquement...sur karmic » Le 18/02/2010, à 16:48

coredump
Réponses : 109
olivjagtaz a écrit :

Bonjour...
Allez, j'vais me taper un p'tit coup de honte, mais ça passera... :

Pas de honte à ça, on est tous passer par là.

olivjagtaz a écrit :

Comment fait-on pour aller dans le bios?

Au tout début du démarrage de l'ordi, tu as à l'écran d'indiquer la touche à appuyer (style "bios setup press ..." ou "config bios ..." en bas à droite ou ailleurs).
Pour moi, c'est F2, des fois c'est ECHAP ou autre chose.
Une fois dans le bios, tu as en haut différents onglets et en bas les instructions pour changer les paramètres (utilisation des fléches, "Entrée", y/n - pour oui/non, ...).

olivjagtaz a écrit :

Et comment je change quoi?

Dans mon cas l'option "AHCI" se trouvait dans l'onglet "Advance" puis le paramètre SATA (je l'ai changé en ATA - la seule autre possibilité).
Ensuite tu as une touche pour quitter et sauvegarder (dans mon cas F9) ou quitter sans sauvegarder (ECHAP).

olivjagtaz a écrit :

Et comment je répare le bios si je commet une maladresse? hmm

Très franchement c'est pas facile de casser le bios, c'est assez robuste, et il n'y a pas dix mille options.
Si t'es pas sûr de ce que tu fais, tu peux toujours faire ECHAP sans sauvegarder.
(Et si vraiment tu devais faire quelque chose d'irréparable, mais ça me semble impossible, tu as moyen de réinitialiser le bios, en faisant une manip au niveau de la pile de la carte mère ...)
Et puis, tu as toujours moyen d'y retourner, et de faire différents essais.
Une fois, que tu auras pris confiance tu verras que c'est pas difficile à utiliser (un peu comme les options d'un téléphone portable).
Tu peux choisir par exemple l'ordre dans lequel tu bootes cdrom/disque dur/USB/..., régler l'heure et la date.

Bon courage !

#19 Re : -1 »  [Résolu] Gravures échouent systematiquement...sur karmic » Le 18/02/2010, à 20:04

coredump
Réponses : 109
olivjagtaz a écrit :

Il me reste à trouver les touches correspondantes (échap, F2, F9, ou autres...) hmm

Ben, en général, pour les portables, il s'agit des touches "multimédia" en haut, combiné avec la touche fonction "Fn".
Mais moi, sur mon portable, au démarrage, je n'ai pas besoin d'utiliser la touche fonction pour utiliser ces touches.
Sinon, tu peux aussi brancher un clavier standard usb à ton portable.

#20 Re : -1 »  [Résolu] Gravures échouent systematiquement...sur karmic » Le 08/03/2010, à 13:26

coredump
Réponses : 109
darkevolution a écrit :

Bon, âmes sensibles s'abstenir après ça j'ai du passer 15 minutes à tenter de redemarer le pc qui bloquait au bios (et devenu d'une lenteur extreme en fait)

Effectivement, j'ai moi aussi ce problème de démarrage, mais pas de lenteur.
J'ai donc modifié mon message précédent en rajoutant :

coredump a écrit :

Suite au retour d'expérience, je mets quelques bémols à mon message :
- le démarrage du bios devient très long (style une trentaine de seconde) - du coup c'est un peu flippant (on se demande si le pc pourra démarré)
- windows ne marche plus (mais ça c'est pas grave wink)
- je n'ai fait que deux essais (avec succès) en passant à chaque fois de l'un à l'autre (AHCI/ATA, et en AHCI, ça ne marchait pas)

Il semblerait donc que ça marche pour moi, mais c'est une solution un peu extrême, par rapport au démarrage du pc (pour ma part, mon pc reste souvent allumé, donc ça ne me dérange pas trop) et la perte de windows.
Mais peut-être que pour ceux qui seraient en mesure de corriger le problème, ça peut être une piste.

Je vous tiendrais au courant si je rencontre d'autres désagréments.

#21 Re : -1 »  [Résolu] Gravures échouent systematiquement...sur karmic » Le 24/05/2010, à 21:35

coredump
Réponses : 109
olivjagtaz a écrit :

Cenwen, Grillon, Teet, coredump, et tant d'autres...

Pour moi, c'est bon, maintenant ça marche avec Lucid.
Je sais pas ce qui c'est passé avec Karmic.
La solution de antistress ne fonctionnait pas. Merci, quand même.
Quant à la solution AHCI/ATA, c'était pas top, les CD audio ne fonctionnaient pas.
En tout cas, vive linux, l'internet libre et la communauté Ubuntu ! (j'aimais bien "Mandrake" aussi)

#22 Re : -1 »  Mot de passe sur partition ntfs (accès à la partition d: de windows) » Le 16/02/2010, à 13:13

coredump
Réponses : 12

Merci Gemnoc, pour ma part, c'est exactement ce que je cherchais smile

#23 Re : -1 »  Mot de passe sur partition ntfs (accès à la partition d: de windows) » Le 16/02/2010, à 14:18

coredump
Réponses : 12

@ sinbad83 : Pour moi, c'est résolu, mais la discussion a été ouverte par pachyriow.