D-Bus service for Apertium
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:
- Installation is a breeze thanks to Python's distutils. In checkout directory (probably
apertium-py
) there should be a file calledsetup.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:
- 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
andmode.py
which are in the same directory asinstall_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 runningwhich 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
andmode.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] Name=org.apertium.info 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
dbus-monitor
.
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/lib/apertium
- Then copy mode.py and info.py into there
- Do: mkdir -p <prefix>/share/dbus-1/services/
- Copy the
.service
files into <prefix>/share/dbus-1/services/ - Edit the files and change the @servdir@ to where you put the info.py and mode.py and change the prefix to your prefix
- Make a session-local.conf file like it says here under "" Configuration Information"".
- Change the <servicedir> element value to <prefix>/share/dbus-1/services/
- Restart dbus. /etc/init.d/dbus restart
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.