Может можно через прочитать сообщения полученные в pidgin через D-bus или purple-remote? Или может читать журнал на наличие новых сообщений. Только там слишком много файлов журналов, на каждого контакта.
А всё из за того что мне лень вставать с дивана при просмотре фильма идти к компьютеру и смотреть кто, что написал. Хочу чтобы компьютер (festival) мне их читал ставя на паузу плеер.
Знаю что есть плагин pidgin-festival но он почему то не работает сам festival работает.
linuxMint 11
Gnome 2.32.1
Linux 2.6.38-8
Pidgin 2.7.11 (libpurple 2.7.11)
festival: Festival Speech Synthesis System: 2.0.95:beta April 2010
Нашел решение получать сообщения через dbus-monitor
https://forum.ubuntu.ru/index.php?topic=92123.0, первоисточник
http://welinux.ru/post/2342/ надо только немного подшаманить, и выложу сюда.
Ну вот что получилось:
Файл speech.sh
#!/bin/bash
COMMAND_COUNTER=0
MESSAGE_HEADER=""
MESSAGE_BODY=""
PARSE_REQUIRED=0
dbus-monitor "interface='org.freedesktop.Notifications', member='Notify'" | while read -r DBUS_MESSAGE ; do
ID=`echo $DBUS_MESSAGE | grep "member=Notify"` # | sed -e '/*close*/d'
if [[ $ID ]] ; then
let COMMAND_COUNTER=0
let PARSE_REQUIRED=1
else
if [ $PARSE_REQUIRED -eq 1 ] ; then
ID=`echo $DBUS_MESSAGE | egrep "string\ \""`
# нгнорирование сообщений от rhythmbox
if [ "$ID" == 'string "rhythmbox"' ]; then
let COMMAND_COUNTER=5
let PARSE_REQUIRED=0
fi
if [ "$ID" == 'string "indicator-sound"' ]; then
let COMMAND_COUNTER=5
let PARSE_REQUIRED=0
fi
if [[ $ID ]]; then
let COMMAND_COUNTER=$COMMAND_COUNTER+1
fi
if [ $COMMAND_COUNTER -eq 3 ] ; then
#выделение только сообжения из стороки
MESSAGE_HEADER=`echo $DBUS_MESSAGE | grep "string\ \"" | sed s/^string\ \"//g | sed s/\"$//g`
fi
if [ $COMMAND_COUNTER -eq 4 ] ; then
MESSAGE_BODY=`echo $DBUS_MESSAGE | grep "string\ \"" | sed s/^string\ \"//g | sed s/\"$//g`
echo $MESSAGE_HEADER $MESSAGE_BODY | sed -e 's/[A-Za-z]//g;s/[[:punct:]]//g' | while read -r qr ;do
if [[ $(pidof mplayer) ]]; then killall -STOP mplayer; fi
if [[ $(pidof deadbeef) ]]; then killall -STOP deadbeef-main; fi
/home/s/test_speak/saytext_ru.sh "$qr"
if [[ $(pidof mplayer) ]]; then killall -CONT mplayer; fi
if [[ $(pidof deadbeef) ]]; then killall -CONT deadbeef-main; fi
done
let COMMAND_COUNTER=$COMMAND_COUNTER+1
let PARSE_REQUIRED=0
fi
fi
fi
done
И файл который читает текст
#!/bin/bash
# http://ru.festivalspeaker.wikia.com
echo "$1" | text2wave -o /home/s/scripts/festival/data/1.wav -eval "(voice_msu_ru_nsh_clunits)"
aplay /home/s/scripts/festival/data/1.wav > /dev/null 2>&1