Desktop Command Execution Widget scripts
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
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.
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 -F"[. ]" '$5 == "is_charging" {chrg = $7}; $5 == "percentage" {perc = $7} END if (chrg == "false") {print perc " %"} else {print "Chrg"}'
Output example: 83 %, when charging Chrg
hal-device bme | grep battery.reporting | awk -F. '{print $3}' | sort | awk '$1 == "current" { current = $3}; $1== "last_full" {print current "/" $3 " mAh"}'
Output example: 1000/1200 mAh. 1000 is current mAh, 1200 is last full mAh.
hal-device bme | grep l.p | awk '{print $3" %"}'
Output example: 83 %
hal-device bme | grep g.c | awk '{print $3" mAh"}'
Output example: 1000 mAh (it displays current mAh).
hal-device bme | grep g.la | awk '{print $3" mAh"}'
Output example: 1200 mAh (it displays last full mAh).
Boot reason
cat /proc/bootreason
Boot count
cat /var/lib/dsme/boot_count
External (WAN) IP
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) IP
/sbin/ifconfig | awk '/Bc/ {print $2}' | cut -c6-
This one displays only wlan0 IP (used for SSH, WinSCP, VNC... in LAN).
Disk/filesystem 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}'
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.
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.
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.
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 ""
Reboot
rootsh reboot | echo ""
Switch radio mode to 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.
Switch radio mode to 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 ""
Switch radio mode to 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 ""
Switch radio mode to 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 ""