Marble/MarbleDBus: Difference between revisions
Neverendingo (talk | contribs) m (Text replace - "<code>" to "<syntaxhighlight lang="text">") |
m (Ochurlaud moved page Projects/Marble/MarbleDBus to Marble/MarbleDBus) |
||
(One intermediate revision by one other user not shown) | |||
Line 7: | Line 7: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
marble_pid="$(pidof marble)" | marble_pid="$(pidof marble)" | ||
</ | </syntaxhighlight> | ||
Line 14: | Line 14: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
qdbus org.kde.marble-$marble_pid /MarbleWidget | qdbus org.kde.marble-$marble_pid /MarbleWidget | ||
</ | </syntaxhighlight> | ||
Line 22: | Line 22: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
qdbus org.kde.marble-$marble_pid /MarbleWidget org.kde.MarbleWidget.zoomIn | qdbus org.kde.marble-$marble_pid /MarbleWidget org.kde.MarbleWidget.zoomIn | ||
</ | </syntaxhighlight> | ||
Line 36: | Line 36: | ||
marble_pid="$(pidof marble)" | marble_pid="$(pidof marble)" | ||
alias MCALL='qdbus org.kde.marble-${marble_pid} /MarbleWidget' | alias MCALL='qdbus org.kde.marble-${marble_pid} /MarbleWidget' | ||
</ | </syntaxhighlight> | ||
Changing map themes can be done via | Changing map themes can be done via | ||
Line 42: | Line 42: | ||
MCALL org.kde.MarbleWidget.setMapThemeId "earth/srtm/srtm.dgml" | MCALL org.kde.MarbleWidget.setMapThemeId "earth/srtm/srtm.dgml" | ||
MCALL org.kde.MarbleWidget.setMapThemeId "earth/openstreetmap/openstreetmap.dgml" | MCALL org.kde.MarbleWidget.setMapThemeId "earth/openstreetmap/openstreetmap.dgml" | ||
</ | </syntaxhighlight> | ||
Move to a place, specified by longitude and latitude | Move to a place, specified by longitude and latitude | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
MCALL org.kde.MarbleWidget.centerOn 8.8 53.2 | MCALL org.kde.MarbleWidget.centerOn 8.8 53.2 | ||
</ | </syntaxhighlight> | ||
Set the zoom | Set the zoom | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
MCALL org.kde.MarbleWidget.zoomView 2000 | MCALL org.kde.MarbleWidget.zoomView 2000 | ||
</ | </syntaxhighlight> | ||
Note that the range of values passed to zoomView | Note that the range of values passed to zoomView | ||
Line 64: | Line 64: | ||
MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget longitude | MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget longitude | ||
MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget zoom | MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget zoom | ||
</ | </syntaxhighlight> | ||
to get the current latitude, longitude or zoom. | to get the current latitude, longitude or zoom. | ||
Line 76: | Line 76: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
MCALL org.kde.MarbleWidget.openGpxFile /tmp/test.gpx | MCALL org.kde.MarbleWidget.openGpxFile /tmp/test.gpx | ||
</ | </syntaxhighlight> | ||
but gives: "Invalid number of parameters". | but gives: "Invalid number of parameters". | ||
This might be a bug on the qdbus side. | This might be a bug on the qdbus side. | ||
Line 88: | Line 88: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
org.freedesktop.DBus.Error.UnknownObject (No such object path '/MarbleWidget') | org.freedesktop.DBus.Error.UnknownObject (No such object path '/MarbleWidget') | ||
</ | </syntaxhighlight> | ||
<b>Solution:</b> The D-BUS interface is only available in Marble trunk (and eventually in Marble >= 0.8). Additionally you need to make sure that the "BUILD_WITH_DBUS" cmake flag is set to "ON" once you are building Marble from the source code: | <b>Solution:</b> The D-BUS interface is only available in Marble trunk (and eventually in Marble >= 0.8). Additionally you need to make sure that the "BUILD_WITH_DBUS" cmake flag is set to "ON" once you are building Marble from the source code: | ||
Line 94: | Line 94: | ||
<syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
cmake -DBUILD_WITH_DBUS=ON ../marble | cmake -DBUILD_WITH_DBUS=ON ../marble | ||
</ | </syntaxhighlight> |
Latest revision as of 21:01, 10 March 2016
Scripting Marble from the shell using D-BUS
MarbleWidget and MarbleMap provide their full amount of methods as a D-BUS Interface. Therefore you can easily create a shell-script to control Marble using the qdbus command line tool.
Before you start you need to find out the PID of the Marble process: In your script you can do it like this.
marble_pid="$(pidof marble)"
Then you can pass this PID to the actual qdbus call
qdbus org.kde.marble-$marble_pid /MarbleWidget
This call returns a list of all the methods that MarbleWidget supports.
From this list you can choose the one that you'd like to call, e.g.
qdbus org.kde.marble-$marble_pid /MarbleWidget org.kde.MarbleWidget.zoomIn
to zoom into the map. Note that for function calls you shouldn't pass the brackets "()".
As a convenient tool you can use qdbusviewer to get a graphical list of the interfaces and methods that get provided through D-BUS.
Further examples
To shorten the following dbus calls, we use
marble_pid="$(pidof marble)"
alias MCALL='qdbus org.kde.marble-${marble_pid} /MarbleWidget'
Changing map themes can be done via
MCALL org.kde.MarbleWidget.setMapThemeId "earth/srtm/srtm.dgml"
MCALL org.kde.MarbleWidget.setMapThemeId "earth/openstreetmap/openstreetmap.dgml"
Move to a place, specified by longitude and latitude
MCALL org.kde.MarbleWidget.centerOn 8.8 53.2
Set the zoom
MCALL org.kde.MarbleWidget.zoomView 2000
Note that the range of values passed to zoomView is defined in the .dgml files, eg for marble/data/maps/earth/openstreetmap/openstreetmap.dgml the range is from 900 to 4000, while for bluemarble it is from 900 to 2400.
It is also possible to retrieve parameters from marble, e.g.
MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget latitude
MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget longitude
MCALL org.freedesktop.DBus.Properties.Get org.kde.MarbleWidget zoom
to get the current latitude, longitude or zoom.
Note that one has to go through org.freedesktop.DBus.Properties.Get as latitude is not a method, but a property.
Things which (currently) don't work
Opening a gpx file should work via
MCALL org.kde.MarbleWidget.openGpxFile /tmp/test.gpx
but gives: "Invalid number of parameters". This might be a bug on the qdbus side.
Trouble shooting
No MarbleWidget or MarbleMap
Problem: Neither the MarbleMap nor the MarbleWidget interfaces are available in my installation, and qdbus complains:
org.freedesktop.DBus.Error.UnknownObject (No such object path '/MarbleWidget')
Solution: The D-BUS interface is only available in Marble trunk (and eventually in Marble >= 0.8). Additionally you need to make sure that the "BUILD_WITH_DBUS" cmake flag is set to "ON" once you are building Marble from the source code:
cmake -DBUILD_WITH_DBUS=ON ../marble