Petter Reinholdtsen: Latest Jami back in Debian Testing, and scriptable using dbus
After a lot of hard work by its maintainer Alexandre Viau and
others, the decentralized communication platform
Jami
(earlier known as Ring), managed to get
its latest version
into Debian Testing. Several of its dependencies has caused build and
propagation problems, which all seem to be solved now.
In addition to the fact that Jami is decentralized, similar to how
bittorrent is decentralized, I first of all like how it is not
connected to external IDs like phone numbers. This allow me to set up
computers to send me notifications using Jami without having to find
get a phone number for each computer. Automatic notification via Jami
is also made trivial thanks to the provided client side API (as a DBus
service). Here is my bourne shell script demonstrating how to let any
system send a message to any Jami address. It will create a new
identity before sending the message, if no Jami identity exist
already:
#!/bin/sh # # Usage: $0 # # Send to , create local jami account if # missing. # # License: GPL v2 or later at your choice # Author: Petter Reinholdtsen if [ -z "$HOME" ] ; then echo "error: missing \$HOME, required for dbus to work" exit 1 fi # First, get dbus running if not already running DBUSLAUNCH=/usr/bin/dbus-launch PIDFILE=/run/asterisk/dbus-session.pid if [ -e $PIDFILE ] ; then . $PIDFILE if ! kill -0 $DBUS_SESSION_BUS_PID 2>/dev/null ; then unset DBUS_SESSION_BUS_ADDRESS fi fi if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && [ -x "$DBUSLAUNCH" ]; then DBUS_SESSION_BUS_ADDRESS="unix:path=$HOME/.dbus" dbus-daemon --session --address="$DBUS_SESSION_BUS_ADDRESS" --nofork --nopidfile --syslog-only < /dev/null > /dev/null 2>&1 3>&1 & DBUS_SESSION_BUS_PID=$! ( echo DBUS_SESSION_BUS_PID=$DBUS_SESSION_BUS_PID echo DBUS_SESSION_BUS_ADDRESS=\""$DBUS_SESSION_BUS_ADDRESS"\" echo export DBUS_SESSION_BUS_ADDRESS ) > $PIDFILE . $PIDFILE fi & dringop() part="$1"; shift op="$1"; shift dbus-send --session \ --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $* dringopreply() part="$1"; shift op="$1"; shift dbus-send --session --print-reply \ --dest="cx.ring.Ring" /cx/ring/Ring/$part cx.ring.Ring.$part.$op $* firstaccount() dringopreply ConfigurationManager getAccountList \ grep string awk -F'"' ' print $2 ' head -n 1 account=$(firstaccount) if [ -z "$account" ] ; then echo "Missing local account, trying to create it" dringop ConfigurationManager addAccount \ dict:string:string:"Account.type","RING","Account.videoEnabled","false" account=$(firstaccount) if [ -z "$account" ] ; then echo "unable to create local account" exit 1 fi fi # Not using dringopreply to ensure $2 can contain spaces dbus-send --print-reply --session \ --dest=cx.ring.Ring \ /cx/ring/Ring/ConfigurationManager \ cx.ring.Ring.ConfigurationManager.sendTextMessage \ string:"$account" string:"$1" \ dict:string:string:"text/plain","$2"If you want to check it out yourself, visit the the Jami system project page to learn more, and install the latest Jami client from Debian Unstable or Testing. As usual, if you use Bitcoin and want to show your support of my activities, please send Bitcoin donations to my address 15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.