blob: 72ca2438ba4c137fb5b7cd89c9f735f81d5494db [file] [log] [blame]
#!/usr/bin/python
import sys
import dbus
import flimflam
bus = dbus.SystemBus()
manager = dbus.Interface(bus.get_object("org.chromium.flimflam", "/"),
"org.chromium.flimflam.Manager")
if len(sys.argv) < 2:
print "Usage: %s <command>" % (sys.argv[0])
print ""
print " state"
print " recheck-portal"
print " services"
print " passphrase <service> [passphrase]"
print " autoconnect <service> [autoconnect]"
print " connect <service>"
print " disconnect <service>"
print " remove <service>"
print ""
print " scan [type]"
print " enable <type>"
print " disable <type>"
print " offlinemode [on|off]"
print ""
print " dev <interface>"
print " dev <interface> scan"
print " dev <interface> networks"
print " dev <interface> connect <network>"
print " dev <interface> disconnect [network]"
print " dev <interface> powered [on|off]"
sys.exit(1)
def print_properties(object_path, properties):
print "[ %s ]" % (object_path)
for key in properties.keys():
if key == "Networks":
continue
if key in ["Powered", "Scanning", "Connected",
"Available", "Remember", "Default"]:
if properties[key] == dbus.Boolean(1):
val = "true"
else:
val = "false"
elif key in ["Strength", "Priority"]:
val = int(properties[key])
else:
val = str(properties[key])
print " %s = %s" % (key, val)
def print_networks(networks):
for object_path in networks:
network = dbus.Interface(
bus.get_object("org.chromium.flimflam", object_path),
"org.chromium.flimflam.Network")
properties = network.GetProperties(utf8_strings = True)
if properties["Connected"] == dbus.Boolean(1):
connected = "*"
else:
connected = " "
if "Name" in properties.keys():
name = properties["Name"]
else:
name = ""
strength = int(properties["Strength"])
details = ""
try:
details += "{" + properties["WiFi.Mode"] + "} "
except Exception, _:
pass
try:
details += "{" + properties["WiFi.Security"] + "} "
except Exception, _:
pass
if "WiFi.Passphrase" in properties.keys():
if properties["WiFi.Passphrase"] != "":
details += "{passphrase present}"
print "%s %-26s %3d%% %s" % (connected, name, strength, details)
def select_network(networks, name):
for object_path in networks:
network = dbus.Interface(
bus.get_object("org.chromium.flimflam", object_path),
"org.chromium.flimflam.Network")
properties = network.GetProperties(utf8_strings = True)
if properties["Name"] != name:
continue
if properties["Connected"] == dbus.Boolean(1):
print "Already connected to network %s" % (name)
break
print "Selecting network %s" % (name)
network.Connect()
def disconnect_network(networks, name):
for object_path in networks:
network = dbus.Interface(
bus.get_object("org.chromium.flimflam", object_path),
"org.chromium.flimflam.Network")
properties = network.GetProperties(utf8_strings = True)
if name != "" and properties["Name"] != name:
continue
if properties["Connected"] == dbus.Boolean(1):
name = properties["Name"]
print "Disconnecting from network %s" % (name)
network.Disconnect()
def print_services(services):
for object_path in services:
service = dbus.Interface(
bus.get_object("org.chromium.flimflam", object_path),
"org.chromium.flimflam.Service")
properties = service.GetProperties(utf8_strings = True)
identifier = object_path[object_path.rfind("/") + 1:]
if properties["Favorite"] == dbus.Boolean(1):
favorite = "*"
else:
favorite = " "
if "Name" in properties.keys():
name = properties["Name"]
else:
name = "{" + properties["Type"] + "}"
print "%s %-26s { %s }" % (favorite, name, identifier)
def main():
if sys.argv[1] == "state":
properties = manager.GetProperties(utf8_strings = True)
print "System is %s" % (properties["State"])
elif sys.argv[1] == "recheck-portal":
manager.RecheckPortal()
print "Rechecking portal state"
elif sys.argv[1] in ["services", "list", "show"]:
properties = manager.GetProperties(utf8_strings = True)
print_services(properties["Services"])
elif sys.argv[1] in ["passphrase", "pass"]:
if (len(sys.argv) < 3):
print "Need at least service parameter"
sys.exit(1)
path = "/profile/default/" + sys.argv[2]
service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Service")
if (len(sys.argv) > 3):
passphrase = sys.argv[3]
service.SetProperty("Passphrase", passphrase)
print "Passphrase %s set for %s" % (passphrase, sys.argv[2])
else:
properties = service.GetProperties(utf8_strings = True)
if "Name" in properties.keys():
name = properties["Name"]
else: name = "{" + properties["Type"] + "}"
if "Passphrase" in properties.keys():
passphrase = properties["Passphrase"]
else:
passphrase = "not set"
print "Passphrase for %s is %s" % (name, passphrase)
elif sys.argv[1] in ["autoconnect", "autoconn"]:
if (len(sys.argv) < 3):
print "Need at least service parameter"
sys.exit(1)
path = "/profile/default/" + sys.argv[2]
service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Service")
if (len(sys.argv) > 3):
autoconnect = flimflam.make_dbus_boolean(sys.argv[3])
service.SetProperty("AutoConnect", autoconnect)
print "Auto connect %s for %s" % (autoconnect, sys.argv[2])
else:
properties = service.GetProperties(utf8_strings = True)
if "Name" in properties.keys():
name = properties["Name"]
else:
name = "{" + properties["Type"] + "}"
if "AutoConnect" in properties.keys():
autoconnect = properties["AutoConnect"]
else:
autoconnect = dbus.Boolean(0)
print "Auto connect %s for %s" % (autoconnect, name)
elif sys.argv[1] in ["connect", "conn"]:
if (len(sys.argv) < 3):
print "Need at least service parameter"
sys.exit(1)
path = "/profile/default/" + sys.argv[2]
service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Service")
try:
service.Connect(timeout=60000)
except dbus.DBusException, error:
print "%s: %s" % (error.get_dbus_name(), error.message)
elif sys.argv[1] in ["disconnect", "disc"]:
if (len(sys.argv) < 3):
print "Need at least service parameter"
sys.exit(1)
path = "/profile/default/" + sys.argv[2]
service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Service")
try:
service.Disconnect()
except dbus.DBusException, error:
print "%s: %s" % (error.get_dbus_name(), error.message)
elif sys.argv[1] in ["remove"]:
if (len(sys.argv) < 3):
print "Need at least service parameter"
sys.exit(1)
path = "/profile/default/" + sys.argv[2]
service = dbus.Interface(bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Service")
properties = service.GetProperties(utf8_strings = True)
if properties["Favorite"] == dbus.Boolean(0):
print "Only favorite services can be removed"
sys.exit(1)
try:
service.Remove()
except dbus.DBusException, error:
print "%s: %s" % (error.get_dbus_name(), error.message)
elif sys.argv[1] == "scan":
if len(sys.argv) > 2:
manager.RequestScan(sys.argv[2])
else:
manager.RequestScan("")
elif sys.argv[1] == "enable":
if len(sys.argv) > 2:
manager.EnableTechnology(sys.argv[2])
else:
manager.EnableTechnology("")
elif sys.argv[1] == "disable":
if len(sys.argv) > 2:
manager.DisableTechnology(sys.argv[2])
else:
manager.DisableTechnology("")
elif sys.argv[1] in ["offlinemode", "flightmode"]:
if len(sys.argv) > 2:
active = flimflam.make_dbus_boolean(sys.argv[2])
manager.SetProperty("OfflineMode", active)
else:
properties = manager.GetProperties(utf8_strings = True)
print "Offline mode is %s" % (properties["OfflineMode"])
elif sys.argv[1] == "dev":
properties = manager.GetProperties(utf8_strings = True)
interface = ""
command = ""
value = ""
if len(sys.argv) > 2:
interface = sys.argv[2]
if len(sys.argv) > 3:
command = sys.argv[3]
if len(sys.argv) > 4:
value = sys.argv[4]
for path in properties["Devices"]:
device = dbus.Interface(
bus.get_object("org.chromium.flimflam", path),
"org.chromium.flimflam.Device")
properties = device.GetProperties(utf8_strings = True)
if (interface != "" and
properties.get("Interface", "") != interface and
path != interface):
continue
if command == "scan":
if properties["Type"] in ["wifi", "wimax"]:
interface = properties["Interface"]
print "Scan for device %s" % (interface)
device.ProposeScan()
else:
print "No scanning for device %s" % (interface)
elif command in ["networks", "net"]:
if "Networks" in properties.keys():
print_networks(properties["Networks"])
else:
print "Device has no networks"
elif command in ["connect", "conn"] and value != "":
if "Networks" in properties.keys():
select_network(properties["Networks"], value)
else:
print "Device can't connect networks"
elif command in ["connect", "conn"]:
print "Need to specify network"
elif command in ["disconnect", "disc"] and value != "":
if "Networks" in properties.keys():
disconnect_network(properties["Networks"], value)
else:
print "Device has no networks"
elif command in ["discconnect", "disc"]:
if "Networks" in properties.keys():
disconnect_network(properties["Networks"], "")
else:
print "Device has no networks"
elif command == "powered" and value != "":
powered = flimflam.make_dbus_boolean(value)
device.SetProperty("Powered", powered)
elif command == "powered":
interface = properties.get("Interface", "unknown")
if properties["Powered"] == dbus.Boolean(1):
powered = "on"
else:
powered = "off"
print "Device %s is powered %s" % (interface, powered)
elif command == "list" or command == "":
print_properties(path, properties)
else:
print "Unknown command"
else:
print "Unknown command"
if __name__ == "__main__":
main()