User:Nbc/W32g
[edit] What is it
w32g is a dbus script to toggle 2g/3g when connected/disconnected to wifi.
If there's a call, it will delay the toggling.
[edit] Configuration
The configuration documentation is at the beginning w32g.conf. You can copy it to /home/user/.w32g.conf and modify it :
[w32g] ### the comment reflect the default configuration ### true is true (case insensitive), everything else is false ### the command used to test the wifi connection before downgrading to 2g ### if you don't want to do test just delete after = # connection_test = sudo /bin/ping -c 1 www.google.com ### notification message when going to 3g # message_on_idle = 3G cellular mode set ### notification message when going to 2g # message_on_connected = 2G (GSM) cellular mode set ### shall we go back to 3g when wlan disconnect ? #### if you want to have false just delete after = # change_on_idle = true ### shall we go back to dual or 3g ? # change_to_dual = true ### if wait_on_call is a integer greater than 0, the program will wait ### all this time to toggle to 2g/3g. After this time it will exit ### without toggling. ### if wait_on_call is 0 or lesser, w32g will exit without toggling # wait_on_call = 90 ### if you want go to 2g only when connected to some wlan you can add their wlan id here ### you can find the wlan id using the command ### gconftool-2 -R /system/osso/connectivity/IAP ### For example : ### wifi = 91f493fb-7c89-4fc6-ac2c-b822923dde45 9ee5dd55-9a32-4ee9-9131-c464ad31d907 # wifi =
[edit] Script
And you must copy the program to /home/user/bin/w32g and follow instruction below :
#!/usr/bin/python # You need to install dbus-scripts (BE CAREFUL, it's a devel package) # # as root you need to create a file /etc/sudoers.d/w32g # with this line : # user ALL = NOPASSWD: /bin/ping # and run the command update-sudoers because only root can use ping # # always as root and you need to create another file # /etc/dbus-scripts/w32g with the following line : # # /home/user/bin/w32g * * com.nokia.icd status_changed * WLAN_INFRA * # # and copy this script in /home/user/bin/w32g import sys import os import ConfigParser import re import commands import time debug = False conf_file = '/home/user/.w32g.conf' config = { 'message_on_idle': '3G cellular mode set', 'message_on_connected': '2G (GSM) cellular mode set', 'connection_test': 'sudo /bin/ping -c 1 www.google.com', 'change_on_idle': 'true', 'change_to_dual': 'true', 'wait_on_call': 10, 'wifi': } config_parser = ConfigParser.SafeConfigParser() try: config_parser.read(conf_file) for item in config_parser.items('w32g'): config[ item[0] ] = item[1] except ConfigParser.NoSectionError: pass def to_bool(string): if re.search('true', string, re.IGNORECASE): return True config['change_on_idle'] = to_bool(config['change_on_idle']) config['change_to_dual'] = to_bool(config['change_to_dual']) config['wait_on_call'] = int(config['wait_on_call']) wifi_id,state = sys.argv[5],sys.argv[7] # if we are not on the good wifi network we do nothing and exit if config['wifi'] and not re.search(wifi_id, config['wifi'], re.IGNORECASE): if debug: print "not the good wifi network, exit" sys.exit(0) dbus_wifi = "dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology"; dbus_notif = "dbus-send --system --type=method_call --print-reply --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint"; dbus_test_call = "dbus-send --system --dest=com.nokia.csd.Call --print-reply=literal /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.GetStatus" def is_on_call(): output = commands.getoutput(dbus_test_call) return "uint32 0" in output def wait_or_exit_on_call(): if debug: print "in wait or exit on call" choice = config['wait_on_call'] if choice > 0: end = time.time() + choice while end > time.time(): if is_on_call(): return if debug: print "wait" time.sleep(1) sys.exit() else: sys.exit() if state == 'CONNECTED': if debug: print "CONNECTED STATE" # we verified that the connection works if config['connection_test']: ret = os.system(config['connection_test']); else: ret = 0 # we wait or exit if there's a call wait_or_exit_on_call() if ret == 0: os.system(dbus_wifi + " byte:1"); os.system(dbus_notif + " string:'" + config['message_on_connected'] + "'") elif state == 'IDLE' and config['change_on_idle']: if debug: print "IDLE STATE" dual = "2" if config['change_to_dual']: dual = "0" print dual # we wait or exit if there's a call wait_or_exit_on_call() os.system(dbus_wifi + " byte:" + dual); os.system(dbus_notif + " string:'" + config['message_on_idle'] + "'") print state if debug: print "end here"
- This page was last modified on 9 April 2010, at 20:32.
- This page has been accessed 1,849 times.