The command definition (GenericExecuteSynth) in /etc/speech-dispatcher/modules/pico-generic.conf use a fixed file name for the wave file ($TMPDIR/pico.wav):
GenericExecuteSynth \ "pico2wave -w $TMPDIR/pico.wav -l $VOICE \'$DATA\' && $PLAY_COMMAND $TMPDIR/pico.wav
If you use spd-say or a speech dispatcher enabled application with root, it will create the pico.wav file owned by root with restricted permissions.
If you try to use spd-say with a different user, it will then fail, failing to access the /tmp/pico.wav file.
A solution would be to create a temporary file per user ID:
GenericExecuteSynth \ "USERID=`id -u` ; pico2wave -w $TMPDIR/pico-$USERID.wav -l $VOICE \'$DATA\' && $PLAY_COMMAND $TMPDIR/pico-$USERID.wav"
The command definition (GenericExecute Synth) in /etc/speech- dispatcher/ modules/ pico-generic. conf use a fixed file name for the wave file ($TMPDIR/pico.wav):
GenericExecuteSynth \
"pico2wave -w $TMPDIR/pico.wav -l $VOICE \'$DATA\' && $PLAY_COMMAND $TMPDIR/pico.wav
If you use spd-say or a speech dispatcher enabled application with root, it will create the pico.wav file owned by root with restricted permissions.
If you try to use spd-say with a different user, it will then fail, failing to access the /tmp/pico.wav file.
A solution would be to create a temporary file per user ID:
GenericExecuteSynth \ pico-$USERID. wav -l $VOICE \'$DATA\' && $PLAY_COMMAND $TMPDIR/ pico-$USERID. wav"
"USERID=`id -u` ; pico2wave -w $TMPDIR/