Read Clipboard in Ubuntu
If your like me lazy in reading stuff then TTS like espeak, festival is perfect. For me it doesn’t matter if it speaks like computer but as long as someone thing can read it for me its perfect. So in this journey i had made 2 scripts that could help you. This was testing in Ubuntu 9.04 with python, espeak and metacity as default.
First, create a python script or download this file, please rename the file to your folder of choice, for our example we would use /home/almondmendoza/clipboard/getClipboardContents.py
import gtk clip = gtk.clipboard_get(selection='PRIMARY') print clip.wait_for_text()
The previous script would get our clipboard, now to speak it we would use espeak coz its build in by default, we would have to created a shell script or download this (this change voice to en-r and speed to 200), please rename the file, for our example /home/almondmendoza/clipboard/speakClipboard.sh
#!/bin/sh word=`/usr/bin/python /home/almondmendoza/clipboard/getClipboardContents.py` espeak ". $word"
Now we need to make the shell script executable with 777 permission
sudo chmod a+x /home/almondmendoza/clipboard/speakClipboard.sh sudo chmod 777 /home/almondmendoza/clipboard/speakClipboard.sh
You could execute it now to speak the clipboard by
/home/almondmendoza/clipboard/speakClipboard.sh
For the fun part we would bind this to a key combination, but first we need to create a symbolic link to /usr/bin where it could be executed properly (i really dont know the reason but it works)
sudo ln /home/almondmendoza/clipboard/speakClipboard.sh /usr/bin/speakMyClipboard
Next bind it to a key combination, i bind it to the first command with Ctrl + Alt + C
gconftool-2 -s /apps/metacity/keybinding_commands/command_1 -t string 'speakMyClipboard' gconftool-2 -s /apps/metacity/global_keybindings/run_command_1 -t string '<Control><Alt>C'
There are some error/bugs on gtk when i was doing this, i just updated my ubuntu and it was fixed. Another error was most of the time it cannot speak the whole clipboard or couldn’t speak at all, i think its espeak’s problem so i cant help on this one, just press the combination again and again. If anyone has a better way to do this please post a comment.
Hope this helps.
Related posts:

I love this script its so easy to setup. i have however needed to modify it a little.
firstly i needed to have the alsa-oss package installed (i’m using Ubuntu 8.10)
i then changed the sh file to invok espeak using:
aoss espeak -v “en+m2″ “. $word . . . . ”
doing this allows speakMyClipboard.sh to work while other apps are using the sound card. if you don’t and you have music playing then it won’t work.
the extra periods at the end are there to add a bit of a pause to the end of whats being said.
otherwise aoss cuts off the buffer too soon and you don’t get the last word of the selection.
i also have a launcher in my gnome pannel that i can click on and it will speak the clipboard. this is if i’m feeling lazy and won’t want to use the key combo.
i hope this info helps because this has been a great script for me and i really appreciate it.
Cool glad it helped and you’ve manage to work it out with alsa
Dear Mylo9000 will you be kind enough to share with us the modified script?
Thanks for the info. I found your code snippet simple and useful.
this is the content of my speakclipboard.sh file.
remember you need to have the alsa-oss package installed first for this to work. you can find alsa-oss in your distro’s package manager.
#!/bin/sh
word=`/usr/bin/python //home/mylo9000/scripts/clipboard/getclipboardcontents.py`
aoss espeak -s 200 -v “en-r” “. . . . . . . $word . . . , , , end of line. “
for those using ubuntu jaunty as a bug fix change espeak command to:
espeak ” $word ” –stdout | aplay
espeak package in jaunty is not playing nice with port audio.
add to previous post that there are two dashes before stdout
hey everyone, just wanted to post a little something i added to this script just to spice it up a bit. I included a random number for the pitch option so that the voice sounds a bit different every time i invoke the script. this makes it more interesting when reading forum entries. its like different people are talking. i also had to change the script from #!/bin/sh to #!/bin/bash to get it to work. seems shell doesn’t like how bash generates a random number. oh and i no longer use alsa-oss for also compatibility. terrymon’s way of pipeing it to aplay works so much better.
anyways here’s my speakmyclipboard.sh file contents.
#!/bin/bash
number=$((RANDOM%100))
word=`/usr/bin/python //home/mylo9000/Scripts/clipboard/getclipboardcontents.py`
espeak -p $number -v “en+m” “. $word . . . . end of line. $number” –stdout | aplay
agian there are two dashes before stdout