Desktop Command Execution Widget scripts

Line 14: Line 14:
...but the piping is preferred for buttons as it doesn't display ANY output (some dbus calls work only with reply). All of the dbus commands should be working in the same way. Collection of these can be found on [[Phone control]] wiki page. The basic principle is the same as above (dbus command and piping an echo).
...but the piping is preferred for buttons as it doesn't display ANY output (some dbus calls work only with reply). All of the dbus commands should be working in the same way. Collection of these can be found on [[Phone control]] wiki page. The basic principle is the same as above (dbus command and piping an echo).
-
==Scripts==
+
==Scripts to display information==
-
===To display information===
+
===Battery scripts===
-
====Uptime====
 
-
 
-
To display uptime and load:
 
-
uptime | cut -c14-
 
-
 
-
To display only uptime:
 
-
uptime | sed -e 's/ ..:..:.. up //' -e 's/, load average: ...., ...., ....//'
 
-
 
-
====Battery (several scripts)====
 
All battery scripts are collected here. Pick the one which suits your needs. Examples of the output values are under each one.
All battery scripts are collected here. Pick the one which suits your needs. Examples of the output values are under each one.
Line 37: Line 28:
  hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /g.la/ {last = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr"/"last" mAh)"} else {print "Charging"}'
  hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /g.la/ {last = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr"/"last" mAh)"} else {print "Charging"}'
 +
Output example: '''83 % (1000/1200 mAh)''', when charging '''Charging'''. 1000 is current mAh, 1200 is last full mAh.
Output example: '''83 % (1000/1200 mAh)''', when charging '''Charging'''. 1000 is current mAh, 1200 is last full mAh.
  hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr" mAh)"} else {print "Charging"}'
  hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr" mAh)"} else {print "Charging"}'
 +
Output example: '''83 % (1000 mAh)''', when charging '''Charging'''. 1000 is current mAh.
Output example: '''83 % (1000 mAh)''', when charging '''Charging'''. 1000 is current mAh.
  hal-device bme | awk '/l.p/ {perc = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" %"} else {print "Chrg"}'
  hal-device bme | awk '/l.p/ {perc = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" %"} else {print "Chrg"}'
 +
Output example: '''83 %''', when charging '''Chrg'''
Output example: '''83 %''', when charging '''Chrg'''
  hal-device bme | awk '/g.c/ {curr = $3}; /g.la/ {last = $3} END {print curr"/"last" mAh"}'
  hal-device bme | awk '/g.c/ {curr = $3}; /g.la/ {last = $3} END {print curr"/"last" mAh"}'
 +
Output example: '''1000/1200 mAh'''. 1000 is current mAh, 1200 is last full mAh.
Output example: '''1000/1200 mAh'''. 1000 is current mAh, 1200 is last full mAh.
  hal-device bme | awk '/l.p/ {print $3" %"}'
  hal-device bme | awk '/l.p/ {print $3" %"}'
 +
Output example: '''83 %'''
Output example: '''83 %'''
  hal-device bme | awk '/g.c/ {print $3" mAh"}'
  hal-device bme | awk '/g.c/ {print $3" mAh"}'
 +
Output example: '''1000 mAh''' (it displays current mAh).
Output example: '''1000 mAh''' (it displays current mAh).
  hal-device bme | awk '/g.la/ {print $3" mAh"}'
  hal-device bme | awk '/g.la/ {print $3" mAh"}'
 +
Output example: '''1200 mAh''' (it displays last full mAh).
Output example: '''1200 mAh''' (it displays last full mAh).
-
====Boot reason====
+
===Date===
-
  cat /proc/bootreason
+
  date +"%d.%m.%Y"
