Re: Creating adhoc wireless Network
- From: Dan Williams <dcbw redhat com>
- To: nexus aflb com
- Cc: networkmanager-list gnome org
- Subject: Re: Creating adhoc wireless Network
- Date: Mon, 13 Jul 2009 14:06:11 -0400
On Mon, 2009-07-13 at 04:37 -0400, nexus aflb com wrote:
> OK rewritting all the stuff into my little class, I got another issue now :)
>
> I'm using The Delete Call from NetworkManagerSettings.Connection Interface.
>
> All is going like a charm EXCEPT : I got still the entry in NM but it
> does'nt exist anymore on the system.
> Maybe a refresh is missing somewhere.
>
> So, the pont is, how to tell to nm-applet to refresh the list of
> connection that exists ?
What version of nm-applet again? If you're using 0.7.0, you'll want to
make sure you have commit
f9142e838c764fbe70a5ec9f18894bbb78e0dbe4
(bgo #557590)
Dan
> Thanks
>
>
> > On Tue, 2009-07-07 at 03:54 -0400, nexus aflb com wrote:
> >> > On Mon, 2009-07-06 at 11:18 -0400, nexus aflb com wrote:
> >> >> Hi Dan,
> >> >>
> >> >> I'm playing with the script you provide me but I have a problem :
> >> >>
> >> >> File "Create_Wireless.py", line 135, in <module>
> >> >> if props['DeviceType'] == 2: # wifi
> >> >> KeyError: 'DeviceType'
> >> >>
> >> >> if I execute step by steps :
> >> >>
> >> >> >>> print nm_iface.GetDevices()
> >> >> dbus.Array([dbus.ObjectPath('/org/freedesktop/Hal/devices/net_00_24_81_56_2e_52'),
> >> >> dbus.ObjectPath('/org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a')],
> >> >> signature=dbus.Signature('o'))
> >> >> >>> dev_proxy =
> >> >> sys_bus.get_object('org.freedesktop.NetworkManager','/org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a')
> >> >> >>> print dev_proxy
> >> >> <ProxyObject wrapping <dbus._dbus.SystemBus (system) at 0xb7a5811c>
> >> :1.7
> >> >> /org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a at 0xb7a5a80c>
> >> >> >>> dev_props_iface = dbus.Interface(dev_proxy,
> >> >> 'org.freedesktop.DBus.Properties')
> >> >> >>> print dev_props_iface
> >> >> <Interface <ProxyObject wrapping <dbus._dbus.SystemBus (system) at
> >> >> 0xb7a5811c> :1.7 /org/freedesktop/Hal/devices/net_00_22_fa_46_76_9a
> >> at
> >> >> 0xb7a5a80c> implementing 'org.freedesktop.DBus.Properties' at
> >> >> 0xb7a5a9ac>
> >> >> >>> print
> >> >> dev_props_iface.GetAll('org.freedesktop.NetworkManager.Device')
> >> >> dbus.Dictionary({}, signature=dbus.Signature('sv'))
> >> >>
> >> >> It seems empty ! What's wrong ?
> >> >
> >> > What version of dbus-glib do you have? What does 'nm-tool' print out
> >> > when you run it?
> >> >
> >> > Dan
> >> >
> >>
> >> Version provided by SLED11
> >>
> >> dbus-1-glib-0.76-34.3
> >
> > Ok, that's not quite new enough, anything < 0.77 has a bug with GetAll
> > that causes properties to not be found. The commit in question is:
> >
> > d1b80d803a0268bd4b3dd5b9a9522230461f2947
> >
> > Author: Dan Williams <dcbw redhat com> 2008-06-05 17:57:53
> > Committer: Colin Walters <walters verbum org> 2008-06-05 17:57:53
> > Follows: dbus-glib_0.76
> > Precedes: dbus-glib_0.78
> >
> > Bug 16114 [patch] wincaps-to-uscore property names for GetAll()
> >
> > * dbus/dbus-gobject.c: We need to uscore property names
> > so that we actually find the right properties.
> >
> >
> > but, the good news is that you could do:
> >
> > dbus_props_iface.Get('org.freedesktop.NetworkManager.Device', '<property
> > name>')
> >
> > and get the properties you care about individually instead of all of
> > them at once. Somewhat less efficient, but it'll work.
> >
> > Dan
> >
> >> dbus-1-1.2.10-3.9.1
> >> dbus-1-python-0.83.0-22.10
> >>
> >> nm-tool print the two interfaces with parameters :
> >>
> >> NetworkManager Tool
> >>
> >> State: connected
> >>
> >> - Device: eth0
> >> ----------------------------------------------------------------
> >> Type: Wired
> >> Driver: tg3
> >> State: connected
> >> Default: yes
> >> HW Address: 00:24:81:56:2E:52
> >>
> >> Capabilities:
> >> Supported: yes
> >> Carrier Detect: yes
> >> Speed: 100 Mb/s
> >>
> >> Wired Settings
> >>
> >> IPv4 Settings:
> >> Address: 10.82.109.86
> >> Prefix: 24 (255.255.255.0)
> >> Gateway: 10.82.109.254
> >>
> >> DNS: 10.82.161.3
> >> DNS: 10.68.161.3
> >>
> >>
> >> - Device: eth1
> >> ----------------------------------------------------------------
> >> Type: 802.11 WiFi
> >> Driver: iwlagn
> >> State: connected
> >> Default: no
> >> HW Address: 00:22:FA:46:76:9A
> >>
> >> Capabilities:
> >> Supported: yes
> >>
> >> Wireless Settings
> >> WEP Encryption: yes
> >> WPA Encryption: yes
> >> WPA2 Encryption: yes
> >>
> >> Wireless Access Points(* = Current AP)
> >> TESTIPSL: Infra, 00:03:2F:1D:61:BF, Freq 2437 MHz, Rate 54
> >> Mb/s, Strength 79 WEP
> >> *iSync: Ad-Hoc, D6:08:0C:12:06:49, Freq 2412 MHz, Rate 0
> >> Mb/s, Strength 0
> >>
> >> IPv4 Settings:
> >> Address: 10.42.44.1
> >> Prefix: 24 (255.255.255.0)
> >> Gateway: 0.0.0.0
> >>
> >>
> >> >> Thanks
> >> >>
> >> >>
> >> >> > On Wed, 2009-07-01 at 12:28 -0400, Dan Williams wrote:
> >> >> >> On Wed, 2009-07-01 at 11:26 -0400, nexus aflb com wrote:
> >> >> >> > Thanks for this quick answer.
> >> >> >> >
> >> >> >> > That's what I though. Adding a new connection isnot easy to
> >> do...
> >> >> >> >
> >> >> >> > when you say "programmatically ask the system settings service
> >> to
> >> >> >> create it"
> >> >> >> >
> >> >> >> > What do you mean ? Doing the same stuff as nm-applet but
> >> hardcoded
> >> >> ?
> >> >> >>
> >> >> >> Same way nm-connection-editor asks the system settings service to
> >> >> create
> >> >> >> a new connection when the user hits "Apply": you call the
> >> >> >> AddConnection() method on the
> >> >> >> org.freedesktop.NetworkManagerSettings.System interface with the
> >> >> >> connection details you want to set.
> >> >> >>
> >> >> >> Unfortunately we didn't define that method to return the object
> >> path
> >> >> of
> >> >> >> the newly created connection in 0.7 (will probably be fixed in
> >> 0.8),
> >> >> so
> >> >> >> you have to wait for the NewConnection signal that the
> >> >> >> system-settings-service emits, look for the UUID of the connection
> >> >> you
> >> >> >> just created to get the object path, and then tell NM to activate
> >> >> that
> >> >> >> connection.
> >> >> >>
> >> >> >> It's pretty straightforward actually, once you know what needs to
> >> be
> >> >> >> done. If PolicyKit throws up a dialog, use
> >> >> polkit-gnome-authorization
> >> >> >> to allow the user to always have the
> >> >> >> org.freedesktop.network-manager-settings.system.modify permission
> >> and
> >> >> >> the user won't ever get asked.
> >> >> >
> >> >> > Check out the attached script. It will create a WEP-enabled adhoc
> >> >> > connection if that connection (identified by UUID) doesn't already
> >> >> > exist, and then direct NetworkManager to activate that connection.
> >> >> The
> >> >> > script is somewhat longer than it needs to be, simply because I
> >> made
> >> >> it
> >> >> > more readable, added comments so you can figure out what's going
> >> on,
> >> >> and
> >> >> > put some reasonable error checking in.
> >> >> >
> >> >> > Dan
> >> >> > ----
> >> >> >
> >> >> > #!/bin/env python
> >> >> > # -*- Mode: Python; tab-width: 4; indent-tabs-mode: nil;
> >> >> c-basic-offset: 4
> >> >> > -*-
> >> >> > #
> >> >> > # Copyright (C) 2009 Red Hat, Inc.
> >> >> > #
> >> >> > # 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 2 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, write to the Free Software Foundation,
> >> >> Inc.,
> >> >> > # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> >> >> > #
> >> >> >
> >> >> > import dbus
> >> >> > import glib
> >> >> > import sys
> >> >> > import posix
> >> >> > import time
> >> >> >
> >> >> > uuid = "cabfaf9e-4043-4afb-8506-0e6f4a225636"
> >> >> >
> >> >> > s_con = { 'id': 'My AdHoc',
> >> >> > 'uuid': uuid,
> >> >> > 'type': '802-11-wireless',
> >> >> > 'autoconnect': False,
> >> >> > 'name': 'connection' }
> >> >> >
> >> >> > s_wifi = { 'ssid': dbus.ByteArray("foobar"),
> >> >> > 'mode': 'adhoc',
> >> >> > 'security': '802-11-wireless-security',
> >> >> > 'name': '802-11-wireless' }
> >> >> >
> >> >> > s_wsec = { 'key-mgmt': 'none',
> >> >> > 'wep-key0': '0123456789abcdef0123456789',
> >> >> > 'name': '802-11-wireless-security' }
> >> >> >
> >> >> > s_ip4 = { 'method': 'link-local',
> >> >> > 'name': 'ipv4' }
> >> >> >
> >> >> > con = { 'connection': s_con,
> >> >> > '802-11-wireless': s_wifi,
> >> >> > '802-11-wireless-security': s_wsec,
> >> >> > 'ipv4': s_ip4 }
> >> >> >
> >> >> > # init dbus
> >> >> > sys_bus = dbus.SystemBus()
> >> >> > ses_bus = dbus.SessionBus()
> >> >> >
> >> >> > ss_proxy =
> >> >> > sys_bus.get_object('org.freedesktop.NetworkManagerSystemSettings',
> >> >> > '/org/freedesktop/NetworkManagerSettings')
> >> >> > ss_iface = dbus.Interface(ss_proxy,
> >> >> > 'org.freedesktop.NetworkManagerSettings')
> >> >> > ss_sys_iface = dbus.Interface(ss_proxy,
> >> >> > 'org.freedesktop.NetworkManagerSettings.System')
> >> >> >
> >> >> > nm_proxy = sys_bus.get_object('org.freedesktop.NetworkManager',
> >> >> > '/org/freedesktop/NetworkManager')
> >> >> > nm_iface = dbus.Interface(nm_proxy,
> >> 'org.freedesktop.NetworkManager')
> >> >> >
> >> >> > pk_proxy =
> >> >> > ses_bus.get_object('org.freedesktop.PolicyKit.AuthenticationAgent',
> >> >> '/')
> >> >> > pk_iface = dbus.Interface(pk_proxy,
> >> >> > 'org.freedesktop.PolicyKit.AuthenticationAgent')
> >> >> >
> >> >> > def find_connection(requested_uuid):
> >> >> > for c in ss_iface.ListConnections():
> >> >> > # get the details of the connection
> >> >> > c_proxy =
> >> >> > sys_bus.get_object('org.freedesktop.NetworkManagerSystemSettings',
> >> >> > c)
> >> >> > c_iface = dbus.Interface(c_proxy,
> >> >> > 'org.freedesktop.NetworkManagerSettings.Connection')
> >> >> > settings = c_iface.GetSettings()
> >> >> > if settings['connection']['uuid'] == requested_uuid:
> >> >> > # found our connection
> >> >> > return c
> >> >> > return None
> >> >> >
> >> >> > def try_add(connection):
> >> >> > try:
> >> >> > # Ask the system settings service to create the connection
> >> >> > ss_sys_iface.AddConnection(connection)
> >> >> > return None
> >> >> > except Exception, e:
> >> >> > parts = str(e).split(' ')
> >> >> > if
> >> >> > parts[0].find('org.freedesktop.NetworkManagerSettings.System.NotPrivileged')
> >> >> > < 0:
> >> >> > # not a permission denied, give up and exit
> >> >> > print e
> >> >> > sys.exit(1)
> >> >> > # yay, permission denied, we can handle this
> >> >> > return parts[1]
> >> >> >
> >> >> > # MAIN PROGRAM
> >> >> >
> >> >> > con_path = find_connection(uuid)
> >> >> > if not con_path:
> >> >> > # Try to create the connection, which could fail if we need
> >> >> > authorization.
> >> >> > # If auth is required, get the auth and try adding it again
> >> >> > action = try_add(con)
> >> >> > if action:
> >> >> > gained = pk_iface.ObtainAuthorization(action, 0,
> >> >> posix.getpid())
> >> >> > if gained:
> >> >> > # Yay, we have the privilege now, try adding again
> >> >> > action = try_add(con)
> >> >> > if action:
> >> >> > # hmm, something went wrong and PolicyKit wasn't
> >> able
> >> >> to
> >> >> > auth the user
> >> >> > sys.exit(1)
> >> >> >
> >> >> > con_path = find_connection(uuid)
> >> >> >
> >> >> > # Check again in case it was just added
> >> >> > if not con_path:
> >> >> > print "Couldn't get newly created connection from system
> >> settings"
> >> >> >
> >> >> > # Find a wifi device to activate this connection on
> >> >> > dev_path = None
> >> >> > for dev in nm_iface.GetDevices():
> >> >> > dev_proxy =
> >> sys_bus.get_object('org.freedesktop.NetworkManager',
> >> >> dev)
> >> >> > dev_props_iface = dbus.Interface(dev_proxy,
> >> >> > 'org.freedesktop.DBus.Properties')
> >> >> > props =
> >> >> > dev_props_iface.GetAll('org.freedesktop.NetworkManager.Device')
> >> >> > if props['DeviceType'] == 2: # wifi
> >> >> > dev_path = dev
> >> >> > break
> >> >> >
> >> >> > if not dev_path:
> >> >> > print "No wifi devices available"
> >> >> > sys.exit(1)
> >> >> >
> >> >> > # Now ask NM to activate that connection
> >> >> > active_path =
> >> >> > nm_iface.ActivateConnection('org.freedesktop.NetworkManagerSystemSettings',
> >> >> > con_path, dev_path, "/")
> >> >> > if not active_path:
> >> >> > print "Couldn't activate connection"
> >> >> > sys.exit(1)
> >> >> >
> >> >> > # Wait for the connection to become active
> >> >> > active_proxy = sys_bus.get_object('org.freedesktop.NetworkManager',
> >> >> > active_path)
> >> >> > active_props_iface = dbus.Interface(active_proxy,
> >> >> > 'org.freedesktop.DBus.Properties')
> >> >> >
> >> >> > state = 0
> >> >> > while state != 2: # 2 == activated
> >> >> > state =
> >> >> > active_props_iface.Get('org.freedesktop.NetworkManager.Connection.Active',
> >> >> > 'State')
> >> >> > if state != 2:
> >> >> > print "waiting for connection to become active..."
> >> >> > time.sleep(1)
> >> >> >
> >> >> > print "activated!"
> >> >> >
> >> >> >
> >> >> >
> >> >>
> >> >>
> >> >
> >> >
> >>
> >>
> >
> >
>
>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]