Phone control

(Added Gstreamer section and DBus-scripts item)
(Reboot: dsmetool -b)
 
(150 intermediate revisions not shown)
Line 1: Line 1:
 +
{{ambox
 +
| type = notice
 +
| image=
 +
| text = '''This page is about controlling your Nokia device.  For historical reasons this page is called '''phone''' control even though it really covers more than just the phone functions.'''
 +
}}
 +
 +
{{Recommended phone usage}}
{{Recommended phone usage}}
-
=D-Bus=
+
==D-Bus==
-
These D-Bus commands can be run from terminal or as shell scripts. Useful for scheduling events with fcron, executing from Desktop Command Execution Widget, startup events, install scripts, etc. They should be run as:
+
These D-Bus commands can be run from terminal or as shell scripts. Useful for scheduling events with [[alarmed]] or [[fcron]], executing from [[Desktop Command Execution Widget scripts|Desktop Command Execution Widget]] or [[Queen BeeCon Widget]], startup events, install scripts, etc. They should be run as:
  run-standalone.sh SCRIPT.sh
  run-standalone.sh SCRIPT.sh
Line 12: Line 19:
Also note that most commands don't need "--print-reply" option. Those that don't need it should be '''tested without it''' and this page should be edited.
Also note that most commands don't need "--print-reply" option. Those that don't need it should be '''tested without it''' and this page should be edited.
-
===Make a phone call===
+
===Phone===
-
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call com.nokia.csd.Call.CreateWith string:"$1" uint32:0
+
====Open Phone application====
-
With this fantastic command you can make a phone call from the command line. Change $1 to whatever number you want, or if you put this in a shell script, run it and use the number you want to call as the option, ala:
+
  dbus-send --type=method_call --dest=com.nokia.HildonDesktop.AppMgr /com/nokia/HildonDesktop/AppMgr com.nokia.HildonDesktop.AppMgr.LaunchApplication string:"rtcom-call-ui"
-
  dbus-send-call 15555551234
+
-
===Open Phone application===
+
====Make a phone call====
-
  dbus-send --type=method_call --dest=com.nokia.HildonDesktop.AppMgr /com/nokia/HildonDesktop/AppMgr com.nokia.HildonDesktop.AppMgr.LaunchApplication string:"rtcom-call-ui"
+
  dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call com.nokia.csd.Call.CreateWith string:"$NUMBER" uint32:0
-
===End current phone call===
+
Change $NUMBER to phone number you want to call.
-
dbus-send --system --dest=com.nokia.csd.Call --print-reply /com/nokia/csd/call com.nokia.csd.Call.Release
+
====End current phone call====
-
This will release/end/hangup/reject the current call (or possibly all calls if more then one call is active - needs testing to verify behavior when more then 1 call active) or do nothing if no calls are active.  
+
dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call com.nokia.csd.Call.Release
-
===Activate LEDs===
+
This will release/end/hangup/reject the current call (or possibly all calls if more then one call is active) or do nothing if no calls are active.
 +
 
 +
====Answer current phone call====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer
 +
 
 +
This will answer/pickup the current (first) call.
 +
 
 +
If you answer the call immediately as you receive the Call Coming D-Bus message the phone seems to be in a specific call state where answering yields a <code>com.nokia.csd.Call.Error.NotAllowed</code> exception.
 +
 
 +
You need to answer the call after a delay of e.g. 1 s.
 +
 
 +
Another (probably better) approach is to register to the CallStatus D-Bus message (<code>com.nokia.csd.Call</code>, <code>/com/nokia/csd/call/1</code>, <code>com.nokia.csd.Call.Instance.CallStatus</code>) and wait for a call status >= 2 (=<code>CSD_CALL_STATUS_COMING</code>) after the "Coming" message.
 +
 
 +
====Call "starhash code"====
 +
 
 +
 
 +
For example '''*100#'''.
 +
dbus-send --system --type=method_call --dest=com.nokia.CallUI /com/nokia/CallUI com.nokia.CallUI.HandleMMICode string:"*100#"
 +
 
 +
 
 +
====Activate call forwarding====
 +
 +
 
 +
Forward '''all ('unconditional') calls''' to e.g. +12223456789
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''0''' string:"+12223456789" uint32:
 +
or
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''1''' string:"+12223456789" uint32:
 +
 
 +
----
 +
 
 +
Forward '''calls when 'busy'''' to e.g. +12223456789
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''2''' string:"+12223456789" uint32:
 +
 
 +
----
 +
 
 +
Forward '''unanswered calls''' to e.g. +12223456789 (leaving the last uint32: empty will use the last stored waiting time)
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''3''' string:"+12223456789" uint32:
 +
 
 +
Forward '''unanswered calls, when 'no answer' after 25 sec''' to e.g. +12223456789 (if you want to set this value explicitly; valid values: 5, 10, 15, 20, 25, 30)
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''3''' string:"+12223456789" uint32:'''25'''
 +
 
 +
----
 +
 
 +
Forward '''calls when you are 'out of reach' (no network, shut off, ...)''' to e.g. +12223456789
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''4''' string:"+12223456789" uint32:
 +
 
 +
----
 +
 
 +
Forward '''calls when 'not available' (busy, no answer, out of reach)''' to e.g. +12223456789
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:'''5''' string:"+12223456789" uint32:
 +
 
 +
--[[User:peterleinchen|peterleinchen]] 23:00, 15 December 2011 (UTC)
 +
 
 +
many thanks to the pre-contributor (I have searched for a long time to have the possibility to switch forwarding script based)
 +
 
 +
====Cancel call forwarding====
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS
 +
/com/nokia/csd/ss com.nokia.csd.SS.DivertCancel uint32:'''x''' string: uint32:
 +
Valid values for "x", pls see also above.
 +
0 unconditional
 +
 
 +
1 unconditional
 +
 
 +
2 busy
 +
 
 +
3 no answer (after xx sec)
 +
 
 +
4 out of reach
 +
 
 +
5 not available (busy, no answer, out of reach)
 +
 
 +
--[[User:peterleinchen|peterleinchen]] 23:00, 15 December 2011 (UTC)
 +
 
 +
 
 +
====Get [[:wikipedia:International_Mobile_Equipment_Identity|IMEI]]====
 +
 
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM/security Phone.Sim.Security.get_imei|awk -F "\"" '/g/ {print $2}'
 +
 
 +
====Get [[:wikipedia:International_Mobile_Subscriber_Identity|IMSI]]====
 +
 
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM Phone.Sim.get_imsi|awk -F "\"" '/g/ {print $2}'
 +
 
 +
