Jaunty Surround Sound Requires Simple Adjustment

I just completed a dist-upgrade from Intrepid to Jaunty. Everything worked except I needed to reinstall OpenOffice and rerun

sudo apt-get install ubuntu-restricted-extras

VirtualBox was OK but I needed to select More>Backup to cope with a changed format.

My surround sound was gone though. Fortunately the answer was dead easy. See http://www.automaticable.com/2008-05-28/how-to-enable-surround-sound-on-ubuntu-hardy/.

Basically you uncomment one line in a file and change a 2 to a 6. No need to muck around with Preferences and sliders etc.

New Project to Develop Open Source Statistics Program

SOFA (Statistics Open For All), is a new, open source statistics program currently under development (see http://www.sofastatistics.com). The development version of SOFA can already connect directly to a range of different databases and lets users display results in an attractive format ready to share or put in a spread­sheet. A packaged release is being prepared.

SOFA focuses on being easy to use rather than on providing a comprehensive array of tests. So while SOFA won’t replace sophisticated statistics systems like R, there is a good chance it will do what a large number of people need and do it well.

SOFA is written in python, and will work on PCs, Macs, and Linux computers (e.g. Ubuntu).

People interested in using a free statistics program are welcome to contact the project (http://sofastatistics.com/contact.php).

NZ Government Could Better Support Local OSS

Just read an interesting press release from the New Zealand Open Source Society:

http://nzoss.org.nz/news/2009/press-release-nzoss-g2009-negotiations-microsoft

I especially agreed with the following:

“There are too many potential opportunities for New Zealand being missed. We need to re-examine why free software is not being picked up in a major way across the public sector.”

Small investments could yield large and ongoing returns.

Ethernet problem on Intrepid

My father-in-law’s Intrepid machine had no ethernet and there was a message: “Wired Network: Device is unmanaged.”. This was strange as it had been working for over 6 months. I still don’t know what happened but I found some ideas here: https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/337685. Open interfaces thus:

sudo gedit /etc/network/interfaces

Edit and save. I just compared my settings with his and suggested he change his to match. NB comment out lines you want to remove, don’t delete them. You might want to look at them later or even restore them.

wxWebkit on Intrepid

wxWebKit is a very important cross-platform control for the wxPython GUI toolkit. It enables you to display complex HTML pages (including live from the web) e.g. tabular output or help files.

Fortunately, wxWebkit can be made to work on Ubuntu Intrepid. Indeed, I am editing this blog item right now from within a wxPython wxWebKit control :-). But it is not a straight forward process at this time and it is not properly installed as such. But you can start testing it after following the steps suggested below.

[Update – there is now a deb file you can use thanks to Christoph Willing. Use the following commands:
# NB the next line is one long command line
sudo wget http://www.vislab.uq.edu.au/debuntu/sources.list.d/intrepid.list -O /etc/apt/sources.list.d/uqvislab.list

sudo apt-get update

sudo apt-get install python-webkitwx
]

I was never able to get wxWebKit to compile and work following the instructions here http://wxwebkit.wxcommunity.com/index.php?n=Main.Requirements. I expect this will change in the future.

Here are some instructions that have worked for me on more than one machine. My deepest thanks go to Christoph Willing and Kevin Ollivier.

Get the correct wx swig deb from http://www.vislab.uq.edu.au/debuntu/intrepid/swigwx1.3_1.3.29_i386.deb and install it.

Get a patched bakefile deb from http://www.vislab.uq.edu.au/debuntu/intrepid/bakefile_0.2.5-1_i386.deb and install it.

Get intrepid_prereqs and i_files.tar.gz from http://www.vislab.uq.edu.au/research/accessgrid/software/debuntu/wxwebkit/.

Run the prereqs file from the folder you have stored it in e.g. Desktop:

cd ~/Desktop
sudo bash intrepid_prereqs

Then extract the i_files folder from i_files.tar.gz and put it (the folder with its contents, not just the contents) under: /usr/include/wx-2.8/wx/wxPython

OK – the preparation is done. Now to get the source by checking out the subversion repository:

cd ~
svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit

Then cd into ~/WebKit/WebKitTools/Scripts and run:
./build-webkit --wx --wx-args="wxgc wxpython" 2>&1 | tee op

NB if your build fails for some reason and you want to run it again, run clean first:
./build-webkit --wx --wx-args="wxgc wxpython" --clean

The file op will be made in ~/WebKit/WebKitTools/Scripts so you can check what happened. If your build is successful there will be a clear message to that effect at the end. Regrettably, an absence of error messages is not the presence of success ;-).

