Running xvoice under modern RedHat distributions

Date: Wed, 12 Nov 2003 17:02:48 +0100
From: Anthony Jameson
To: xvoice-user@lists.sourceforge.net
Subject: [Xvoice-user] How I got xvoice to work under RedHat 9
  

Since people have been having a lot of problems getting xvoice to work under RedHat 9, I will describe how I finally got it to work (thanks largely to Carlo Wood's contributions).

These steps will probably not work for everyone, but they may help.

In particular, Step 2 may provide a simpler solution to the problem that has been discussed in the last few posts to this list ("xvoice and RH9").

  1. Using Carlo's vvinstall script

    I downloaded the script from http://www.alinoe.com/vvinstall and was able to use it with just one modification:

    Since my CD with ViaVoice contained ViaVoice_Dictation-1.0-1.1.i386.rpm instead of Carlo's ViaVoice_Dictation-1.0-1.0.i386.rpm, I changed the name in the script.

    I also commented out the section of the script that did a checksum on the rpms, since the test would have failed because of the different version. (You can find this part of the script by looking for "Checksum of files in $VIAVOICERPMDIR failed!")

    The slightly different version of ViaVoice_Dictation didn't seem to cause a problem: The script completed normally and the various ViaVoice applications worked.

  2. Changing the invocation of engine.bin

    Even though ViaVoice worked fine by itself, invocation of xvoice still yielded an error like the following one:

    xvoice: relocation error: /usr/lib/libvtbnfc31.so: symbol
    errno, version GLIBC_2.0 not defined in file libc.so.6 with
    link time reference
    

    It seems that this error does not come from xvoice itself; when the ViaVoice engine is invoked from within xvoice, it no longer accesses the correct libraries.

    So following up on a suggestion that Carlo had made in one of his postings, I hacked the engine as follows:

    1. Rename /usr/lib/ViaVoice/bin/engine to /usr/lib/ViaVoice/bin/engine.bin
    2. Create a script called /usr/lib/ViaVoice/bin/engine-xvoice that invokes engine.bin as follows (all on one line):

            #! /bin/bash
            PATH="/usr/local/viavoice/redhat-6.2/bin"
            LD_LIBRARY_PATH="/usr/local/viavoice/redhat-6.2/lib:/usr/local/viavoice/redhat-6.2/usr/lib:/usr/lib"
            /usr/lib/ViaVoice/bin/engine.bin
            

    3. Use the following alias for invoking xvoice:

        alias my-xvoice 'rm /usr/lib/ViaVoice/bin/engine;
        ln -s /usr/lib/ViaVoice/bin/engine-xvoice /usr/lib/ViaVoice/bin/engine;
        setenv LD_ASSUME_KERNEL 2.4.1;
        vvsetenv;/usr/local/bin/xvoice &'
        

      This alias works under tcsh; under bash I guess you would write "export LD_ASSUME_KERNEL=2.4.1".

      This LD_ASSUME_KERNEL=2.4.1 seems to be necessary to avoid some of the library errors.

      The result is that when xvoice calls the engine, it will be running the script given above.

    4. We still need to ensure that ViaVoice can be started directly in the normal way, so make an alias like the following one:

        alias vvinit 'rm /usr/lib/ViaVoice/bin/engine;
        ln -s /usr/lib/ViaVoice/bin/engine.bin /usr/lib/ViaVoice/bin/engine'
        

      This command should be run before you call vvstartdictation, vvstartuserguru, vvstartenrollment, or vvstartaudiosetup. (It's only really necessary if you have recently run xvoice.) You can of course make convenient aliases that include a call to vvinit.

I also had to use some special tricks to get my USB headset to work, but since these may not be generally necessary I'll describe them in a separate message.

A concluding word: There has understandably been a lot of pessimism lately about ViaVoice for Linux and xvoice. But there is some reason for optimism as well:

Once you have gotten the programs to work on a new, fast computer, they work better than they did a couple of years ago. The many installation hacks do not appear to affect the performance at runtime. And these programs benefit noticeably from the high processing speeds and large RAMs of newer computers.

We'll have to wait and see whether similar methods can be used to get xvoice to work on the next versions of RedHat and other Linux distributions; but the method introduced by Carlo seems to have some generality.

And finally, the powerful facility in xvoice for writing commands to handle frequently occurring cases makes xvoice at least as useful as the standard ViaVoice programs for Windows.

Good luck,
Anthony Jameson