Niels Horn's Blog
Random thoughts, tips & tricks about Slackware-Linux, Lego and Star WarsVMware Problems & Solutions
September 28th, 2008 by Niels Horn in Linux, VMware
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…