Setup WebEx on 64 bit Ubuntu 12.04 using 32 bit Oracle Java

WebEx would not work on Ubuntu 12.04 64 bit with default configuration. It requires 32 bit java. WebEx control window would launch but desktop sharing, application sharing, white-board etc. do not show up. Neither I could see other people’s shared content nor I could share mine even if I am the host of the meeting.

Starting Firefox from command line on a terminal shows ELFCLASS32 error from WebEx shared objects. So it was clear that WebEx would not work on 64 bit system as is and would need 32 bit java to work. Because I use 64 bit system I do not want to downgrade to a 32 bit version just for the sake of WebEx.

In brief, these three steps cover the fix.

  1. Install 32 bit Oracle Java locally. Oracle Java is must and OpenJDK would not cut. Warning: because it is local installation, user would need to manually keep on updating as new java becomes available. Recently there have been many releases from Oracle which came with very little time in between addressing major security issues so this would be concerning.
  2. Install Firefox locally so it can be configured to use this 32 bit java. Add a different profile and use a different theme so it does not conflict with the native Firefox and clearly stands out if both are running.
  3. (Optional) Add shortcut in Unity HUD for quick access.

Following are some errors thrown by WebEx shared objects during loading by 64 bit java indicating that WebEx uses 32 bit objects.

java.lang.UnsatisfiedLinkError: /home/unixite/.webex/1124/libdbr.so: /home/unixite/.webex/1124/libdbr.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1935)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1860)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1834)
        ...
java.lang.UnsatisfiedLinkError: /home/unixite/.webex/1124/libatdv.so: /home/unixite/.webex/1124/libatdv.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1935)
        at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1860)
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1834)
        ...

Setup 32 bit Oracle Java and Firefox

Instead of downgrading Java on the system to 32 bit or installing Oracle Java, I resorted to installing exactly what WebEx needs locally. Download right version of java from Oracle. I got the latest one available (at the time of writing).

WebEx-Java-Download

Then download Firefox. Again get the latest one.

Now we have to decide a directory where we extract what we downloaded. I created directory 32bit in my home directory for this. Under that Java and Firefox and then extracted what I downloaded before.

mkdir ~/32bit
tar -C ~/32bit -zxf ~/Downloads/jre-7u17-linux-i586.tar.gz
tar -C ~/32bit -jxf ~/Downloads/firefox-19.0.2.tar.bz2

After this we have to configure our new Firefox to use 32 bit java plugin instead of what the system provides. [Note: Patrick and Ed mentioned that with Firefox v21 the path has slightly changed and following softlink has to be created in ~/32bit/firefox/browser/plugins. I had installed firefox 19 which got upgraded to 21 as the new updates came in and for me the old link in plugins directory is still working. There is no browser directory in my installation either. Maybe if I do a fresh install things change. But in case following link does not work then try to create the link in ~/32bit/firefox/plugins/libnpjp2.so as suggested by fellow readers.]

mkdir ~/32bit/firefox/plugins
ln -s ~/32bit/jre1.7.0_17/lib/i386/libnpjp2.so ~/32bit/firefox/plugins/libnpjp2.so

Setup Execution Script and test

Now we setup a script to start our new Firefox which uses this 32 bit java. I call it WebEx.sh because I would use it mostly for WebEx.

#!/bin/bash
export ENV_HOME_32=~/32bit
### Change following to correct jre location (based on which version you installed)
export JAVA_HOME=$ENV_HOME_32/jre1.7.0_17

export FIREFOX_HOME=$ENV_HOME_32/firefox
export PATH=$FIREFOX_HOME:$JAVA_HOME/bin:$PATH

# Invoke Firefox finally, make sure to use --no-remote to make sure that it does
# not try to use other instances which might be 64 bit. Also use -P to load
# WebEx profile.
firefox --no-remote -P WebEx

You may get another error when you run this script for the first time and you do not have ia32-libs installed on your system. If following error comes up install it using “sudo apt-get install ia32-libs” and let it install its dependencies. These are installed on system level but used only when some application explicitly needs them.

XPCOMGlueLoad error for file /home/unixite/32bit/firefox/libxpcom.so: libxul.so: cannot open shared object file: No such file or directory Couldn't load XPCOM.

During first run, it will bring up Profile Manager, so you can set a profile called WebEx (or something else as you like and then use same name in the script above with -P flag). Make sure to have “Don’t ask at startup” selected so next time Profile Manager would not show up. If all goes good, you have Firefox running now . It could throw ELFCLASS64 errors for other plugins that you may have used (google talk/voice, flash, totem and libgnome-shell-browser-plugin to name a few), but they are least of our worries if we use this instance for WebEx only. You could always disable them for WebEx profile if they complain too often. Lets verify if we got the right version of java setup now by visiting Java test page in this new browser. You should see 32 bit java listed.

WebEx-Java-Verification

At this point verify if WebEx is running fine. I also added a different theme to WebEx Firefox profile so it clearly stands out.

Add a shortcut in HUD (optional)

Final step is to add a shortcut for our script. Either you can add a desktop icon or in launcher but I prefer in dash or HUD. Here is how to add a custom script in Unity HUD. As root create /usr/share/applications/webex.desktop with following content and run update-desktop-database. I also downloaded an image for WebEx and used here as Icon which is optional. After this I can press Window/HUD key and type WebEx to get access to just installed version of Firefox.

[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
StartupNotify=true
Icon=/home/unixite/32bit/webex.jpeg
Name=WebEx
Comment=32 Bit firefox for WebEx
Exec=/home/unixite/32bit/WebEx.sh
Categories=Application;Productivity;Collaboration