Skip to main content

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.


Some comments from Almondmendoza
#!/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



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.


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.

Popular posts from this blog

LaMetric Python App

Creating a personal stock app for LaMetric is super simple, all you need is create an account at developer.lametric.com and have an url with your data. Depending on how you want the data to appear, the format should be in json and how it appears in the creation process.

I used appengine to host my data and used the metric data format


Here is the python code
import urllib2 import json # get stocks data using yahoo finance stocks = ['0002.HK', '0005.HK', '0011.HK', '0992.HK', '0066.HK'] url = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.quotes%20where%20symbol%20in%20(%22" + ("%22%2C%22".join(stocks)) + "%22)%0A%09%09&env=http%3A%2F%2Fdatatables.org%2Falltables.env&format=json" result = urllib2.urlopen(url) data = json.loads(result.read()) # create frames based on the metric data format frames = [] for stock in data['query']['results']['quote']: …

Winamp Spotify Treasure hunting

Back in the days when WinAmp was huge (So was tripod and geocities), WinAmp users like to share their playlist. Most of these playlist are still available online through googling and a lot of them are actually good throwback playlist. With that in mind, I created a javascript script that would change the winamp playlist (pure text) into a spotify search link.

An example of this, say you liked the 90s rock scene. You would google "winamp playlist pearl jam silverchair" and some of the results will return with the title "Winamp Generated PlayList" and these are what we would like to treasure hunt on. Then
Click on of the result.
Right click anywhere in the page, select Inspect (Chrome) or Inspect Element (Firefox)
Select the Console
Paste this
$$('ul font small')[0].innerHTML = $$('ul font small')[0].innerHTML.split('<br>').map((val) => { return '<a style="color:white" href="spotify:search:' + encodeURIComp…

Laravel 4.2 and App Engine

Was trying to make Laravel work with App Engine when i saw this post Laravel 4 on Google AppEngine for PHP, have tried to make it work but it seems there are some things that needs to be updated to make it work.

First off follow everything the blog until THE MCRYPT PHP EXTENSION then on that part we have to change "require": { "laravel/framework": "4.2.*", "neoxia/laravel-openssl-encryption-42": "dev-master" },
Then continue to follow the blog again. Then on THE LARAVEL 4 LOGGER, change $monolog->pushHandler(new Monolog\Handler\SyslogHandler('intranet', 'user', Monolog\Logger::DEBUG, false, LOG_PID));
Then before executing ./artisan optimize     open LaravelOpensslEncryptionServiceProvider.php, add to the top use Illuminate\Encryption\Encrypter;
Then lasty the part of UNIX_SOCKET, you could ignore it, it seems fixed for 4.2