To test wxWebKit you will need to save the following file in the ~/WebKit/WebKitBuild/Release folder (this is a minor variation of the standard test file to sidestep some bugs).

#!/usr/bin/python

# Copyright (C) 2007 Kevin Ollivier All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

import wx
import webview

class TestPanel(wx.Panel):
def __init__(self, parent, log, frame=None):
wx.Panel.__init__(self, parent, -1,
style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN|wx.NO_FULL_REPAINT_ON_RESIZE)
self.log = log
self.current = "http://wxPython.org/"
self.frame = frame

if frame:
self.titleBase = frame.GetTitle()

sizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)

self.webview = webview.WebView(self, -1)

btn = wx.Button(self, -1, "Open", style=wx.BU_EXACTFIT)
self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn)
btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)

btn = wx.Button(self, -1, "<--", style=wx.BU_EXACTFIT) self.Bind(wx.EVT_BUTTON, self.OnPrevPageButton, btn) btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2) btn = wx.Button(self, -1, "-->", style=wx.BU_EXACTFIT)
self.Bind(wx.EVT_BUTTON, self.OnNextPageButton, btn)
btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)

btn = wx.Button(self, -1, "Stop", style=wx.BU_EXACTFIT)
self.Bind(wx.EVT_BUTTON, self.OnStopButton, btn)
btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)

btn = wx.Button(self, -1, "Refresh", style=wx.BU_EXACTFIT)
self.Bind(wx.EVT_BUTTON, self.OnRefreshPageButton, btn)
btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)

txt = wx.StaticText(self, -1, "Location:")
btnSizer.Add(txt, 0, wx.CENTER|wx.ALL, 2)

self.location = wx.ComboBox(self, -1, "",
style=wx.CB_DROPDOWN|wx.PROCESS_ENTER)

self.Bind(wx.EVT_COMBOBOX, self.OnLocationSelect, self.location)
self.location.Bind(wx.EVT_KEY_UP, self.OnLocationKey)
self.location.Bind(wx.EVT_CHAR, self.IgnoreReturn)
btnSizer.Add(self.location, 1, wx.EXPAND|wx.ALL, 2)

sizer.Add(btnSizer, 0, wx.EXPAND)
sizer.Add(self.webview, 1, wx.EXPAND)

self.webview.LoadURL(self.current)
self.location.Append(self.current)

# self.webview.Bind(webview.EVT_WEBVIEW_STATE_CHANGED, self.OnStateChanged)

self.SetSizer(sizer)

def OnStateChanged(self, event):
statusbar = self.GetParent().GetStatusBar()
if statusbar:
if event.GetState() == webview.WEBVIEW_STATE_NEGOTIATING:
statusbar.SetStatusText("Contacting " + event.GetURL())
elif event.GetState() == webview.WEBVIEW_STATE_TRANSFERRING:
statusbar.SetStatusText("Loading " + event.GetURL())
elif event.GetState() == webview.WEBVIEW_STATE_STOP:
statusbar.SetStatusText("")
self.location.SetValue(event.GetURL())
self.GetParent().SetTitle("wxWebView - " + self.webview.GetPageTitle())

def OnLocationKey(self, evt):
if evt.GetKeyCode() == wx.WXK_RETURN:
URL = self.location.GetValue()
self.location.Append(URL)
self.webview.LoadURL(URL)
else:
evt.Skip()

def IgnoreReturn(self, evt):
if evt.GetKeyCode() != wx.WXK_RETURN:
evt.Skip()

def OnLocationSelect(self, evt):
url = self.location.GetStringSelection()
self.webview.LoadURL(url)

def OnOpenButton(self, event):
dlg = wx.TextEntryDialog(self, "Open Location",
"Enter a full URL or local path",
self.current, wx.OK|wx.CANCEL)
dlg.CentreOnParent()

if dlg.ShowModal() == wx.ID_OK:
self.current = dlg.GetValue()
self.webview.LoadURL(self.current)

dlg.Destroy()

def OnPrevPageButton(self, event):
self.webview.GoBack()

def OnNextPageButton(self, event):
self.webview.GoForward()

def OnStopButton(self, evt):
self.webview.Stop()

