D-Bus service for Apertium

From Apertium
Revision as of 10:33, 15 December 2007 by Francis Tyers (talk | contribs)
Jump to navigation Jump to search

D-Bus is a simple inter-process communication system. We are in the process of developing D-Bus services for Apertium which will make programmatic access to the Apertium tools easier.

We have started developing simple D-Bus bindings for Apertium which allow for:

  • discovery of details of the current Apertium installation and,
  • translations via a programmatic interface.

The D-Bus bindings are needed for some of the debugging tools, such as Apertium-view.

Installing the D-Bus bindings for Apertium

You will need:

  • D-Bus for Python - almost every modern UNIX will have a package for this. You can install this in Debian/Ubuntu Linux by issuing:
sudo apt-get install python-dbus.
  • apertium-py, which is a collection of Python routines that might be useful to people writing tools for Apertium. You can check it out using SVN:
svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-py.
Installation is a breeze thanks to Python's distutils. In checkout directory (probably apertium-py) there should be a file called setup.py. Simply execute:
python setup.py install.
If you are using your system's stock Python interpreter, you'll probably have to execute that as root (sudo python setup.py install).
  • apertium-dbus, which contains the actual D-Bus bindings. This is quite rough around the edges at the moment. To get the code, check out the code from SVN using:
svn co http://apertium.svn.sourceforge.net/svnroot/apertium/apertium-tools/apertium-dbus.
After checkout, you need to execute the install_services.sh script in the checked out directory. This script installs the D-Bus activation files which tell D-Bus how to start up the Apertium D-Bus services if a user wants to use them. The command line format is (NB: This script assumes that your D-Bus activation directory is at /usr/share/dbus-1/services. If you don't know what I'm talking about, then you are probably safe, since this is the default for D-Bus.):
./install_services.sh <path to info.py and mode.py> <path to apertium>
The first parameter is the path to the files info.py and mode.py which are in the same directory as install_services.sh after checkout. Feel free to move them. The second parameter is the prefix to your Apertium installation. If your Apertium binaries are under /usr/local/bin (you can check this by running which apertium on the command line), then the prefix is /usr/local. On my machine, I invoked the script as follows:
./install_services.sh /home/wynand/apertium-git/apertium-tools/apertium-dbus /usr/local
since I keep info.py and mode.py in my development tree. You can also see that my Apertium installation is in /usr/local

If you have gotten to this point, you can check that the bindings work by issuing the command:

dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes

This should return an array of strings of all the Apertium modes installed on your system. It should look something like

user@somewhere:~/home/user$ dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes 
method return sender=:1.567 -> dest=:1.599 reply_serial=2
   array [
      string "en-ca"
      string "ca-en"
      string "en-af"
      string "af-en"

If D-Bus complains, then you should first check whether the activation files installed correctly. Go to /usr/share/dbus-1/services and look for org.apertium.info.service and org.apertium.mode.service. If these files are missing, then ./install_services.sh wasn't successful; make sure that you have the rights to copy the files to /usr/share/dbus-1/services. If they are there, it might be the case that you mis-specified the path to info.py and mode.py and/or the prefix to your Apertium installation. You can verify if by opening the files. The format is very simple. On my machine, the contents of org.apertium.info.service are:

[D-BUS Service]
Exec=/home/wynand/apertium-git/apertium-tools/apertium-dbus/info.py -p /usr/local/

As you will recall, I keep the service executables under /home/wynand/apertium-git/apertium-tools/apertium-dbus/. The flag -p tells info.py that the prefix to my Apertium installation is /usr/local.

If you still have no luck, then it's quite possible that a Python error from our side snuck in. Try running info.py directly; that is

python info.py -p /usr/local

where the prefix for Apertium in the above example is /usr/local. If you get a Python error, please post the error on this page or post a bug report in our bug tracker. If the service starts up without errors, try executing

dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes

again. If there is no output, then open a new terminal and run


This neat utility shows you the activity on the D-Bus. Now try executing dbus-send --print-reply --dest=org.apertium.info / org.apertium.Info.modes again.

If you have no luck, come and talk to us in #apertium at irc.freenode.net.

Installing into a prefix

  • Installing apertium-py into a prefix
  • Installing dbus into a prefix.
    • ./install_services.sh <path to info.py and mode.py> <path to apertium>
$ ./install_services.sh ./ /home/spectre/local
./install_services.sh: line 15: /usr/share/dbus-1/services/org.apertium.info.service: Permission denied
./install_services.sh: line 15: /usr/share/dbus-1/services/org.apertium.mode.service: Permission denied
  • Do: mkdir -p <prefix>/share/dbus-1/services/
  • Copy the .service files into <prefix>/share/dbus-1/services/
  • Make a session-local.conf file like it says here under "" Configuration Information"".
    • Change the <servicedir> element value to <prefix>/share/dbus-1/services/

Apertium D-Bus interfaces

Currently, Apertium offers two D-Bus services:

  • org.apertium.info has a single object /, which offers rudimentary information about the Apertium installation.
  • org.apertium.translate contains an object for each Apertium mode installed in the system.