Portál AbcLinuxu, 30. dubna 2025 14:00
Mojim zamerom bolo naimplementovat funkcne ovladanie siete s NetworkManager z CLI, pripadne pridat ncurses frontend. NetworkManager je vyborny system zvlast pre bezdratove siete.Venoval som tomu par dni svojho ITO, vacsinu casu som stravil citanim zdrojakov NetworkManager/KNetworkManager.
Nakoniec som to nedokoncil, ale snad neskor
Testovacie prostredie bolo openSUSE11.0Alpha2 s NetworkManager0.7 a KDE s KNetworkManager. S NM som komunikoval pomocou D-Bus v interaktivnom Pythone, cele vo VirtualBox.
Tri sietovky, jedna aktivovana pomocou KNetworkManageruser@linux-qgo5:~> ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo 2: net0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 08:00:27:6b:5a:9a brd ff:ff:ff:ff:ff:ff inet 10.0.2.15/24 brd 10.0.2.255 scope global net0 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 08:00:27:f2:40:32 brd ff:ff:ff:ff:ff:ff 4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 08:00:27:53:da:ef brd ff:ff:ff:ff:ff:ffPriklad interaktivnej session:
# vytvorim si objekt D-Bus systemovy kanal >>> import dbus >>> bus = dbus.SystemBus() # vytvorim si proxy objekt pre NetworkManager >>> nm = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager') # zavolame state() na zistenie stavu NM (3 znamena connected) >>> nm.state() dbus.UInt32(3L) # zobrazit si aktivne spojenia (mam jedno, vytvorene KNetworkManager-om) >>> nm.GetActiveConnections() dbus.Array([dbus.Struct((dbus.String(u'org.freedesktop.NetworkManagerUserSettings'), dbus.ObjectPath('/org/freedesktop/NetworkManagerSettings/Connection/1'), dbus.ObjectPath('/org/freedesktop/NetworkManagerSettings/Connection/1'), dbus.Array([dbus.ObjectPath('/org/freedesktop/Hal/devices/net_08_00_27_6b_5a_9a')], signature=dbus.Signature('o'))), signature=None)], signature=dbus.Signature('(sooao)')) # Co tu je zaujimave je identifikator spojenia a sietovej karty # Ku obidvom si vytvorim proxy objekt >>> net0 = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/Hal/devicesnet_08_00_27_6b_5a_9a') >>> con1 = bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManagerSettings/Connection/1') # priklad ziskania vlastnosti DeviceType >>> net0_props = dbus.Interface(net0, 'org.freedesktop.DBus.Properties') >>> net0_props.Get('org.freedesktop.NetworkManager.Device', 'DeviceType') # A to najdolezitejsie: odpojenie a pripojenie spojenia net0.Disconnect() nm.ActivateDevice(net0, 'org.freedesktop.NetworkManagerUserSettings', con1, con1)TODO:
V tomto priklade som pouzil uz existujuce spojenie vytvorene v KNetworkManager. To je dane architekturou NetworkManager, kde Connection s uzivatelskym nastavenim je vytvorene vo "frontende" a propagovane backendu. Takze toto treba naimplementovat (reimplementovat nm-plugin), aby sa to pohlo dalej. Az budem mat zase cas , tak s tym pohnem
Tiskni
Sdílej:
sysconfig
u get_object
nestaci, jinak dostanete zavadejici hlasku o odepreni pristupovych prav. Spravne ma byt:
nm = dbus.Interface(bus.get_object('org.freedesktop.NetworkManager', '/org/freedesktop/NetworkManager'), 'org.freedesktop.NetworkManager')
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.