Sunday, September 28, 2008

VMware Problems & Solutions

I am a big fan of VMware and virtualization in general.
At work we use the professional version to install servers that are only used a couple of hours a week, like systems for testing new releases of software etc.
At home I use the free vmware-server-1.0.7 version to test new releases of software, different operating systems, etc. I used to have several desktops for testing, taking up a lot of space. Now I create and delete virtual machines on my desktop that has lots of hard disk space.
After upgradingmy Slackware 12.1-current with the latest versions of libX11 (1.1.5) and gtk2 (2.12.12) VMware stopped working and presented this error:

vmware: xcb_lock.c:77: _XGetXCBBuffer: Assertion `((int) ((xcb_req) - (dpy->request)) >= 0 )' failed.

After some research and testing combinations of the previous versions of libX11 and gtk, I found the following solution:
1) Compile an alternative version of libX11 that does not use xcb
2) Always start VMware using this alternative library

The following script downloads the source code of libX11, compiles it with the '--without-xcb' option and creates a start-up script to use this version with VMware:

#!/bin/bash
#
# vmware_no_xcb Script to compile alternative libX11 library
# (without xcb) for vmware with gtk2 > gtk+2-2.12.9
#
# Version: 1.0.1 - Sun, Sep 21, 2008
#
# Author: Niels Horn
#

# Set constants:
libver=libX11-1.1.5
destlib=/usr/local/bin/vmware_no_xcb
destbin=/usr/local/bin

# Download sources from xorg.freedesktop.org:
test -e $libver.tar.bz2 || wget -c http://xorg.freedesktop.org/archive/individual/lib/$libver.tar.bz2

# Clean old dir and extract sources:
rm -rf $libver
tar xjf $libver.tar.bz2

# Create destination for new lib & new startup script:
mkdir -p $destlib
mkdir -p $destbin

# Go into sources dir, configure, compile & strip:
cd $libver
   ./configure --without-xcb
   make -j 2
   strip src/.libs/libX11.so.6.2.0

# Copy new lib to destination & create symlinks:
   cp src/.libs/libX11.so.6.2.0 $destlib
   ln -s libX11.so.6.2.0 $destlib/libX11.so.6
   ln -s libX11.so.6.2.0 $destlib/libX11.so

# Create startup script, using new lib, and make executable:
   echo -e "LD_PRELOAD=$destlib/libX11.so vmware" > $destbin/vmware-start.sh
   chmod 755 $destbin/vmware-start.sh

# Leave sources dir & remove:
   cd ..
rm -rf $libver

# All done. From now on, use 'vmware-start.sh' to start vmware

Substitute the libver, destlib & destbin variables with your preferences and run this script to do the rest for you.
From then on, start VWware with 'vmware-start.sh' to call your new libX11 library.

This works with the 1.0.x versions of VMware. The new 2.x versions are a completely different story for me, but that's for a future post...

Labels: ,

5 Comments:

Anonymous Anonymous said...

Thanks Niels, I've followed your instructions and the library is built correctly. However, the vmware interface still doesn't start up. Without your script I get a slight flash of a window being created and then destroyed and then the following console message:
vmware: xcb_lock.c:77: _XGetXCBBuffer: Assertion `((int) ((xcb_req) - (dpy->request)) >= 0)' failed.

If I use your script, it just returns to the console and nothing happens. I've also tried editing wrapper-gtk24.sh to add the lib directly there but no difference. I've tried running it as a normal user and as root but no difference. /tmp/vmware-user*.log indicates:
Nov 04 21:41:38: vmui| Log for VMware Server pid=14888 version=1.0.7 build=build-108231 option=Release
Nov 04 21:41:38: vmui| Gdk: locale not supported by Xlib
Nov 04 21:41:38: vmui| Gdk: can not set locale modifiers
Nov 04 21:41:38: vmui| Gtk: cannot open display:
Any assistance appreciated. Regards, Robby

November 4, 2008 at 5:46 PM  
Blogger niels.horn said...

rpedrica:
My script should be run as root, and then you should start VMware with the newly created "vmware-start.sh" as the user that logged in to X (other users, including root, won't be able to open a display).

November 5, 2008 at 9:24 AM  
Anonymous Anonymous said...

Sorry Niels, to clarify, I've run the script using root and starting vmware using kdesu ..

November 7, 2008 at 1:21 PM  
Blogger niels.horn said...

Running the script as root was fine, but afterwards you should start VMware as a normal user, with vmware-start.sh, not with kdesu.

November 9, 2008 at 1:58 PM  
Blogger Melissa said...

Trying it with slack12.2 and Server 1.0.8. I run the script as root, and execute vmware-start.sh as the user (non root) who is logged in KDE. I get the same msg in the log file as rpedrica:

bash-3.1$ cat ui-6828.log
Feb 12 15:12:23: vmui| Log for VMware Server pid=6828 version=1.0.8 build=build-126538 option=Release
Feb 12 15:12:23: vmui| Gdk: locale not supported by Xlib
Feb 12 15:12:23: vmui| Gdk: can not set locale modifiers
Feb 12 15:12:23: vmui| Gtk: cannot open display:

Any other suggestions? --I may try 1.0.7 instead.

February 12, 2009 at 6:15 PM  

Post a Comment

Subscribe to Post Comments [Atom]

<< Home