#!/bin/sh if grep -q speakup /proc/cmdline; then exit fi # Create '/dev/(soft)synth' if not present (cd /dev if [ ! -c /dev/softsynth ]; then mknod softsynth c 10 26 fi if [ ! -c /dev/synth ]; then mknod synth c 10 25 fi ) # Load the software synthesizer echo "soft" > /sys/accessibility/speakup/synth sleep 1 # Permissions chmod 666 /sys/accessibility/speakup/soft/* echo 1 > /sys/accessibility/speakup/soft/direct if [ "$LANG" = "" ]; then . /etc/profile.d/lang.sh fi # Starts/stops/restart espeakup set_voice () { lang=`echo $LANG | sed 's/_.*//'` country=`echo $LANG | sed 's/.*_//;s/\..*//;s/@.*//' | tr A-Z a-z` if [ "$lang" = gl ]; then # Not supported by espeak yet, but pt should be fine enough, better # than English anyway # Comment above from Debian. We don't propose gv in Slint yet, but # maybe later ? lang=pt fi if grep -qr "^language $lang-$country$" /usr/share/espeak-ng-data/lang; then VOICE="$lang-$country" elif grep -qr "^language $lang$" /usr/share/espeak-ng-data/lang; then VOICE="$lang" else VOICE=en fi echo $VOICE > /tmp/espeakup_default_voice } set_voice DEFAULTVOICE=$(cat /tmp/espeakup_default_voice) rm /tmp/espeakup_default_voice espeakup_start() { [ "$LANG" = "" ] && . /etc/profile.d/lang.sh if [ -f /etc/espeakup.conf ]; then . /etc/espeakup.conf if [ ! "$rate" = "" ]; then echo $rate > /sys/accessibility/speakup/soft/rate else echo 2 > /sys/accessibility/speakup/soft/rate fi if [ ! "$vol" = "" ]; then echo $vol > /sys/accessibility/speakup/soft/vol else echo 4 > /sys/accessibility/speakup/soft/vol fi if [ ! "$pitch" = "" ]; then echo $pitch > /sys/accessibility/speakup/soft/pitch else echo 4 > /sys/accessibility/speakup/soft/pitch fi if [ "$voice" = "" ]; then voice=$DEFAULTVOICE fi if [ "$ALSA_CARD" = "" ]; then ALSA_CARD=0 fi else voice=$DEFAULTVOICE echo 2 > /sys/accessibility/speakup/soft/rate echo 4 > /sys/accessibility/speakup/soft/vol echo 3 > /sys/accessibility/speakup/soft/pitch ALSA_CARD=0 fi if [ ! "`ps -C espeakup --noheaders|wc -l`" = "0" ]; then echo "espeakup is already started." espeakup_status exit fi if [ -x /usr/bin/espeakup ]; then echo "Starting espeakup" ALSA_CARD=$ALSA_CARD /usr/bin/espeakup -V $voice else echo "/usr/bin/espeakup not found or non executable" fi } espeakup_stop() { NBPROC="`ps -C espeakup --noheaders|wc -l`" if [ ! "$NBPROC" = "0" ]; then sleep 1 PID="`ps -C espeakup --noheaders -o pid`" kill -s 9 $PID # Restore the defaults echo 2 > /sys/accessibility/speakup/soft/rate echo 5 > /sys/accessibility/speakup/soft/vol echo 3 > /sys/accessibility/speakup/soft/pitch fi } espeakup_restart() { espeakup_stop sleep 2 espeakup_start } espeakup_status() { NBPROC="`ps -C espeakup --noheaders|wc -l`" if [ "$NBPROC" = "0" ]; then echo "espeakup is not started" elif [ "$NBPROC" = "1" ]; then echo "An espeakup daemon is running, PID: `ps -C espeakup --no-headers -o pid`" else ps -C espeakup -o pid,args fi } case "$1" in start) espeakup_start;; stop) espeakup_stop;; restart) espeakup_restart;; status) espeakup_status;; *) echo "Usage: $0 {start|stop|restart|status}";; esac