-
====Boot count====
+
This command will show the date in format (for example) 01.10.2010. You can define your own format (between the quotation marks). Possible options are described on [http://unixhelp.ed.ac.uk/CGI/man-cgi?date manpage].
-
 
+
-
cat /var/lib/dsme/boot_count
+
-
====IP====
+
===IP===
Internal IPs are obtained from the ifconfig and external IPs are obtained from the internet, because gprs0 IP which you can get with ifconfig is often from private address range, because mobile operators like to use NAT.
Internal IPs are obtained from the ifconfig and external IPs are obtained from the internet, because gprs0 IP which you can get with ifconfig is often from private address range, because mobile operators like to use NAT.
Line 82: Line 78:
You can replace WAN IP part of the script with the commands below to display it without additional info.
You can replace WAN IP part of the script with the commands below to display it without additional info.
-
=====External (WAN)=====
+
====External (WAN)====
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4}'
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4}'
 +
Output example: '''1.2.3.4'''
Output example: '''1.2.3.4'''
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4 " ("$12" "toupper($28)")"}'
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4 " ("$12" "toupper($28)")"}'
 +
Output example: '''1.2.3.4 (ISP CountryCode)'''
Output example: '''1.2.3.4 (ISP CountryCode)'''
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4" ("$12" @ "$20", "toupper($28)")"}'
  wget -q -O - api.myiptest.com | awk -F"\"" '{print $4" ("$12" @ "$20", "toupper($28)")"}'
 +
Output example: '''1.2.3.4 (ISP @ City, CountryCode)'''
Output example: '''1.2.3.4 (ISP @ City, CountryCode)'''
-
=====Internal (LAN)=====
+
====Internal (LAN)====
  /sbin/ifconfig | awk '/Bc/ {print $2}' | cut -c6-
  /sbin/ifconfig | awk '/Bc/ {print $2}' | cut -c6-
Line 101: Line 100:
This one displays only wlan0 IP (used for SSH, WinSCP, VNC... in LAN).
This one displays only wlan0 IP (used for SSH, WinSCP, VNC... in LAN).
-
====Disk/filesystem usage====
+
===Disk usage===
-
=====rootfs (256MB /)=====
+
====rootfs (256MB /)====
Percentage used:
Percentage used:
 +
  df | awk '$1 == "rootfs" {print $5}'
  df | awk '$1 == "rootfs" {print $5}'
Free space:
Free space:
 +
  df -h | awk '$1 == "rootfs" {print $4}'
  df -h | awk '$1 == "rootfs" {print $4}'
-
=====Internal memory for user data (27GB /home/user/MyDocs)=====
+
====Internal memory for user data (27GB /home/user/MyDocs)====
Percentage used:
Percentage used:
 +
  df /home/user/MyDocs | awk '/My/ {print $5}'
  df /home/user/MyDocs | awk '/My/ {print $5}'
Free space:
Free space:
 +
  df -h /home/user/MyDocs | awk '/My/ {print $4}'
  df -h /home/user/MyDocs | awk '/My/ {print $4}'
-
=====Internal memory for application data (2GB /home)=====
+
====Internal memory for application data (2GB /home)====
Percentage used:
Percentage used:
 +
  df /home | awk '/ho/ {print $5}'
  df /home | awk '/ho/ {print $5}'
Free space:
Free space:
 +
  df -h /home | awk '/ho/ {print $4}'
  df -h /home | awk '/ho/ {print $4}'
-
=====Memory card (/media/mmc1)=====
+
====Memory card (/media/mmc1)====
Percentage used:
Percentage used:
 +
  df /media/mmc1 | awk '/mm/ {print $5}'
  df /media/mmc1 | awk '/mm/ {print $5}'
Free space:
Free space:
 +
  df -h /media/mmc1 | awk '/mm/ {print $4}'
  df -h /media/mmc1 | awk '/mm/ {print $4}'
-
====top====
+
===Uptime===
 +
 
 +
To display uptime and load:
 +
 
 +
uptime | cut -c14-
 +
 
 +
To display only uptime:
 +
 
 +
uptime | sed -e 's/ ..:..:.. up //' -e 's/, load average: ...., ...., ....//'
 +
 
 +
===Boot reason===
 +
 
 +