====Get [[:wikipedia:Subscriber_identity_module#ICCID|ICCID]]====
 +
 
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.get_iccid|awk -F "\"" '/g/ {print $2}'
 +
 
 +
====Get SIM status====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM Phone.Sim.get_sim_status
 +
 
 +
====Get cellular signal strength====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_signal_strength
 +
 
 +
First line is percentage, second is dBm, third unknown.
 +
 
 +
====Get cellular registration status====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_registration_status
 +
 
 +
====Turn loudspeaker on====
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_on
 +
 
 +
(These loudspeaker ones don't work on my N900. If I add --print-reply I get "Error org.freedesktop.DBus.Error.ServiceUnknown: The name com.nokia.osso_hp_ls_controller was not provided by any .service files".)
 +
 
 +
====Turn loudspeaker off====
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_off
 +
 
 +
====Turn loudspeaker on (N900)====
 +
 
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestPrivacyOverride boolean:true
 +
 
 +
====Turn loudspeaker off (N900)====
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestPrivacyOverride boolean:false
 +
 
 +
====Turn mute on (N900)====
 +
 
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestMute boolean:true
 +
 
 +
====Turn mute off (N900)====
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestMute boolean:false
 +
 
 +
====Turn bluetooth override on (N900)====
 +
 
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestBluetoothOverride boolean:true
 +
 
 +
====Turn bluetooth override off (N900)====
 +
dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestBluetoothOverride boolean:false
 +
 
 +
====Start Vibrating Incoming Call====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_vibrator_pattern_activate string:PatternIncomingCall
 +
 
 +
PatternXXX according to definition in /etc/mce/mce.ini
 +
 
 +
====Stop Vibrating Incoming Call====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_vibrator_pattern_deactivate string:PatternIncomingCall
 +
 
 +
====Vibration Single Shot====
 +
dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_start_manual_vibration int32:255 int32:1000
 +
 
 +
First int is power, second is duration in milliseconds
 +
 
 +
===Profiles===
 +
 
 +
====Set General====
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"general"
 +
 
 +
====Set Silent====
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"silent"
 +
 
 +
 
 +
 
 +
====Query current profile====
 +
 
 +
dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_profile
 +
 
 +
====List all profiles====
 +
 
 +
dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_profiles|awk -F "\"" '/g/ {print $2}'
 +
 
 +
====Get all profile Values====
 +
 
 +
You can modify any profile value, eg. clock alarm enabled, im alert volume, keypad sound level, touchscreen sound level, ... To find out which keys exist, to what value they are set and what values can be given you can use the following command. (For the profile "silent" just put "silent" at the end instead of "general".)
 +
 
 +
dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_values string:"general"
 +
 
 +
The returned value is an array of struct. Each struct has 3 strings: key, value, type. Type can be eg. "INTEGER 0-2" saying that the values 0, 1 and 2 are correct values for this key.
 +
 
 +
====Set a profile value====
 +
 
 +
To modify the above mentioned profile values you need this method. The method takes three parameters, all strings: profile, key and value. Profile can be "general" or "silent", key is one of the keys from the above (get all profile values), value can be set to anything allowed by "type" from the above method.
 +
 
 +
To enable vibrating alert for the profile "general" your script would look like this:
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_value string:"general" string:"vibrating.alert.enabled" string:"On"
 +
 
 +
===LED===
 +
 
 +
====Activate LEDs====
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_activate string:"PatternCommunicationIM"
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_activate string:"PatternCommunicationIM"
-
===Deactivate LEDs===
+
====Deactivate LEDs====
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_deactivate string:"PatternCommunicationIM"
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_deactivate string:"PatternCommunicationIM"
-
===New e-mail===
+
====Set brightness of backlight LEDs====
-
  dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.MailTo string:"mailto:"
+
  dbus-send --print-reply --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer_backlight org.freedesktop.Hal.Device.LaptopPanel.SetBrightness int32:$brightness
-
===Send and receive e-mail===
+
(where $brightness is 0...255)
-
It works, but it takes looong time (up to minute and a half) via GPRS (2.5, 3 or 3.5). Network and/or speed is not the problem, it just takes long via GPRS. It is much faster via Wi-Fi.
+
===Messaging===
-
dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.SendReceive
+
====New e-mail====
-
===Get IMEI===
+
dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.MailTo string:"mailto:"
-
dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM/security Phone.Sim.Security.get_imei
+
====Send and receive e-mail====
-
===Open link in browser===
+
It works, but it takes up to 2 minutes for modest to start refreshing and after that it depends on the speed of the connection how fast it is going to be completed, usually up to 5 seconds, 2G can be a bit slower.
-
  dbus-send --system --type=method_call --dest=com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser.load_url string:"google.com"
+
  dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.SendReceive
-
===Set presence===
+
====Set presence====
  dbus-send --type=method_call --print-reply --dest=org.freedesktop.Telepathy.MissionControl /org/freedesktop/Telepathy/MissionControl org.freedesktop.Telepathy.MissionControl.SetPresence uint32:2 string:"I'm here"
  dbus-send --type=method_call --print-reply --dest=org.freedesktop.Telepathy.MissionControl /org/freedesktop/Telepathy/MissionControl org.freedesktop.Telepathy.MissionControl.SetPresence uint32:2 string:"I'm here"
-
===Lock (secure) the device===
+
Note: This method does not work in Maemo 5. Workaround: http://talk.maemo.org/showthread.php?t=55686
-
dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_open string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'3'
+
====Change peak_schedule settings====
-
===Unlock the device===
+
Check:
 +
run-standalone.sh gconftool-2 -R /apps/activesync
-
  dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_close string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'0'
+
Set (check if yours is named ActiveSyncAccount1):
 +
  run-standalone.sh gconftool-2 --set /apps/activesync/ActiveSyncAccount1/schedule/peak_schedule --type=int 15
 +
Where the last number is one of the following (as standard in GUI):
 +
 
 +
* '''0''' = Always on
 +
* '''-1''' = Manual
 +
* '''15''' = Every 15 minutes
 +
* '''30''' = Every 30 minutes
 +
* '''60''' = Every hour
 +
* '''240''' = Every 4 hours
 +
* '''720''' = Every 12 hours
 +
 
 +
===Media player===
-
===Open file in media player===
+
====Open file in media player====
-
  dbus-send --dest=com.nokia.mediaplayer /com/nokia/mediaplayer com.nokia.mediaplayer.mime_open string:"file:///$1"
+
  dbus-send --print-reply --dest=com.nokia.mediaplayer /com/nokia/mediaplayer com.nokia.mediaplayer.mime_open string:"file:///$1"
-
===Pause what's currently playing===
+
====Pause what's currently playing====
  dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.pause
  dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.pause
-
Older:
+
====Stop what's currently playing====
-
dbus-send --dest=com.nokia.osso_media_server /com/nokia/osso_media_server com.nokia.osso_media_server.music.pause
+
-
===Send notification (orange one line popup)===
+
dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.stop
 +
 
 +
====Play what's currently selected====
 +
 
 +
dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.play
 +
 
 +
====Unpause what's currently selected====
 +
 
 +
dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.resume
 +
 
 +
====Play next mediafile====
 +
 
 +
dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.next
 +
 
 +
====Play previous mediafile====
 +
 
 +
dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.previous
 +
 
 +
===Notifications===
 +
 
 +
====Send notification (orange one line popup)====
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"NOTIFICATION"
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"NOTIFICATION"
-
===Send dialog notification (orange multi line popup requiring user interaction)===
+
====Send notification (orange multiple line popup)====
 +
 
 +
dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"NOTE line 1
 +
line 2
 +
. . .
 +
line n"
 +
--[[User:peterleinchen|peterleinchen]] 00:22, 4 January 2012 (UTC)
 +
 
 +
====Send dialog notification (orange multi line popup, requiring user interaction)====
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32:0 string:"OK"
  dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32:0 string:"OK"
Line 88: Line 319:
Not sure what string "OK" does, but it is needed and can be anything.
Not sure what string "OK" does, but it is needed and can be anything.
-
===Pause (panucci)===
+
It does nothing here and is not explicitly needed, pls. see below command and also section.
 +
dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32: string:
-
dbus-send --type=method_call --dest=org.panucci.panucciInterface /panucciInterface org.panucci.panucciInterface.playPause
+
====Send dialog notification (black/white with floating bar and confirmation button, requiring user action)====
-
===Reboot===
+
dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32:'''4''' string:"OK"
-
dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_reboot
+
String "OK" is the text for the button.
-
This is same as rebooting from power key menu (needs uncommenting in certain XML file to appear) and has been identified as insecure way to reboot the device (no file system synchronization, etc.). Better command is to simply enter "reboot" in terminal.
+
--[[User:peterleinchen|peterleinchen]] 21:29, 3 January 2012 (UTC)
-
===Get phone registration status===
+
====Send email/SMS style notification====
 +
see http://wiki.maemo.org/Phone_control#Make_an_.22Email_Style.22_notification_dialog
-
dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_registration_status
+
===Securing===
-
===Connect (show change connection UI)===
+
====Security Device Lock (with lockcode)====
-
  dbus-send --system --type=method_call --dest=com.nokia.icd_ui /com/nokia/icd_ui com.nokia.icd_ui.show_conn_dlg boolean:false
+
  dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_open string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'3'
-
If "boolean:true" at the end, one-line notification saying "No saved connections available" appears. Maybe affects more than that?
+
The next method is a 2nd - surprisingly shorter - way to enter device lock mode. Its benefit is that it even disables the device power button menu:
-
===Shutdown===
+
dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.devlock_callback int32:0
-
dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_shutdown
+
====Unlock (pop up lockcode requester?)====
-
See warning at reboot dbus call (needs testing).
+
-
===Turn loudspeaker on===
+
dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_close string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'0'
-
dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_off
+
Next method is a 2nd, more direct way to stop device lock mode.
-
===Turn loudspeaker off===
+
dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.devlock_callback int32:2
-
dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_on
+
====Query Devlock State====
-
===Show dashboard===
+
  dbus-send --system --type=method_call --dest="com.nokia.mce" --print-reply "/com/nokia/mce/request" com.nokia.mce.request.get_devicelock_mode |awk -F "\"" '/g/ {print $2}'
-
dbus-send /com/nokia/hildon_desktop com.nokia.hildon_desktop.exit_app_view
 
-
===Lock screen and keys===
+
====Lock screen and keys (slider lockswitch)====
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"locked"
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"locked"
-
===Unlock screen and keys===
+
====Unlock screen and keys====
 +
This command will unlock and illuminate the screen (useful when accessing the phone externally through [http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html PuTTY])
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"unlocked"
  dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_tklock_mode_change string:"unlocked"
-
===Connect to specific saved connection===
+
====Query lock state of screen and keys====
 +
 
 +
Will return ''locked'' or ''unlocked'' depending on lock state
 +
dbus-send --system --type=method_call --dest="com.nokia.mce" --print-reply "/com/nokia/mce/request" com.nokia.mce.request.get_tklock_mode|awk -F "\"" '/g/ {print $2}'
 +
 
 +
===Networking===
 +
 
 +
====Enable ICD log====
 +
There are two methods to enable ICD logs
 +
 
 +
1. Print to the syslog:
 +
  (1)Use the following cmd
 +
  (2)$ syslogd
 +
  (3)$ icd2 –l0
 +
  (4)The log will print to the /var/log/syslog
 +
2. Print to the standard output 
 +
  (1)Get the source code of icd2
 +
  (2)Add the begging of source code of “support/osso-log.h” "#define OSSOLOG_STDOUT"
 +
  (3)$ icd2 –l0
 +
  (4)The log will print to the standard output
 +
 
 +
====Connect to specific saved connection====
  dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"IAP_ID" uint32:0
  dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"IAP_ID" uint32:0
Line 145: Line 398:
Keep in mind that phone has to be disconnected in order to connect via this call.
Keep in mind that phone has to be disconnected in order to connect via this call.
 +
If not, an error message will occur if you add --print-reply to the dbus-send command.
-
===Disconnect internet===
+
====Connect to any saved connection====
-
  dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true
+
  dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"[ANY]" uint32:0
-
===Set phone radio mode===
+
====Disconnect internet====
-
dbus-send --system --type=method_call --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.set_selected_radio_access_technology byte:0
+
=====ICD2=====
-
byte: 0=Dual, 1=2G, 2=3G
+
dbus-send --print-reply --system --dest=com.nokia.icd2 /com/nokia/icd2 com.nokia.icd2.disconnect_req uint32:0x8000
-
===Set profiles===
+
=====ICD=====
-
  dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"general"
+
  dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true
 +
 
 +
On [[Maemo 5/PR1.2|PR1.2]] :
 +
Error org.freedesktop.DBus.Error.UnknownMethod: Method "disconnect" with signature "b" on interface "com.nokia.icd_ui" doesn't exist
 +
 
 +
====Connect (show change connection UI)====
 +
 
 +
dbus-send --system --type=method_call --dest=com.nokia.icd_ui /com/nokia/icd_ui com.nokia.icd_ui.show_conn_dlg boolean:false
-
Change "general" to "silent" if needed.
+
If "boolean:true" at the end, one-line notification saying "No saved connections available" appears. Maybe affects more than that? Most likely, boolean:true leads to using saved connections if there are any, and boolean:false forces to display the connection dialog.
-
===Enable cellular radio===
+
====Enable cellular radio====
  dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:true
  dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:true
-
===Disable cellular radio===
+
====Disable cellular radio====
  dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:false
  dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:false
-
===D-Bus Scripts===
+
====Change device mode====
 +
 
 +
String possibility "offline","flight","normal"
 +
 
 +
dbus-send --system --dest=com.nokia.mce --type=method_call /com/nokia/mce/request com.nokia.mce.request.req_device_mode_change string:offline
 +
 
 +
====Query device mode====
 +
 
 +
dbus-send --system --dest=com.nokia.mce --type=method_call --print-reply /com/nokia/mce/request com.nokia.mce.request.get_device_mode | awk -F "\"" '/g/ {print $2}'
 +
 
 +
===Radio mode===
 +
 
 +
====Current Mode====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_radio_access_technology
 +
 
 +
====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
 +
 
 +
====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
 +
 
 +
====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
 +
 
 +
===Bluetooth===
 +
 
 +
====Identify adapter path====
 +
 
 +
You need to know adapter path in order to send D-Bus call to the right place. You can get it with entering this command into the terminal:
 +
 
 +
dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.ListAdapters | awk -F'"' '/at/ {print $2}'
 +
or
 +
dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}'
 +
 
 +
====Identify Properties====
 +
 
 +
dbus-send --system --print-reply --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.GetProperties
 +
 
 +
====Enable====
 +
 
 +
Using the adapter path value returned with first command, for example ''/org/bluez/906/hci0''.
 +
 
 +
dbus-send --system --type=method_call --dest=org.bluez /org/bluez/906/hci0 org.bluez.Adapter.SetProperty string:Powered variant:boolean:true
 +
 
 +
This one automatically inserts adapter path:
 +
 
 +
dbus-send --system --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.SetProperty string:Powered variant:boolean:true
 +
 
 +
====Disable====
 +
 
 +
dbus-send --system --type=method_call --dest=org.bluez /org/bluez/906/hci0 org.bluez.Adapter.SetProperty string:Powered variant:boolean:false
 +
 
 +
With auto-discovery of adapter path:
 +
 
 +
dbus-send --system --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.SetProperty string:Powered variant:boolean:false
 +
 
 +
====Connect to specific device====
 +
 
 +
devmac=00:11:22:33:44:55
 +
service=AudioSink
 +
 +
adapter=$(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}')
 +
device=$(dbus-send --system --print-reply --dest=org.bluez ${adapter} org.bluez.Adapter.FindDevice string:${devmac} | awk -F'"' '/at/ {print $2}')
 +
dbus-send --system --type=method_call --print-reply --dest=org.bluez ${device} org.bluez.${service}.Connect
 +
 
 +
Change the AudioSink to any service and the devmac to the MAC of bluetooth device.
 +
 
 +
===Check for updates===
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.hildon_application_manager /com/nokia/hildon_application_manager com.nokia.hildon_application_manager.check_for_updates
 +
 
 +
===Open link in browser===
 +
 
 +
dbus-send --system --type=method_call --dest=com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser.load_url string:"google.com"
 +
 
 +
===Open a pdf file with the default pdf reader application===
 +
 
 +
dbus-send --print-reply --dest=com.nokia.osso_pdfviewer /com/nokia/osso_pdfviewer com.nokia.osso_pdfviewer.mime_open string:/home/user/MyDocs/.documents/file_name.pdf
 +
 
 +
===Open a file with the default notes application===
 +
 
 +
dbus-send --print-reply --dest=com.nokia.osso_notes /com/nokia/osso_notes com.nokia.osso_notes.mime_open string:/home/user/MyDocs/.documents/file_name
 +
 
 +
===Open the default notes application===
 +
 
 +
dbus-send --print-reply --dest=com.nokia.osso_notes /com/nokia/osso_notes com.nokia.osso_notes.top_application
 +
 
 +
=== Open folder ===
 +
 
 +
dbus-send --print-reply --dest=com.nokia.osso_filemanager /com/nokia/osso_filemanager com.nokia.osso_filemanager.open_folder string:/home/user/MyDocs/
 +
 
 +
===Set volume===
 +
 
 +
dbus-send --type=method_call --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.extension.set_extension_property string:volume variant:uint32:50
 +
 
 +
The value can be between 0 and 100.
 +
 
 +
===Get volume===
 +
 
 +
dbus-send --print-reply --type=method_call --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.extension.get_extension_property string:volume|awk '/nt/ {print $3}'
 +
 
 +
===Reboot===
 +
 
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_reboot
 +
This is same as rebooting from power key menu (needs uncommenting in certain XML file to appear) and has been identified as insecure way to reboot the device (no filesystem synchronization, etc.). Better command is to simply enter "reboot" in root terminal.
 +
 
 +
Yet another method: dsmetool -b
 +
 
 +
===Shutdown===
 +
 
 +
dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_shutdown
 +
See warning at reboot D-Bus call (needs testing).
 +
 
 +
===Show dashboard===
 +
 
 +
dbus-send /com/nokia/hildon_desktop com.nokia.hildon_desktop.exit_app_view
 +
 
 +
===Other===
 +
 
 +
====D-Bus Scripts====
You can also use [[DbusScripts|dbus-scripts]] to execute any command when various actions are triggered on D-Bus.
You can also use [[DbusScripts|dbus-scripts]] to execute any command when various actions are triggered on D-Bus.
-
=GStreamer=
+
====Panucci (pause)====
 +
 
 +
dbus-send --type=method_call --dest=org.panucci.panucciInterface /panucciInterface org.panucci.panucciInterface.playPause
 +
 
 +
====Device Orientation====
 +
 
 +
dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.get_device_orientation
 +
 
 +
==GConf==
 +
 
 +
===Reset GPRS data counter===
 +
 
 +
The commands are PR1.2 compliant and do not work on previous versions.
 +
 
 +
gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_home_rx_bytes
 +
gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_home_tx_bytes
 +
gconftool-2 -s /system/osso/connectivity/network_type/GPRS/gprs_home_reset_time --type=string $(date +%s)
 +
 
 +
==Command line==
 +
 
 +
===Enable FM Transmitter===
 +
 
 +
/usr/bin/fmtx_client -p 1
 +
 
 +
===Disable FM Transmitter===
 +
 
 +
/usr/bin/fmtx_client -p 0
 +
 
 +
==GStreamer==
 +
 
 +
===Take a picture with front camera===
 +
 
 +
gst-launch v4l2src device=/dev/video1 num-buffers=1 ! ffmpegcolorspace ! jpegenc ! filesink location=frontcam.jpg
===Shoot photo after 10 seconds===
===Shoot photo after 10 seconds===
-
  /bin/sleep 10 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video0 num-buffers=1 \! video/x-raw-yuv,width=2592,height=1968  \! ffmpegcolorspace \! jpegenc \! filesink location=/home/user/MyDocs/foto-da-minha-tartaruga-de-estimacao.jpg
+
The camera application must be off for it to work. And of course the camera shutter must be open...gst-launch comes with gstreamer-tools (or gst-launch-0.10 and gstreamer0.10-tools)
 +
 
 +
  /bin/sleep 10 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video0 num-buffers=1 \! video/x-raw-yuv,width=2592,height=1968  \! ffmpegcolorspace \! jpegenc \! filesink location=/home/user/MyDocs/DCIM/photo.jpg
 +
 
 +
To shoot from the front camera, change '''/dev/video0''' to '''/dev/video1''' and the proper resolution:
 +
 
 +
/bin/sleep 10 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video1 num-buffers=1 \! video/x-raw-yuv,width=640,height=480  \! ffmpegcolorspace \! jpegenc \! filesink location=/home/user/MyDocs/DCIM/photo.jpg
Other way:
Other way:
-
  /bin/sleep 10; /usr/bin/gst-launch v4l2camsrc ! ffmpegcolorspace ! jpegenc ! identity error-after=1 ! filesink location=/home/user/MyDocs/blah.jpg
+
  /bin/sleep 10; /usr/bin/gst-launch v4l2camsrc ! ffmpegcolorspace ! jpegenc ! identity error-after=1 ! filesink location=/home/user/MyDocs/DCIM/photo.jpg
-
=GConf=
+
==Python==
-
===Reset GPRS data counter===
+
===Make a phone call via the cellular network===
-
gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_rx_bytes
+
<source lang="python">
-
gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_tx_bytes
+
import dbus
-
gconftool-2 -s /system/osso/connectivity/network_type/GPRS/gprs_reset_time --type=string $(date +%s)
+
def place_call(number):
 +
  bus = dbus.SystemBus()
 +
  csd_call = dbus.Interface(bus.get_object('com.nokia.csd',
 +
                                          '/com/nokia/csd/call'),
 +
                                          'com.nokia.csd.Call')
 +
  csd_call.CreateWith(str(number), dbus.UInt32(0))
 +
</source>
-
=Python=
+
=== Make a phone call via SIP ===
 +
<source lang="python">
 +
#!/usr/bin/python
-
===Make a phone call===
+
import dbus
 +
import sys
-
  import dbus
+
# Get the target phone number (or SIP address) from the command line
-
   def place_call(number):
+
TARGET = sys.argv[1];
-
    bus = dbus.SystemBus()
+
 
-
     csd_call = dbus.Interface(bus.get_object('com.nokia.csd',
+
# Configure the telepathy path to the SofiaSIP account that we wish to use.
-
                                            '/com/nokia/csd/call'),
+
# Use "mc-tool list" (from the libmissioncontrol-utils package) to see your accounts.
-
                                            'com.nokia.csd.Call')
+
SIP_ACCOUNT = 'sofiasip/sip/_31234567_40sipgate_2eco_2euk0'
-
    csd_call.CreateWith(str(number), dbus.UInt32(0))
+
 
 +
# This gets us a connnection to the session bus
 +
bus = dbus.SessionBus()
 +
 
 +
# This sets up a path to the SIP account within telepathy.
 +
PATH = '/org/freedesktop/Telepathy/Account/'
 +
PATH += SIP_ACCOUNT
 +
 
 +
# This sets up a proxy object as a "handle" to the AccountManager of our target account
 +
account = bus.get_object('org.freedesktop.Telepathy.AccountManager', PATH)
 +
 
 +
# This launches the actual SIP call with a method call to EnsureChannel on that object
 +
account.EnsureChannel( \
 +
        dbus.Dictionary({
 +
                dbus.String(u'org.freedesktop.Telepathy.Channel.TargetHandleType'): dbus.UInt32(1),
 +
                dbus.String(u'org.freedesktop.Telepathy.Channel.ChannelType'): dbus.String(u'org.freedesktop.Telepathy.Channel.Type.StreamedMedia'),
 +
                dbus.String(u'org.freedesktop.Telepathy.Channel.TargetID'): dbus.String(TARGET),
 +
        }, signature='sv'),
 +
        dbus.UInt64(0),
 +
        dbus.String(''),
 +
        dbus_interface='com.nokia.Account.Interface.ChannelRequests')
 +
 
 +
sys.exit(0)
 +
 
 +
</source>
 +
 
 +
===Send SMS===
 +
 
 +
ssms.py using new QtMobility bindings by ossipena:
 +
 
 +
<source lang="python">
 +
#!/usr/bin/env python
 +
# -*- coding: utf-8 -*-
 +
 
 +
#ssms Ossipena/TimoP
 +
#send smses from command line
 +
#licence : Do whatever you want
 +
#deps:
 +
#pyside-qt4
 +
#pyside-mobility
 +
 
 +
'''imports'''
 +
from QtMobility.Messaging import *
 +
from PySide.QtCore import *
 +
import sys
 +
from PyQt4 import QtCore
 +
 
 +
 
 +
app = QCoreApplication(sys.argv)
 +
 
 +
'''get number and name'''
 +
stringit = sys.argv
 +
numpertemp = str(stringit[1:2])
 +
mesits = str(stringit[2:])[2:-2]
 +
 
 +
num = str(numpertemp[2:-2])
 +
 
 +
if (mesits == ""):
 +
   print "Usage:"
 +
  print "python ssms.py 01234567 'message text here'"
 +
  sys.exit(69)
 +
else:
 +
  print "number is " + str(num)
 +
  print "message is " + str(mesits)
 +
 
 +
'''define message to be sent'''
 +
numperi = QtCore.QString(num)
 +
 
 +
numper = QMessageAddress(QMessageAddress.Phone, numperi)
 +
mesitsi = QMessage()
 +
mesitsi.setType(QMessage.Sms)
 +
mesitsi.setTo(numper)
 +
mesitsi.setBody(mesits)
 +
 
 +
'''send message'''
 +
sender = QMessageService()
 +
if (sender.send(mesitsi)):
 +
  print "success"
 +
else:
 +
  print "fail"
 +
</source>
 +
 
 +
From:
 +
http://talk.maemo.org/showpost.php?p=548948&postcount=52
 +
 
 +
<source lang="python">
 +
#!/usr/bin/env python2.5
 +
 
 +
import pexpect
 +
import time
 +
from subprocess import *
 +
 
 +
child = pexpect.spawn('pnatd');
 +
child.send('at\r');
 +
time.sleep(0.25);
 +
child.send('at+cmgf=1\r');
 +
time.sleep(0.25);
 +
child.send('at+cmgs="+XXXXXXX"\r');
 +
child.send('SMSTEXTSMSTEXTSMSTEXT');
 +
child.send(chr(26));
 +
child.send(chr(26));
 +
child.sendeof();
 +
</source>
 +
 
 +
There's also a python script that uses D-Bus instead from http://talk.maemo.org/showpost.php?p=558430&postcount=57:
 +
 
 +
<source lang="python">
 +
#!/usr/bin/env python2.5         
 +
import sched, time               
 +
import dbus                     
 +
import gobject                   
 +
from dbus.mainloop.glib import DBusGMainLoop
 +
 
 +
def octify(str):
 +
        '''      
 +
        Returns a list of octet bytes representing
 +
        each char of the input str.             
 +
        '''                                     
 +
 
 +
        bytes = map(ord, str)
 +
        bitsconsumed = 0   
 +
        referencebit = 7   
 +
        octets = []         
 +
 
 +
        while len(bytes):
 +
                byte = bytes.pop(0)
 +
                byte = byte >> bitsconsumed
 +
                                         
 +
                try:                     
 +
                        nextbyte = bytes[0]
 +
                        bitstocopy = (nextbyte & (0xff >> referencebit)) << referencebit
 +
                        octet = (byte | bitstocopy)                                   
 +
 
 +
                except:
 +
                        octet = (byte | 0x00)
 +
 
 +
                if bitsconsumed != 7:
 +
                        octets.append(byte | bitstocopy)
 +
                        bitsconsumed += 1             
 +
                        referencebit -= 1             
 +
                else:                                 
 +
                        bitsconsumed = 0               
 +
                        referencebit = 7               
 +
 
 +
        return octets
 +
 
 +
def semi_octify(str):
 +
        '''         
 +
        Expects a string containing two digits.
 +
        Returns an octet -                   
 +
        first nibble in the octect is the first
 +
        digit and the second nibble represents
 +
        the second digit.                     
 +
        '''                                   
 +
        try:                                 
 +
                digit_1 = int(str[0])         
 +
                digit_2 = int(str[1])         
 +
                octet = (digit_2 << 4) | digit_1
 +
        except:                               
 +
                octet = (1 << 4) | digit_1     
 +
 
 +
        return octet
 +
 
 +
 
 +
def deoctify(arr):
 +
 
 +
        referencebit = 1
 +
        doctect = []   
 +
        bnext = 0x00   
 +
 
 +
        for i in arr:
 +
 
 +
                bcurr = ((i & (0xff >> referencebit)) << referencebit) >> 1
 +
                bcurr = bcurr | bnext                                     
 +
 
 +
                if referencebit != 7:
 +
                        doctect.append( bcurr )
 +
                        bnext = (i & (0xff << (8 - referencebit)) ) >> 8 - referencebit
 +
                        referencebit += 1                                             
 +
                else:                                                                 
 +
                        doctect.append( bcurr )                                       
 +
                        bnext = (i & (0xff << (8 - referencebit)) ) >> 8 - referencebit
 +
                        doctect.append( bnext )                                       
 +
                        bnext = 0x00                                                 
 +
                        referencebit = 1                                             
 +
 
 +
        return ''.join([chr(i) for i in doctect])
 +
 
 +
 
 +
def createPDUmessage(number, msg):
 +
        '''                     
 +
        Returns a list of bytes to represent a valid PDU message
 +
        '''                                                   
 +
        numlength = len(number)                               
 +
        if (numlength % 2) == 0:                               
 +
                rangelength = numlength                       
 +
        else:                                                 
 +
                number = number + 'F'                         
 +
                rangelength = len(number)                     
 +
 
 +
        octifiednumber = [ semi_octify(number[i:i+2]) for i in range(0,rangelength,2) ]
 +
        octifiedmsg = octify(msg)                                                     
 +
        HEADER = 1                                                                   
 +
        FIRSTOCTETOFSMSDELIVERMSG = 10                                               
 +
        ADDR_TYPE = 129 #unknown format                                               
 +
        number_length = len(number)                                                   
 +
        msg_length = len(msg)                                                         
 +
        pdu_message = [HEADER, FIRSTOCTETOFSMSDELIVERMSG, number_length, ADDR_TYPE]   
 +
        pdu_message.extend(octifiednumber)                                           
 +
        pdu_message.append(0)                                                         
 +
        pdu_message.append(0)                                                         
 +
        pdu_message.append(msg_length)                                               
 +
        pdu_message.extend(octifiedmsg)                                               
 +
        return pdu_message                                                           
 +
 
 +
 
 +
def sendmessage(number, message):
 +
 
 +
        bus = dbus.SystemBus()
 +
        smsobject = bus.get_object('com.nokia.phone.SMS', '/com/nokia/phone/SMS/ba212ae1')
 +
        smsiface = dbus.Interface(smsobject, 'com.nokia.csd.SMS.Outgoing')
 +
        arr = dbus.Array(createPDUmessage(number.replace('+', '00'), message))
 +
 
 +
        msg = dbus.Array([arr])
 +
        smsiface.Send(msg,'')
 +
 
 +
 
 +
def callback(pdumsg, msgcenter, somestring, sendernumber):
 +
 
 +
        msglength = int(pdumsg[18])
 +
        msgarray = pdumsg[19:len(pdumsg)]
 +
 
 +
        msg = deoctify(msgarray)
 +
 
 +
        if msg > 0:
 +
              print 'New message received from %s' % sendernumber
 +
              print 'Message length %d' % msglength
 +
              print 'Message: %s' % msg
 +
 
 +
              if msg == "ping":
 +
                      print "Sending reply: pong"
 +
                      sendmessage(sendernumber.replace("+","00"), "pong")
 +
              else:
 +
                      print "Unknown command"
 +
 
 +
 
 +
def listen():
 +
        DBusGMainLoop(set_as_default=True)
 +
        bus = dbus.SystemBus() #should connect to system bus instead of session because the former is where the incoming signals come from
 +
        bus.add_signal_receiver(callback, path='/com/nokia/phone/SMS', dbus_interface='Phone.SMS', signal_name='IncomingSegment')
 +
        gobject.MainLoop().run()
 +
 
 +
 
 +
if __name__ == '__main__':
 +
  import time
 +
 
 +
  def schedule_task(schedule, fn, *args):
 +
      import sched
 +
      s = sched.scheduler(time.time, time.sleep)
 +
      startTime = time.mktime(time.strptime(schedule, '%b %d %H:%M %Y'))
 +
      s.enterabs(startTime, 0, fn, args)
 +
      s.run()
 +
 
 +
  import getopt, sys
 +
  try: 
 +
    opts, args = getopt.getopt(sys.argv[1:],"hlt:", ["help","listen","time="])
 +
 
 +
  except getopt.GetoptError, err:
 +
    # print help information and exit:
 +
    print str(err) # will print something like "option -a not recognized"
 +
    usage()
 +
    sys.exit(2) 
 +
  listening = False
 +
  timeofday = ''
 +
  for opt, arg in opts:
 +
    if opt in ("-h", "--help"):
 +
      usage()                   
 +
      sys.exit()                 
 +
    elif opt in ("-l", "--listen"):
 +
      listening = True               
 +
    elif opt in ("-t", "--time"):
 +
      timeofday = arg                         
 +
    else:
 +
      assert False, "unhandled option"
 +
 
 +
  number = args[0]         
 +
  msg = args[1]
 +
  if msg != '':
 +
    if timeofday == '':
 +
        sendmessage(number, msg)
 +
    else:
 +
        today = time.strftime('%b %d x %Y', time.localtime())
 +
        schedule = today.replace('x', timeofday)
 +
        schedule_task(schedule, sendmessage, number, msg)
 +
  if listening:
 +
    listen()
 +
</source>
===Send dialog notification (orange multi line popup requiring user interaction)===
===Send dialog notification (orange multi line popup requiring user interaction)===
-
  import dbus
+
<source lang="python">
-
  def show_notification_dialog(message, mode="single"):
+
import dbus
-
    bus = dbus.SystemBus()
+
def show_notification_dialog(message, mode="single"):
-
    iface = dbus.Interface(bus.get_object('org.freedesktop.Notifications',
+
  bus = dbus.SystemBus()
-
                                          '/org/freedesktop/Notifications'),
+
  iface = dbus.Interface(bus.get_object('org.freedesktop.Notifications',
-
                                          'org.freedesktop.Notifications')
+
                                        '/org/freedesktop/Notifications'),
-
    if mode == "single":
+
                                        'org.freedesktop.Notifications')
-
        iface.SystemNoteInfoprint(message)
+
  if mode == "single":
-
    elif mode == "multiline":
+
      iface.SystemNoteInfoprint(message)
-
        iface.SystemNoteDialog(str(message), dbus.UInt32(0), 'Ok')
+
  elif mode == "multiline":
 +
      iface.SystemNoteDialog(str(message), dbus.UInt32(0), 'Ok')
 +
</source>
 +
 
 +
This function allows you to show notification either with multiline (on Maemo pre-5 it will show a dialog with an "Ok" button) or single line (tiny notifications hiding automatically).
 +
 
 +
===Take a screenshot===
 +
 
 +
<source lang="python">
 +
import gtk.gdk
 +
 
 +
w = gtk.gdk.get_default_root_window()
 +
sz = w.get_size()
 +
print "The size of the window is %d x %d" % sz
 +
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
 +
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
 +
if (pb != None):
 +
  pb.save("screenshot.png","png")
 +
  print "Screenshot saved to screenshot.png."
 +
else:
 +
  print "Unable to get the screenshot."
 +
</source>
 +
 
 +
Credits: took code from [http://stackoverflow.com/questions/69645/take-a-screenshot-via-a-python-script-linux here].
 +
 
 +
 
 +
There is also a way using PyQt:
 +
<source lang="python">
 +
import sys
 +
import time
 +
from PyQt4.QtGui import QPixmap, QApplication
 +
app = QApplication(sys.argv)
 +
file = "/home/user/MyDocs/.images/Screenshots/Screenshot-"+time.strftime("%Y%m%d")+"-"+time.strftime("%H%M%S")+".png"
 +
QPixmap.grabWindow(QApplication.desktop().winId()).save(file, 'png')
 +
</source>
 +
 
 +
===Make an "Email Style" notification dialog===
 +
 
 +
<source lang="python">
 +
import dbus
 +
 
 +
bus = dbus.SessionBus()
 +
proxy = bus.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications')
 +
interface = dbus.Interface(proxy,dbus_interface='org.freedesktop.Notifications')
 +
interface.Notify('Notification', 0, 'control_bluetooth_paired', 'Testing 123', 'Hello World', [], {}, 0)
 +
</source>
 +
 
 +
Credits: MohammadAG (on irc).
-
This function allows you to show notification either with multiline (on maemo pre-5 it will show a dialog with an "Ok" button) or single line (tiny notifications hiding automatically).
+
Additional note by Linkandzelda (on irc):
 +
The type "control_bluetooth_paired" is the name of the icon used, picked from this folder
 +
<source lang="bash">
 +
/usr/share/icons/hicolor/48x48/hildon
 +
</source>
 +
[[Category:Power users]]
[[Category:Development]]
[[Category:Development]]

Latest revision as of 15:32, 15 July 2016

Image:Ambox_notice.png
This page is about controlling your Nokia device. For historical reasons this page is called phone control even though it really covers more than just the phone functions.


Image:Ambox_notice.png
Please be aware that the recommended way to use the phone functionality is Telepathy:


Contents

[hide]

[edit] D-Bus

These D-Bus commands can be run from terminal or as shell scripts. Useful for scheduling events with alarmed or fcron, executing from Desktop Command Execution Widget or Queen BeeCon Widget, startup events, install scripts, etc. They should be run as:

run-standalone.sh SCRIPT.sh
run-standalone.sh dbus-send COMMAND

This is important to set up the environment correctly otherwise they may barf. If run as user "user" this is not needed.

Also note that most commands don't need "--print-reply" option. Those that don't need it should be tested without it and this page should be edited.

[edit] Phone

[edit] Open Phone application

dbus-send --type=method_call --dest=com.nokia.HildonDesktop.AppMgr /com/nokia/HildonDesktop/AppMgr com.nokia.HildonDesktop.AppMgr.LaunchApplication string:"rtcom-call-ui"

[edit] Make a phone call

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call com.nokia.csd.Call.CreateWith string:"$NUMBER" uint32:0

Change $NUMBER to phone number you want to call.

[edit] End current phone call

dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call com.nokia.csd.Call.Release

This will release/end/hangup/reject the current call (or possibly all calls if more then one call is active) or do nothing if no calls are active.

[edit] Answer current phone call

dbus-send --system --print-reply --dest=com.nokia.csd.Call /com/nokia/csd/call/1 com.nokia.csd.Call.Instance.Answer

This will answer/pickup the current (first) call.

If you answer the call immediately as you receive the Call Coming D-Bus message the phone seems to be in a specific call state where answering yields a com.nokia.csd.Call.Error.NotAllowed exception.

You need to answer the call after a delay of e.g. 1 s.

Another (probably better) approach is to register to the CallStatus D-Bus message (com.nokia.csd.Call, /com/nokia/csd/call/1, com.nokia.csd.Call.Instance.CallStatus) and wait for a call status >= 2 (=CSD_CALL_STATUS_COMING) after the "Coming" message.

[edit] Call "starhash code"

For example *100#.

dbus-send --system --type=method_call --dest=com.nokia.CallUI /com/nokia/CallUI com.nokia.CallUI.HandleMMICode string:"*100#"


[edit] Activate call forwarding

Forward all ('unconditional') calls to e.g. +12223456789

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:0 string:"+12223456789" uint32:

or

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:1 string:"+12223456789" uint32:

Forward calls when 'busy' to e.g. +12223456789

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:2 string:"+12223456789" uint32:

Forward unanswered calls to e.g. +12223456789 (leaving the last uint32: empty will use the last stored waiting time)

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:3 string:"+12223456789" uint32:

Forward unanswered calls, when 'no answer' after 25 sec to e.g. +12223456789 (if you want to set this value explicitly; valid values: 5, 10, 15, 20, 25, 30)

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:3 string:"+12223456789" uint32:25

Forward calls when you are 'out of reach' (no network, shut off, ...) to e.g. +12223456789

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:4 string:"+12223456789" uint32:

Forward calls when 'not available' (busy, no answer, out of reach) to e.g. +12223456789

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS /com/nokia/csd/ss com.nokia.csd.SS.DivertActivate uint32:5 string:"+12223456789" uint32:

--peterleinchen 23:00, 15 December 2011 (UTC)

many thanks to the pre-contributor (I have searched for a long time to have the possibility to switch forwarding script based)

[edit] Cancel call forwarding

dbus-send --system --type=method_call --print-reply --dest=com.nokia.csd.SS
/com/nokia/csd/ss com.nokia.csd.SS.DivertCancel uint32:x string: uint32:

Valid values for "x", pls see also above. 0 unconditional

1 unconditional

2 busy

3 no answer (after xx sec)

4 out of reach

5 not available (busy, no answer, out of reach)

--peterleinchen 23:00, 15 December 2011 (UTC)


[edit] Get IMEI

dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM/security Phone.Sim.Security.get_imei|awk -F "\"" '/g/ {print $2}'

[edit] Get IMSI

dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM Phone.Sim.get_imsi|awk -F "\"" '/g/ {print $2}'

[edit] Get ICCID

dbus-send --system --type=method_call --print-reply --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.get_iccid|awk -F "\"" '/g/ {print $2}'

[edit] Get SIM status

dbus-send --system --print-reply --dest=com.nokia.phone.SIM /com/nokia/phone/SIM Phone.Sim.get_sim_status

[edit] Get cellular signal strength

dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_signal_strength

First line is percentage, second is dBm, third unknown.

[edit] Get cellular registration status

dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_registration_status

[edit] Turn loudspeaker on

dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_on

(These loudspeaker ones don't work on my N900. If I add --print-reply I get "Error org.freedesktop.DBus.Error.ServiceUnknown: The name com.nokia.osso_hp_ls_controller was not provided by any .service files".)

[edit] Turn loudspeaker off

dbus-send --type=method_call --dest=com.nokia.osso_hp_ls_controller /com/nokia/osso_hp_ls_controller com.nokia.osso_hp_ls_controller.loudspeaker.force_loudspeaker_off

[edit] Turn loudspeaker on (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestPrivacyOverride boolean:true

[edit] Turn loudspeaker off (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestPrivacyOverride boolean:false

[edit] Turn mute on (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestMute boolean:true

[edit] Turn mute off (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestMute boolean:false

[edit] Turn bluetooth override on (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestBluetoothOverride boolean:true

[edit] Turn bluetooth override off (N900)

dbus-send --type=method_call --dest=org.maemo.Playback.Manager /org/maemo/Playback/Manager org.maemo.Playback.Manager.RequestBluetoothOverride boolean:false

[edit] Start Vibrating Incoming Call

dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_vibrator_pattern_activate string:PatternIncomingCall

PatternXXX according to definition in /etc/mce/mce.ini

[edit] Stop Vibrating Incoming Call

dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_vibrator_pattern_deactivate string:PatternIncomingCall

[edit] Vibration Single Shot

dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_start_manual_vibration int32:255 int32:1000

First int is power, second is duration in milliseconds

[edit] Profiles

[edit] Set General

dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"general"

[edit] Set Silent

dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_profile string:"silent"


[edit] Query current profile

dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_profile

[edit] List all profiles

dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_profiles|awk -F "\"" '/g/ {print $2}'

[edit] Get all profile Values

You can modify any profile value, eg. clock alarm enabled, im alert volume, keypad sound level, touchscreen sound level, ... To find out which keys exist, to what value they are set and what values can be given you can use the following command. (For the profile "silent" just put "silent" at the end instead of "general".)

dbus-send --type=method_call --print-reply --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.get_values string:"general"

The returned value is an array of struct. Each struct has 3 strings: key, value, type. Type can be eg. "INTEGER 0-2" saying that the values 0, 1 and 2 are correct values for this key.

[edit] Set a profile value

To modify the above mentioned profile values you need this method. The method takes three parameters, all strings: profile, key and value. Profile can be "general" or "silent", key is one of the keys from the above (get all profile values), value can be set to anything allowed by "type" from the above method.

To enable vibrating alert for the profile "general" your script would look like this:

dbus-send --type=method_call --dest=com.nokia.profiled /com/nokia/profiled com.nokia.profiled.set_value string:"general" string:"vibrating.alert.enabled" string:"On"

[edit] LED

[edit] Activate LEDs

dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_activate string:"PatternCommunicationIM"

[edit] Deactivate LEDs

dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.req_led_pattern_deactivate string:"PatternCommunicationIM"

[edit] Set brightness of backlight LEDs

dbus-send --print-reply --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer_backlight org.freedesktop.Hal.Device.LaptopPanel.SetBrightness int32:$brightness

(where $brightness is 0...255)

[edit] Messaging

[edit] New e-mail

dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.MailTo string:"mailto:"

[edit] Send and receive e-mail

It works, but it takes up to 2 minutes for modest to start refreshing and after that it depends on the speed of the connection how fast it is going to be completed, usually up to 5 seconds, 2G can be a bit slower.

dbus-send --type=method_call --dest=com.nokia.modest /com/nokia/modest com.nokia.modest.SendReceive

[edit] Set presence

dbus-send --type=method_call --print-reply --dest=org.freedesktop.Telepathy.MissionControl /org/freedesktop/Telepathy/MissionControl org.freedesktop.Telepathy.MissionControl.SetPresence uint32:2 string:"I'm here"

Note: This method does not work in Maemo 5. Workaround: http://talk.maemo.org/showthread.php?t=55686

[edit] Change peak_schedule settings

Check:

run-standalone.sh gconftool-2 -R /apps/activesync

Set (check if yours is named ActiveSyncAccount1):

run-standalone.sh gconftool-2 --set /apps/activesync/ActiveSyncAccount1/schedule/peak_schedule --type=int 15

Where the last number is one of the following (as standard in GUI):

  • 0 = Always on
  • -1 = Manual
  • 15 = Every 15 minutes
  • 30 = Every 30 minutes
  • 60 = Every hour
  • 240 = Every 4 hours
  • 720 = Every 12 hours

[edit] Media player

[edit] Open file in media player

dbus-send --print-reply --dest=com.nokia.mediaplayer /com/nokia/mediaplayer com.nokia.mediaplayer.mime_open string:"file:///$1"

[edit] Pause what's currently playing

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.pause

[edit] Stop what's currently playing

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.stop

[edit] Play what's currently selected

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.play

[edit] Unpause what's currently selected

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.resume

[edit] Play next mediafile

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.next

[edit] Play previous mediafile

dbus-send --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.renderer.previous

[edit] Notifications

[edit] Send notification (orange one line popup)

dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"NOTIFICATION"

[edit] Send notification (orange multiple line popup)

dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteInfoprint string:"NOTE line 1
line 2
. . .
line n"

--peterleinchen 00:22, 4 January 2012 (UTC)

[edit] Send dialog notification (orange multi line popup, requiring user interaction)

dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32:0 string:"OK"

Not sure what string "OK" does, but it is needed and can be anything.

It does nothing here and is not explicitly needed, pls. see below command and also section.

dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32: string:

[edit] Send dialog notification (black/white with floating bar and confirmation button, requiring user action)

dbus-send --type=method_call --dest=org.freedesktop.Notifications /org/freedesktop/Notifications org.freedesktop.Notifications.SystemNoteDialog string:"QUESTION?" uint32:4 string:"OK"

String "OK" is the text for the button. --peterleinchen 21:29, 3 January 2012 (UTC)

[edit] Send email/SMS style notification

see http://wiki.maemo.org/Phone_control#Make_an_.22Email_Style.22_notification_dialog

[edit] Securing

[edit] Security Device Lock (with lockcode)

dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_open string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'3'

The next method is a 2nd - surprisingly shorter - way to enter device lock mode. Its benefit is that it even disables the device power button menu:

dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.devlock_callback int32:0

[edit] Unlock (pop up lockcode requester?)

dbus-send --system --type=method_call --dest=com.nokia.system_ui /com/nokia/system_ui/request com.nokia.system_ui.request.devlock_close string:"com.nokia.mce" string:"/com/nokia/mce/request" string:"com.nokia.mce.request" string:"devlock_callback" uint32:'0'

Next method is a 2nd, more direct way to stop device lock mode.

dbus-send --system --type=method_call --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.devlock_callback int32:2

[edit] Query Devlock State

 dbus-send --system --type=method_call --dest="com.nokia.mce" --print-reply "/com/nokia/mce/request" com.nokia.mce.request.get_devicelock_mode |awk -F "\"" '/g/ {print $2}'


[edit] Lock screen and keys (slider lockswitch)

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

[edit] Unlock screen and keys

This command will unlock and illuminate the screen (useful when accessing the phone externally through PuTTY)

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

[edit] Query lock state of screen and keys

Will return locked or unlocked depending on lock state

dbus-send --system --type=method_call --dest="com.nokia.mce" --print-reply "/com/nokia/mce/request" com.nokia.mce.request.get_tklock_mode|awk -F "\"" '/g/ {print $2}'

[edit] Networking

[edit] Enable ICD log

There are two methods to enable ICD logs

1. Print to the syslog:

  (1)Use the following cmd 
  (2)$ syslogd
  (3)$ icd2 –l0
  (4)The log will print to the /var/log/syslog

2. Print to the standard output

  (1)Get the source code of icd2
  (2)Add the begging of source code of “support/osso-log.h” "#define OSSOLOG_STDOUT"
  (3)$ icd2 –l0
  (4)The log will print to the standard output

[edit] Connect to specific saved connection

dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"IAP_ID" uint32:0

IAP_ID is internet access point identifier and can be obtained with the following command:

gconftool -R /system/osso/connectivity/IAP

Find lines which matches /system/osso/connectivity/IAP/<IAP_ID>

For GPRS connections replace "@32@" with a space in IAP_ID string.

Keep in mind that phone has to be disconnected in order to connect via this call. If not, an error message will occur if you add --print-reply to the dbus-send command.

[edit] Connect to any saved connection

dbus-send --system --type=method_call --dest=com.nokia.icd /com/nokia/icd com.nokia.icd.connect string:"[ANY]" uint32:0

[edit] Disconnect internet

[edit] ICD2
dbus-send --print-reply --system --dest=com.nokia.icd2 /com/nokia/icd2 com.nokia.icd2.disconnect_req uint32:0x8000
[edit] ICD
dbus-send --system --dest=com.nokia.icd /com/nokia/icd_ui com.nokia.icd_ui.disconnect boolean:true

On PR1.2 : Error org.freedesktop.DBus.Error.UnknownMethod: Method "disconnect" with signature "b" on interface "com.nokia.icd_ui" doesn't exist

[edit] Connect (show change connection UI)

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

If "boolean:true" at the end, one-line notification saying "No saved connections available" appears. Maybe affects more than that? Most likely, boolean:true leads to using saved connections if there are any, and boolean:false forces to display the connection dialog.

[edit] Enable cellular radio

dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:true

[edit] Disable cellular radio

dbus-send --system --type=method_call --dest=com.nokia.phone.SSC /com/nokia/phone/SSC com.nokia.phone.SSC.set_radio boolean:false

[edit] Change device mode

String possibility "offline","flight","normal"

dbus-send --system --dest=com.nokia.mce --type=method_call /com/nokia/mce/request com.nokia.mce.request.req_device_mode_change string:offline

[edit] Query device mode

dbus-send --system --dest=com.nokia.mce --type=method_call --print-reply /com/nokia/mce/request com.nokia.mce.request.get_device_mode | awk -F "\"" '/g/ {print $2}'

[edit] Radio mode

[edit] Current Mode

dbus-send --system --print-reply --dest=com.nokia.phone.net /com/nokia/phone/net Phone.Net.get_radio_access_technology

[edit] 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

[edit] 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

[edit] 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

[edit] Bluetooth

[edit] Identify adapter path

You need to know adapter path in order to send D-Bus call to the right place. You can get it with entering this command into the terminal:

dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.ListAdapters | awk -F'"' '/at/ {print $2}'

or

dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}'

[edit] Identify Properties

dbus-send --system --print-reply --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.GetProperties

[edit] Enable

Using the adapter path value returned with first command, for example /org/bluez/906/hci0.

dbus-send --system --type=method_call --dest=org.bluez /org/bluez/906/hci0 org.bluez.Adapter.SetProperty string:Powered variant:boolean:true

This one automatically inserts adapter path:

dbus-send --system --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.SetProperty string:Powered variant:boolean:true

[edit] Disable

dbus-send --system --type=method_call --dest=org.bluez /org/bluez/906/hci0 org.bluez.Adapter.SetProperty string:Powered variant:boolean:false

With auto-discovery of adapter path:

dbus-send --system --type=method_call --dest=org.bluez $(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}') org.bluez.Adapter.SetProperty string:Powered variant:boolean:false

[edit] Connect to specific device

devmac=00:11:22:33:44:55
service=AudioSink

adapter=$(dbus-send --system --print-reply --dest=org.bluez / org.bluez.Manager.DefaultAdapter | awk -F'"' '/at/ {print $2}')
device=$(dbus-send --system --print-reply --dest=org.bluez ${adapter} org.bluez.Adapter.FindDevice string:${devmac} | awk -F'"' '/at/ {print $2}')
dbus-send --system --type=method_call --print-reply --dest=org.bluez ${device} org.bluez.${service}.Connect

Change the AudioSink to any service and the devmac to the MAC of bluetooth device.

[edit] Check for updates

dbus-send --type=method_call --dest=com.nokia.hildon_application_manager /com/nokia/hildon_application_manager com.nokia.hildon_application_manager.check_for_updates

[edit] Open link in browser

dbus-send --system --type=method_call --dest=com.nokia.osso_browser /com/nokia/osso_browser/request com.nokia.osso_browser.load_url string:"google.com"

[edit] Open a pdf file with the default pdf reader application

dbus-send --print-reply --dest=com.nokia.osso_pdfviewer /com/nokia/osso_pdfviewer com.nokia.osso_pdfviewer.mime_open string:/home/user/MyDocs/.documents/file_name.pdf

[edit] Open a file with the default notes application

dbus-send --print-reply --dest=com.nokia.osso_notes /com/nokia/osso_notes com.nokia.osso_notes.mime_open string:/home/user/MyDocs/.documents/file_name

[edit] Open the default notes application

dbus-send --print-reply --dest=com.nokia.osso_notes /com/nokia/osso_notes com.nokia.osso_notes.top_application

[edit] Open folder

dbus-send --print-reply --dest=com.nokia.osso_filemanager /com/nokia/osso_filemanager com.nokia.osso_filemanager.open_folder string:/home/user/MyDocs/

[edit] Set volume

dbus-send --type=method_call --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.extension.set_extension_property string:volume variant:uint32:50

The value can be between 0 and 100.

[edit] Get volume

dbus-send --print-reply --type=method_call --dest=com.nokia.mafw.renderer.Mafw-Gst-Renderer-Plugin.gstrenderer /com/nokia/mafw/renderer/gstrenderer com.nokia.mafw.extension.get_extension_property string:volume|awk '/nt/ {print $3}'

[edit] Reboot

dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_reboot

This is same as rebooting from power key menu (needs uncommenting in certain XML file to appear) and has been identified as insecure way to reboot the device (no filesystem synchronization, etc.). Better command is to simply enter "reboot" in root terminal.

Yet another method: dsmetool -b

[edit] Shutdown

dbus-send --system --type=method_call --print-reply --dest=com.nokia.mce "/com/nokia/mce/request" com.nokia.mce.request.req_shutdown

See warning at reboot D-Bus call (needs testing).

[edit] Show dashboard

dbus-send /com/nokia/hildon_desktop com.nokia.hildon_desktop.exit_app_view

[edit] Other

[edit] D-Bus Scripts

You can also use dbus-scripts to execute any command when various actions are triggered on D-Bus.

[edit] Panucci (pause)

dbus-send --type=method_call --dest=org.panucci.panucciInterface /panucciInterface org.panucci.panucciInterface.playPause

[edit] Device Orientation

dbus-send --system --print-reply --dest=com.nokia.mce /com/nokia/mce/request com.nokia.mce.request.get_device_orientation

[edit] GConf

[edit] Reset GPRS data counter

The commands are PR1.2 compliant and do not work on previous versions.

gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_home_rx_bytes
gconftool-2 -u /system/osso/connectivity/network_type/GPRS/gprs_home_tx_bytes
gconftool-2 -s /system/osso/connectivity/network_type/GPRS/gprs_home_reset_time --type=string $(date +%s)

[edit] Command line

[edit] Enable FM Transmitter

/usr/bin/fmtx_client -p 1

[edit] Disable FM Transmitter

/usr/bin/fmtx_client -p 0

[edit] GStreamer

[edit] Take a picture with front camera

gst-launch v4l2src device=/dev/video1 num-buffers=1 ! ffmpegcolorspace ! jpegenc ! filesink location=frontcam.jpg

[edit] Shoot photo after 10 seconds

The camera application must be off for it to work. And of course the camera shutter must be open...gst-launch comes with gstreamer-tools (or gst-launch-0.10 and gstreamer0.10-tools)

/bin/sleep 10 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video0 num-buffers=1 \! video/x-raw-yuv,width=2592,height=1968  \! ffmpegcolorspace \! jpegenc \! filesink location=/home/user/MyDocs/DCIM/photo.jpg

To shoot from the front camera, change /dev/video0 to /dev/video1 and the proper resolution:

/bin/sleep 10 ; /usr/bin/gst-launch v4l2camsrc device=/dev/video1 num-buffers=1 \! video/x-raw-yuv,width=640,height=480  \! ffmpegcolorspace \! jpegenc \! filesink location=/home/user/MyDocs/DCIM/photo.jpg

Other way:

/bin/sleep 10; /usr/bin/gst-launch v4l2camsrc ! ffmpegcolorspace ! jpegenc ! identity error-after=1 ! filesink location=/home/user/MyDocs/DCIM/photo.jpg

[edit] Python

[edit] Make a phone call via the cellular network

import dbus
def place_call(number):
  bus = dbus.SystemBus()
  csd_call = dbus.Interface(bus.get_object('com.nokia.csd',
                                           '/com/nokia/csd/call'),
                                           'com.nokia.csd.Call')
  csd_call.CreateWith(str(number), dbus.UInt32(0))

[edit] Make a phone call via SIP

#!/usr/bin/python
 
import dbus
import sys
 
# Get the target phone number (or SIP address) from the command line
TARGET = sys.argv[1];
 
# Configure the telepathy path to the SofiaSIP account that we wish to use.
# Use "mc-tool list" (from the libmissioncontrol-utils package) to see your accounts.
SIP_ACCOUNT = 'sofiasip/sip/_31234567_40sipgate_2eco_2euk0'
 
# This gets us a connnection to the session bus
bus = dbus.SessionBus()
 
# This sets up a path to the SIP account within telepathy.
PATH = '/org/freedesktop/Telepathy/Account/'
PATH += SIP_ACCOUNT
 
# This sets up a proxy object as a "handle" to the AccountManager of our target account
account = bus.get_object('org.freedesktop.Telepathy.AccountManager', PATH)
 
# This launches the actual SIP call with a method call to EnsureChannel on that object
account.EnsureChannel( \
        dbus.Dictionary({
                dbus.String(u'org.freedesktop.Telepathy.Channel.TargetHandleType'): dbus.UInt32(1),
                dbus.String(u'org.freedesktop.Telepathy.Channel.ChannelType'): dbus.String(u'org.freedesktop.Telepathy.Channel.Type.StreamedMedia'),
                dbus.String(u'org.freedesktop.Telepathy.Channel.TargetID'): dbus.String(TARGET),
        }, signature='sv'),
        dbus.UInt64(0),
        dbus.String(''),
        dbus_interface='com.nokia.Account.Interface.ChannelRequests')
 
sys.exit(0)

[edit] Send SMS

ssms.py using new QtMobility bindings by ossipena:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
#ssms Ossipena/TimoP
#send smses from command line
#licence : Do whatever you want
#deps:
#pyside-qt4
#pyside-mobility
 
'''imports'''
from QtMobility.Messaging import *
from PySide.QtCore import *
import sys
from PyQt4 import QtCore
 
 
app = QCoreApplication(sys.argv)
 
'''get number and name'''
stringit = sys.argv
numpertemp = str(stringit[1:2])
mesits = str(stringit[2:])[2:-2]
 
num = str(numpertemp[2:-2])
 
if (mesits == ""):
  print "Usage:"
  print "python ssms.py 01234567 'message text here'"
  sys.exit(69)
else:
  print "number is " + str(num)
  print "message is " + str(mesits)
 
'''define message to be sent'''
numperi = QtCore.QString(num)
 
numper = QMessageAddress(QMessageAddress.Phone, numperi)
mesitsi = QMessage()
mesitsi.setType(QMessage.Sms)
mesitsi.setTo(numper)
mesitsi.setBody(mesits)
 
'''send message'''
sender = QMessageService()
if (sender.send(mesitsi)):
  print "success"
else:
  print "fail"

From: http://talk.maemo.org/showpost.php?p=548948&postcount=52

#!/usr/bin/env python2.5
 
import pexpect
import time
from subprocess import *
 
child = pexpect.spawn('pnatd');
child.send('at\r');
time.sleep(0.25);
child.send('at+cmgf=1\r');
time.sleep(0.25);
child.send('at+cmgs="+XXXXXXX"\r');
child.send('SMSTEXTSMSTEXTSMSTEXT');
child.send(chr(26));
child.send(chr(26));
child.sendeof();

There's also a python script that uses D-Bus instead from http://talk.maemo.org/showpost.php?p=558430&postcount=57:

#!/usr/bin/env python2.5          
import sched, time                
import dbus                       
import gobject                    
from dbus.mainloop.glib import DBusGMainLoop
 
def octify(str):
        '''     
        Returns a list of octet bytes representing
        each char of the input str.               
        '''                                       
 
        bytes = map(ord, str)
        bitsconsumed = 0     
        referencebit = 7     
        octets = []          
 
        while len(bytes):
                byte = bytes.pop(0)
                byte = byte >> bitsconsumed
 
                try:                       
                        nextbyte = bytes[0]
                        bitstocopy = (nextbyte & (0xff >> referencebit)) << referencebit
                        octet = (byte | bitstocopy)                                     
 
                except:
                        octet = (byte | 0x00)
 
                if bitsconsumed != 7:
                        octets.append(byte | bitstocopy)
                        bitsconsumed += 1               
                        referencebit -= 1               
                else:                                   
                        bitsconsumed = 0                
                        referencebit = 7                
 
        return octets
 
def semi_octify(str):
        '''          
        Expects a string containing two digits.
        Returns an octet -                     
        first nibble in the octect is the first
        digit and the second nibble represents 
        the second digit.                      
        '''                                    
        try:                                   
                digit_1 = int(str[0])          
                digit_2 = int(str[1])          
                octet = (digit_2 << 4) | digit_1
        except:                                 
                octet = (1 << 4) | digit_1      
 
        return octet
 
 
def deoctify(arr):
 
        referencebit = 1
        doctect = []    
        bnext = 0x00    
 
        for i in arr:
 
                bcurr = ((i & (0xff >> referencebit)) << referencebit) >> 1
                bcurr = bcurr | bnext                                      
 
                if referencebit != 7:
                        doctect.append( bcurr )
                        bnext = (i & (0xff << (8 - referencebit)) ) >> 8 - referencebit
                        referencebit += 1                                              
                else:                                                                  
                        doctect.append( bcurr )                                        
                        bnext = (i & (0xff << (8 - referencebit)) ) >> 8 - referencebit
                        doctect.append( bnext )                                        
                        bnext = 0x00                                                   
                        referencebit = 1                                               
 
        return ''.join([chr(i) for i in doctect])
 
 
def createPDUmessage(number, msg):
        '''                       
        Returns a list of bytes to represent a valid PDU message
        '''                                                     
        numlength = len(number)                                 
        if (numlength % 2) == 0:                                
                rangelength = numlength                         
        else:                                                   
                number = number + 'F'                           
                rangelength = len(number)                       
 
        octifiednumber = [ semi_octify(number[i:i+2]) for i in range(0,rangelength,2) ]
        octifiedmsg = octify(msg)                                                      
        HEADER = 1                                                                     
        FIRSTOCTETOFSMSDELIVERMSG = 10                                                 
        ADDR_TYPE = 129 #unknown format                                                
        number_length = len(number)                                                    
        msg_length = len(msg)                                                          
        pdu_message = [HEADER, FIRSTOCTETOFSMSDELIVERMSG, number_length, ADDR_TYPE]    
        pdu_message.extend(octifiednumber)                                             
        pdu_message.append(0)                                                          
        pdu_message.append(0)                                                          
        pdu_message.append(msg_length)                                                 
        pdu_message.extend(octifiedmsg)                                                
        return pdu_message                                                             
 
 
def sendmessage(number, message):
 
        bus = dbus.SystemBus()
        smsobject = bus.get_object('com.nokia.phone.SMS', '/com/nokia/phone/SMS/ba212ae1')
        smsiface = dbus.Interface(smsobject, 'com.nokia.csd.SMS.Outgoing')
        arr = dbus.Array(createPDUmessage(number.replace('+', '00'), message))
 
        msg = dbus.Array([arr])
        smsiface.Send(msg,'')
 
 
def callback(pdumsg, msgcenter, somestring, sendernumber):
 
        msglength = int(pdumsg[18])
        msgarray = pdumsg[19:len(pdumsg)]
 
        msg = deoctify(msgarray)
 
        if msg > 0:
               print 'New message received from %s' % sendernumber
               print 'Message length %d' % msglength
               print 'Message: %s' % msg
 
               if msg == "ping":
                       print "Sending reply: pong"
                       sendmessage(sendernumber.replace("+","00"), "pong")
               else:
                       print "Unknown command"
 
 
def listen():
        DBusGMainLoop(set_as_default=True)
        bus = dbus.SystemBus() #should connect to system bus instead of session because the former is where the incoming signals come from
        bus.add_signal_receiver(callback, path='/com/nokia/phone/SMS', dbus_interface='Phone.SMS', signal_name='IncomingSegment')
        gobject.MainLoop().run()
 
 
if __name__ == '__main__':
  import time
 
  def schedule_task(schedule, fn, *args):
      import sched
      s = sched.scheduler(time.time, time.sleep)
      startTime = time.mktime(time.strptime(schedule, '%b %d %H:%M %Y'))
      s.enterabs(startTime, 0, fn, args)
      s.run()
 
  import getopt, sys
  try:  
    opts, args = getopt.getopt(sys.argv[1:],"hlt:", ["help","listen","time="])
 
  except getopt.GetoptError, err:
    # print help information and exit:
    print str(err) # will print something like "option -a not recognized"
    usage()
    sys.exit(2)  
  listening = False 
  timeofday = ''
  for opt, arg in opts:
    if opt in ("-h", "--help"):
      usage()                     
      sys.exit()                  
    elif opt in ("-l", "--listen"):
      listening = True                 
    elif opt in ("-t", "--time"):
      timeofday = arg                           
    else:
      assert False, "unhandled option"
 
  number = args[0]           
  msg = args[1]
  if msg != '':
    if timeofday == '':
        sendmessage(number, msg)
    else:
        today = time.strftime('%b %d x %Y', time.localtime())
        schedule = today.replace('x', timeofday)
        schedule_task(schedule, sendmessage, number, msg)
  if listening:
    listen()

[edit] Send dialog notification (orange multi line popup requiring user interaction)

import dbus
def show_notification_dialog(message, mode="single"):
  bus = dbus.SystemBus()
  iface = dbus.Interface(bus.get_object('org.freedesktop.Notifications',
                                        '/org/freedesktop/Notifications'),
                                        'org.freedesktop.Notifications')
  if mode == "single":
      iface.SystemNoteInfoprint(message)
  elif mode == "multiline":
      iface.SystemNoteDialog(str(message), dbus.UInt32(0), 'Ok')

This function allows you to show notification either with multiline (on Maemo pre-5 it will show a dialog with an "Ok" button) or single line (tiny notifications hiding automatically).

[edit] Take a screenshot

import gtk.gdk
 
w = gtk.gdk.get_default_root_window()
sz = w.get_size()
print "The size of the window is %d x %d" % sz
pb = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB,False,8,sz[0],sz[1])
pb = pb.get_from_drawable(w,w.get_colormap(),0,0,0,0,sz[0],sz[1])
if (pb != None):
  pb.save("screenshot.png","png")
  print "Screenshot saved to screenshot.png."
else:
  print "Unable to get the screenshot."

Credits: took code from here.


There is also a way using PyQt:

import sys
import time
from PyQt4.QtGui import QPixmap, QApplication
app = QApplication(sys.argv)
file = "/home/user/MyDocs/.images/Screenshots/Screenshot-"+time.strftime("%Y%m%d")+"-"+time.strftime("%H%M%S")+".png"
QPixmap.grabWindow(QApplication.desktop().winId()).save(file, 'png')

[edit] Make an "Email Style" notification dialog

import dbus
 
bus = dbus.SessionBus()
proxy = bus.get_object('org.freedesktop.Notifications', '/org/freedesktop/Notifications')
interface = dbus.Interface(proxy,dbus_interface='org.freedesktop.Notifications')
interface.Notify('Notification', 0, 'control_bluetooth_paired', 'Testing 123', 'Hello World', [], {}, 0)

Credits: MohammadAG (on irc).

Additional note by Linkandzelda (on irc): The type "control_bluetooth_paired" is the name of the icon used, picked from this folder

/usr/share/icons/hicolor/48x48/hildon