def OnRefreshPageButton(self, evt):
self.webview.Reload()

class wkFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, -1, "WebKit in wxPython!")

self.panel = TestPanel(self, -1)
# self.panel.webview.LoadURL("http://www.wxwidgets.org/")
self.CreateStatusBar()

class wkApp(wx.App):
def OnInit(self):
self.webFrame = wkFrame()
self.SetTopWindow(self.webFrame)
self.webFrame.Show()

return True

app = wkApp(redirect=False)
app.MainLoop()

Assuming you named that file my_wxwebkit_test.py, cd into ~/WebKit/WebKitBuild/Release and run

export LD_LIBRARY_PATH=`pwd`

so that the library files can be found in spite of their unexpected location (because we haven’t properly installed our files into the standard locations). Then run

python my_wxwebkit_test.py

and enjoy :-).

VuegoScan Brisa 620u Scanner with Ubuntu

I was unable to get my VuegoScan Brisa 620u scanner working in Ubuntu Jaunty. There was an error similar to the following:

Failed to open device `snapscan:libusb:006:003': Invalid argument.

Interestingly, if I dual booted into Windows with the scanner on and then booted into Ubuntu the scanner worked. Apparently, a firmware blob is loaded into the scanner.

Fortunately I still had a 1999 CD for the scanner with all the drivers on it. So it was a matter of changing a line in snapscan.conf and putting a binary file into a particular path.

Here are the details:

1) Open nautilus with root powers (NB very dangerous – think before you act!). Apologies to my CLI-loving friends ;-).

gksu nautilus

2) navigate to /etc/sane.d/snapscan.conf

3) Double click snapscan.conf and edit 5th line:

firmware /usr/share/sane/snapscan/U96V120.BIN

4) navigate to /usr/share/sane/ and make sure there is a folder called snapscan

5) Copy U96V120.BIN from the /media/cdrom/DRIVERS folder into /usr/share/sane/snapscan

6) Close nautilus (remember, it is opened with root powers and could be dangerous to your system’s well being).

7) Open Xsane (Applications > Graphics > Xsane Image scanning program) and start scanning

NB I was lucky that I guessed the correct BIN file on my first attempt.

Ubuntu Intrepid Modem Solution with wvdial & Gnome PPP

To get a modem working on my Grandparent’s Ubuntu Intrepid machine I needed to use wvdial. I can’t remember the exact sequence but perhaps start by editing “/etc/wvdial.conf” while logged in as root.

sudo gedit "/etc/wvdial.conf"

Supply the phone number to the ISP, the user name, and the password.

I also found my Grandparent’s modem was on /dev/tty0 not /dev/tty1. You could hear it on one and not the other which was a pretty simple test.

OK – now you can make a connection using the simple command:

sudo wvdial

NB if you have trouble connecting, disconnect all phones except for the modem and try again. The explanation is complex and may vary by country but it is worth a shot if the login works and the connection mysteriously disconnects (e.g. Exit code 16).

Now get a GUI for connecting and disconnecting.

sudo apt-get install gnome-ppp

Then, manually set the correct permissions:

sudo chown root:dip /usr/sbin/pppd
sudo chmod 4754 /usr/sbin/pppd
sudo chmod 777 /etc/ppp/pap-secrets
sudo chmod 777 /etc/ppp/peers

(http://ubuntuforums.org/showpost.php?p=6296683&postcount=4)

I found I needed to make /usr/bin/pppd executable for everything to work. Some people have suggested you need to re-log in to make it work or even reboot but I am not sure if that is necessary.

Anyway, add the Gnome ppp dialer to the panel and everything is simple enough for anyone to use.

Installing eeeBuntu Intrepid Remix onto eeePC Netbook

Overall, installing eeeBuntu Remix (Intrepid) onto an eeePC netbook went well enough but there were a few rough patches. The download went smoothly, I installed the create usb startup disk program from the standard repositories, and selected the iso file just downloaded. But … I had to install lilo and use it to repair the usb MBR before it would work.

sudo apt-get install lilo
(NB do not configure to use unless you actually want to replace GRUB)

lilo -M /dev/sdx
(replacing x with the letter of your flash device) sdb in my case
(See http://www.pendrivelinux.com/usb-ubuntu-710-gutsy-gibbon-install/.

Plus the USB drive was detected sometimes and not others by the eeePC. [Later note – this may be relevant: “[On] my EEE PC 1000 the only bootable USB port is the one on the left side, the two on the right would not boot the USB at all.” (Full Circle 23 – http://fullcirclemagazine.org/issue-23/)]

Anyway, press Esc repeatedly at bootup to get access to the USB drive and boot into it.

Partitioning was interesting as there seemed to be half the harddrive set aside (for recovery, I think). I formatted that as linux swap. I’ll resize it later. The default seems to be shrinking XP (good) and using the second (of 3) partitions for eeeBuntu. I formatted that as ext3.

[Note from later ;)] install ntfsprogs to enable resizing ntfs partition etc.
sudo apt-get install ntfsprogs. I resized the windows partition drastically down from within eeebuntu and later used a live usb of gparted to resize and move the eeebuntu partition. The most recent versions of gparted live did not work but I succeeded with 0.3.7-7. NB this only worked in video safe mode (VGA).

To run all the upgrades you need to get the repositories working (now that GPG keys are required, which seems to be a recent development – http://forum.eeebuntu.org/viewtopic.php?f=17&t=1701&p=6559).

If it is not you might get an error like:

W: A error occurred during the signature verification. The repository is not updated and the previous index files will be used.GPG error: http://ppa.launchpad.net intrepid Release: The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 3F2A5EE4B796B6FE

W: Failed to fetch http://ppa.launchpad.net/netbook-remix-team/ubuntu/dists/intrepid/Release

Fortunately, the following worked for me:

sudo apt-key adv –recv-keys –keyserver keyserver.ubuntu.com 3F2A5EE4B796B6FE
(http://lxer.com/module/forums/t/28587/).

The following may be useful as well: http://www.archive.org/download/LaunchpadAddingAPpasKeyToYourUbuntuSystem/launchpad-adding-key-for-signed-ppa.ogv

Before that I had to uninstall the flash nonfree package and reinstall it. But youtube is working perfectly now.

I also changed the icons under appearance to Gnome so that Thunderbird would have the correct icon.

The final thing was to get Skype installed. This required Medibuntu as per http://forum.eeebuntu.org/viewtopic.php?f=28&p=6542 and then a change to the Skype sound setup as per http://www.eeebuntu.org/release.html

BTW this entry was written and posted from the eeePC. The only real bad news is that it isn’t mine and I have to return it soon :-(.

Eclipse 3.4 Ganymede On Ubuntu Intrepid

The Ubuntu Intrepid repository only has eclipse 3.2. I had lots of problems with that version (hanging etc) and it was ruining my programming experience. So I uninstalled it and downloaded the latest tar.gz file from the eclipse downloads page. Then I simply extracted everything under my home folder. The new path is /home/myusername/eclipse/eclipse. Brilliant. And it seemed to keep all my existing projects. The only thing was to get pydev and the pydev extensions working. For some reason this was incredibly slow but eventually it succeeded and everything was working just like I wanted. Only one thing to get. A logo for the menu item. I found an answer here: http://www.bearfruit.org/blog/2007/08/09/eclipse-svg-icons.

Here is how some other people did it (including blow by blow instructions) – http://midnight-freak.blogspot.com/2008/08/eclipse-ganymede-in-ubuntu.html.

NB there may be various things installed on my system which made it as easy to install as described. In particular, I probably had the latest java packages installed when I ran the one-step restricted updates command Ubuntu Multimedia, MS Fonts etc in One Command!.

Ubuntu Multimedia, MS Fonts etc in One Command!

I have always wanted a one-step way of getting a Ubuntu machine set up and ready to go. This doesn’t handle everything I need (e.g. Broadcom wireless and NVidia) but it is pretty close 🙂 .

The Ubuntu Restricted Extras will install Adobe Flash Player, Java Runtime Environment (JRE) (sun-java-jre) with Firefox plug-ins (icedtea), a set of Microsoft Fonts (msttcorefonts), multimedia codecs (w32codecs or w64codecs), mp3-compatible encoding (lame), FFMpeg, extra Gstreamer codecs, the package for DVD decoding (libdvdread3, but see below for info on libdvdcss2), and the unrar archiver. This is a single command approach.
sudo apt-get install ubuntu-restricted-extras
http://ubuntuguide.org/wiki/Ubuntu:Intrepid#Restricted_Extras

For more on the Microsoft fonts read http://ubuntu.wordpress.com/2005/09/09/installing-microsoft-fonts/.