cat /proc/bootreason
 +
 
 +
===Boot count===
 +
 
 +
cat /var/lib/dsme/boot_count
 +
 
 +
===top===
To display top $N programs (output of `top` command). This will always exclude top itself ''(which note is quite processor intensive, so you probably don't want this updating too often)''. Replace (3+$N) and $N with appropriate values -- for example, to show top two applications, 5 and 2. Alternately you can define $N, if you're up on shell scripting.
To display top $N programs (output of `top` command). This will always exclude top itself ''(which note is quite processor intensive, so you probably don't want this updating too often)''. Replace (3+$N) and $N with appropriate values -- for example, to show top two applications, 5 and 2. Alternately you can define $N, if you're up on shell scripting.
Line 141: Line 166:
  top -bn 1 | grep -v top | head -n (3+$N) | tail -n $N
  top -bn 1 | grep -v top | head -n (3+$N) | tail -n $N
-
====World Time====
+
===World time===
Time in a particular timezone can be shown with the date command; for example, for the current time in London use:
Time in a particular timezone can be shown with the date command; for example, for the current time in London use:
Line 169: Line 194:
Valid TZ values are taken from the [http://en.wikipedia.org/wiki/Tz_database zoneinfo (Olson) database].
Valid TZ values are taken from the [http://en.wikipedia.org/wiki/Tz_database zoneinfo (Olson) database].
-
===Buttons===
+
==Scripts for buttons==
Make sure that update policy for button widgets is set only to "update when clicked". "Update when switched to desktop", "update interval" and "network presence" should be disabled to avoid automatic actions. Also keep in mind that widgets are executed at every boot so they can for example automatically disable Wi-Fi when phone boots.
Make sure that update policy for button widgets is set only to "update when clicked". "Update when switched to desktop", "update interval" and "network presence" should be disabled to avoid automatic actions. Also keep in mind that widgets are executed at every boot so they can for example automatically disable Wi-Fi when phone boots.
 +
 +
===Networking===
====Connect internet (show connections)====
====Connect internet (show connections)====
Line 185: Line 212:
  rootsh /path/to/script/enable-disable_wi-fi.sh | echo ""
  rootsh /path/to/script/enable-disable_wi-fi.sh | echo ""
-
enable-disable_wi-fi.sh:
+
'''enable-disable_wi-fi.sh''':
  #!/bin/sh
  #!/bin/sh
Line 209: Line 236:
Don't forget to make it executable.
Don't forget to make it executable.
-
====Turn FM transmitter on/off====
+
===Lock screen and keys===
-
 
+
-
/usr/bin/fmtx_client -p$(if [ $(cut -d. -f1 /proc/uptime ) -lt 100 ]; then echo 0; else /usr/bin/fmtx_client | /bin/grep -q '^state=enabled' ; echo $? ; fi) | /usr/bin/awk -F '=' '($1=="state") {print $2}'
+
-
 
+
-
Note: when you reboot the device, this script waits 100 seconds before you can turn the transmitter on/off again.
+
-
 
+
-
====Increase FM transmitter power====
+
-
 
+
-
rootsh echo 118 > /sys/class/i2c-adapter/i2c-2/2-0063/power_level | echo ""
+
-
 
+
-
====Lock screen and keys====
+
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"locked" | echo ""
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"locked" | echo ""
-
====Reboot====
+
===Radio mode===
-
 
+
-
rootsh reboot | echo ""
+
-
====Switch radio mode to 2G/3G====
+
====2G/3G====
  sh /path/to/script/2g3g.sh | echo ""
  sh /path/to/script/2g3g.sh | echo ""
-
2g3g.sh:
+
'''2g3g.sh''':
  #!/bin/sh
  #!/bin/sh
Line 245: Line 260:
Don't forget to make the script executable.
Don't forget to make the script executable.
-
====Switch radio mode to 2G====
+
====2G====
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:1 | echo ""
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:1 | echo ""
-
====Switch radio mode to 3G====
+
====3G====
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:2 | echo ""
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:2 | echo ""
-
====Switch radio mode to Dual====
+
====Dual====
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:0 | echo ""
  dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:0 | echo ""
-
====Update e-mail====
+
===Update e-mail===
  sh /path/to/script/email.sh | echo ""
  sh /path/to/script/email.sh | echo ""
-
email.sh:
+
'''email.sh''':
Make it executable and insert proper IAP_ID in the script. What it does is that it checks whether the phone is connected to the internet and if it is, send and receive is performed and if it is not, the defined connection (IAP_ID) is used to connect, then send and receive is performed and script waits about minute and a half (Modest e-mail client which N900 uses is slow in this aspect) and then disconnects internet.
Make it executable and insert proper IAP_ID in the script. What it does is that it checks whether the phone is connected to the internet and if it is, send and receive is performed and if it is not, the defined connection (IAP_ID) is used to connect, then send and receive is performed and script waits about minute and a half (Modest e-mail client which N900 uses is slow in this aspect) and then disconnects internet.
Line 278: Line 293:
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"E-mail updated"
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"E-mail updated"
  fi
  fi
 +
 +
===Reboot===
 +
 +
rootsh reboot | echo ""
 +
 +
===FM transmitter===
 +
 +
====Enable/disable====
 +
 +
/usr/bin/fmtx_client -p$(if [ $(cut -d. -f1 /proc/uptime ) -lt 100 ]; then echo 0; else /usr/bin/fmtx_client | /bin/grep -q '^state=enabled' ; echo $? ; fi) | /usr/bin/awk -F '=' '($1=="state") {print $2}'
 +
 +
Note: when you reboot the device, this script waits 100 seconds before you can turn the transmitter on/off again.
 +
 +
====Increase power====
 +
 +
rootsh echo 118 > /sys/class/i2c-adapter/i2c-2/2-0063/power_level | echo ""
[[Category:Software]]
[[Category:Software]]
[[Category:Power users]]
[[Category:Power users]]

Revision as of 18:16, 1 April 2010

Desktop Command Execution widget is one of the most useful widgets on your Maemo desktop. It can be used to show certain information (for example battery level in percentage) or as a button which can be used for example to disconnect active internet connection (you need to tap 3 times and also wait for menus to appear without this widget). Therefore it can replace many other applications/widgets/applets and you can also make something new. Here you'll find a collection of scripts that can be added to the widget. The discussion about the widget is on the forum.


Contents

Making your own scripts

When there's no output (for example if you're using widget as a button and you use dbus call), the widget displays "Invalid Command". This can be most easily avoided if you pipe echo "" at the end of the command. Example:

dbus-send -options -moreoptions | echo ""

This also works:

dbus-send -options -moreoptions; echo ""

...but the piping is preferred for buttons as it doesn't display ANY output (some dbus calls work only with reply). All of the dbus commands should be working in the same way. Collection of these can be found on Phone control wiki page. The basic principle is the same as above (dbus command and piping an echo).

Scripts to display information

Battery scripts

All battery scripts are collected here. Pick the one which suits your needs. Examples of the output values are under each one.

There are 2 values for full battery capacity available. First one is design charge in mAh, which is always the same (1273 mAh). The second one is the one used in these scripts and it is the full charge from last charging. With displaying this one you can also monitor battery wear level.

Battery percentage level is calculated using first value and is therefore less accurate, that's why you cannot achieve 100% full battery, but only about 95%. After some time the full percentage will be even lower.

But last full charge value has one disadvantage. This is that after a reboot the phone forgets this value and the value returned is 0. It shows the proper value after next charging.


hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /g.la/ {last = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr"/"last" mAh)"} else {print "Charging"}'

Output example: 83 % (1000/1200 mAh), when charging Charging. 1000 is current mAh, 1200 is last full mAh.


hal-device bme | awk '/l.p/ {perc = $3}; /g.c/ {curr = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" % ("curr" mAh)"} else {print "Charging"}'

Output example: 83 % (1000 mAh), when charging Charging. 1000 is current mAh.


hal-device bme | awk '/l.p/ {perc = $3}; /s_c/ {isch = $3} END if (isch == "false") {print perc" %"} else {print "Chrg"}'

Output example: 83 %, when charging Chrg


hal-device bme | awk '/g.c/ {curr = $3}; /g.la/ {last = $3} END {print curr"/"last" mAh"}'

Output example: 1000/1200 mAh. 1000 is current mAh, 1200 is last full mAh.


hal-device bme | awk '/l.p/ {print $3" %"}'

Output example: 83 %


hal-device bme | awk '/g.c/ {print $3" mAh"}'

Output example: 1000 mAh (it displays current mAh).


hal-device bme | awk '/g.la/ {print $3" mAh"}'

Output example: 1200 mAh (it displays last full mAh).

Date

date +"%d.%m.%Y"

This command will show the date in format (for example) 01.10.2010. You can define your own format (between the quotation marks). Possible options are described on manpage.

IP

Internal IPs are obtained from the ifconfig and external IPs are obtained from the internet, because gprs0 IP which you can get with ifconfig is often from private address range, because mobile operators like to use NAT.


This script displays both WAN & LAN IPs, ISP, city and country code:

echo WAN IP: `wget -q -O - api.myiptest.com | awk -F"\"" '{print $4" ("$12" @ "$20", "toupper($28)")"}'`; echo LAN IP: `/sbin/ifconfig | awk '/Bc/ {print $2}' | cut -c6-`

You can replace WAN IP part of the script with the commands below to display it without additional info.

External (WAN)

wget -q -O - api.myiptest.com | awk -F"\"" '{print $4}'

Output example: 1.2.3.4


wget -q -O - api.myiptest.com | awk -F"\"" '{print $4 " ("$12" "toupper($28)")"}'

Output example: 1.2.3.4 (ISP CountryCode)


wget -q -O - api.myiptest.com | awk -F"\"" '{print $4" ("$12" @ "$20", "toupper($28)")"}'

Output example: 1.2.3.4 (ISP @ City, CountryCode)

Internal (LAN)

/sbin/ifconfig | awk '/Bc/ {print $2}' | cut -c6-

This one displays only wlan0 IP (used for SSH, WinSCP, VNC... in LAN).

Disk usage

rootfs (256MB /)

Percentage used:

df | awk '$1 == "rootfs" {print $5}'

Free space:

df -h | awk '$1 == "rootfs" {print $4}'

Internal memory for user data (27GB /home/user/MyDocs)

Percentage used:

df /home/user/MyDocs | awk '/My/ {print $5}'

Free space:

df -h /home/user/MyDocs | awk '/My/ {print $4}'

Internal memory for application data (2GB /home)

Percentage used:

df /home | awk '/ho/ {print $5}'

Free space:

df -h /home | awk '/ho/ {print $4}'

Memory card (/media/mmc1)

Percentage used:

df /media/mmc1 | awk '/mm/ {print $5}'

Free space:

df -h /media/mmc1 | awk '/mm/ {print $4}'

Uptime

To display uptime and load:

uptime | cut -c14-

To display only uptime:

uptime | sed -e 's/ ..:..:.. up //' -e 's/, load average: ...., ...., ....//'

Boot reason

cat /proc/bootreason

Boot count

cat /var/lib/dsme/boot_count

top

To display top $N programs (output of `top` command). This will always exclude top itself (which note is quite processor intensive, so you probably don't want this updating too often). Replace (3+$N) and $N with appropriate values -- for example, to show top two applications, 5 and 2. Alternately you can define $N, if you're up on shell scripting.

top -bn 1 | grep -v top | head -n (3+$N) | tail -n $N

World time

Time in a particular timezone can be shown with the date command; for example, for the current time in London use:

export TZ="Europe/London" date "+%H:%M"

A more complex usage, showing London: 04:21 | Denver: 22:21

echo "London: " `/usr/bin/worldtime Europe/London` " | Denver: " `/usr/bin/worldtime America/Denver`

with a shell script /usr/bin/worldtime something like this:

#!/bin/sh
if [ $# -gt 1 ]
then DATEFORMAT="$2"
else DATEFORMAT="%H:%M"
fi

if [ $# -gt 2 ]
then TIMETOSHOW="-d \"$3\""
else TIMETOSHOW=""
fi

export TZ=$1
date "+$DATEFORMAT" $TIMETOSHOW

Valid TZ values are taken from the zoneinfo (Olson) database.

Scripts for buttons

Make sure that update policy for button widgets is set only to "update when clicked". "Update when switched to desktop", "update interval" and "network presence" should be disabled to avoid automatic actions. Also keep in mind that widgets are executed at every boot so they can for example automatically disable Wi-Fi when phone boots.

Networking

Connect internet (show connections)

dbus-send --system --type=method_call --dest=com.nokia.icd_ui /com/nokia/icd_ui com.nokia.icd_ui.show_conn_dlg boolean:false | echo ""

Disconnect internet

dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true | echo ""

Enable/disable Wi-Fi

rootsh /path/to/script/enable-disable_wi-fi.sh | echo ""

enable-disable_wi-fi.sh:

#!/bin/sh
out=`ifconfig wlan0`
if [ $? -eq "0" ] ; then
if [ `echo "$out" | grep -c RUNNING` -gt "0" ] ; then
run-standalone.sh dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true
fi
ifconfig wlan0 down
rmmod wl12xx
run-standalone.sh dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:'Wi-Fi disabled'
exit 2
else
modprobe wl12xx
wl1251-cal
stop wlancond
start wlancond
ifconfig wlan0 up
run-standalone.sh dbus-send --system --type=method_call --dest=com.nokia.icd_ui /com/nokia/icd_ui com.nokia.icd_ui.show_conn_dlg boolean:false
exit 0
fi

Don't forget to make it executable.

Lock screen and keys

dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"locked" | echo ""

Radio mode

2G/3G

sh /path/to/script/2g3g.sh | echo ""

2g3g.sh:

#!/bin/sh
get=`dbus-send --system --print-reply --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_selected_radio_access_technology | awk '/b/ {print $2}'`
if [ `echo $get` -eq 1 ]; then
dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:2
else
dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:1
fi

When 3G or Dual mode is active, the script will switch to 2G. And when 2G is active, it will switch to 3G.

Don't forget to make the script executable.

2G

dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:1 | echo ""

3G

dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:2 | echo ""

Dual

dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:0 | echo ""

Update e-mail

sh /path/to/script/email.sh | echo ""

email.sh:

Make it executable and insert proper IAP_ID in the script. What it does is that it checks whether the phone is connected to the internet and if it is, send and receive is performed and if it is not, the defined connection (IAP_ID) is used to connect, then send and receive is performed and script waits about minute and a half (Modest e-mail client which N900 uses is slow in this aspect) and then disconnects internet.

#!/bin/sh
get=`/sbin/route | awk '/au/ {print $1}'`
if [ `echo $get` = default ]; then
dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.SendReceive
else
dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"Updating e-mail"
dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"IAP_ID" uint32:0
sleep 10
dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.SendReceive
sleep 90
dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true
dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"E-mail updated"
fi

Reboot

rootsh reboot | echo ""

FM transmitter

Enable/disable

/usr/bin/fmtx_client -p$(if [ $(cut -d. -f1 /proc/uptime ) -lt 100 ]; then echo 0; else /usr/bin/fmtx_client | /bin/grep -q '^state=enabled' ; echo $? ; fi) | /usr/bin/awk -F '=' '($1=="state") {print $2}'

Note: when you reboot the device, this script waits 100 seconds before you can turn the transmitter on/off again.

Increase power

rootsh echo 118 > /sys/class/i2c-adapter/i2c-2/2-0063/power_level | echo ""