With the increasing popularity in the
Linux operating system there are more and more people who want their
current PC applications to run on their favorite Linux distribution.
While adequate (and often superior) alternatives exist for the most
common windows applications, PC games are still largely restricted
to the windows platform. Still, hope is not lost. This article will
detail how to install and run Ultima Online on the Linux operating
system (currently the 2D client is the only one that works, and UOAssist
does not work).
|Ultima Online on Linux by Hugo of Napa Valley
There is more than one possible way to run UO on Linux. A PC emulator
could be used to run the windows OS in Linux. Examples of this include
the bochs open source project
and the commercial VMWare product.
Another solution would be the Wine project, which I will be focusing
on for this article. Currently, Wine seems to be the simplest solution,
and it has been found to work quite well.
The distribution used to develop this article was the Fedora Core 1 release. Since
Fedora is an RPM-based distribution, the instructions given here
will refer to the installation of RPMs. If you are using a non-RPM-based
distribution you will have to tweak these instructions for your
circumstances. The instructions here are fairly straight-forward,
and altering then for different distributions should not be difficult.
An important thing to remember is that OSI does not officially
(or unofficially for that matter) support UO running on Linux. Please
be aware that any issues you may have while running UO on Linux
could be an incomparability issue between UO and the Linux platform.
Wine is an Open Source project
that allows Linux users to run windows programs on top of XWindows
and Linux. The Wine homepage
describes the project in more detail. (Also of interest is the WineX
product from TransGaming Technologies. WineX is a commercial
product, which I don't currently own. If I decide to buy WineX I
will post my results of running UO on it).
Since Fedora Core 1 does not come with Wine, I will cover its
installation in detail. Your distribution might ship with Wine.
If you already have Wine installed, you can skip down to the section
on configuring wine below. If you have an older version of Wine
installed, you may want to upgrade.
Downloading and Installing Wine
To start, download Wine for your distribution. Wine distribution
is managed on SourceForge. The
Wine download page lists all of the packages that are available
including binary packages for a wide variety of distributions. The
source is also available if you want to download and compile Wine,
but that is beyond the scope of this article.
The Fedora releases are with the RedHat packages. At the time of
writing, the latest release was 20040121. The RPM used is wine-20040121-1fc1winehq.athlon.rpm.
Note there are several architecture specific releases for each distribution
(the 'athlon' part). Download the correct one for your specific
CPU. If in doubt, download the 'i386' version.
Another very useful package is the Winesetuptk application. It
makes the initial creation of the wine configuration file very easy.
The RPM (winesetuptk-0-72.i586.rpm) is found in the Support
The Wine installation is now as easy as installing these RPMs.
This will have to done as the root user:
# rpm -Uvh wine-20040121-1fc1winehq.athlon.rpm
# rpm -Uvh winesetuptk-0-72.i586.rpm
Configuring Wine can be done with the winesetuptk application.
This should be run as a regular (non-root) user. As a user run (you
should be in XWindows at this point):
The defaults should work for just about everybody. Check all of
the categories and configuration parameters to ensure you are happy
with the default value. There are a couple important things to note:
- If you change the location of the config file from the default,
you will also have to tell wine where to find it.
- Ensure the 'C Drive' and the tmp drive are both on local drives
(i.e. avoid putting it on an NFS mount)
- Ensure the CDROM drive points to the correct mount point for
your CDROM drive (this is usually /mnt/cdrom)
When you are satisfied with the configuration values select "Finish"
to exit and write out your configuration file.
Installing UO in Wine
Installing UO into Wine is simply a matter of running the installation
program. Insert the UO CD into your CDROM drive and make sure the
CDROM is mounted (I used the Age Of Shadows CDROM).
Run the installation program. This can be done with either of
the following commands (if you have your CDROM mounted elsewhere
or mapped differently in wine you will have to adjust these commands):
$ wine /mnt/cdrom/Setup2D.exe
$ wine "D:\Setup2D.exe"
NOTE: Normally we would run Install.exe. However, it doesn't
work in Wine (feel free to try it and see if you get better results
than I did). Running the Setup2D.exe program ultimately installs
the 2D client.
At this point in the installation I came across my first real
problem. As it turns out, there is an issue with a kernel feature
in Fedora Core 1 that affects Wine. If you came across an error
message about a "security-patched kernel" please see the Prelink Issue Workaround below.
If you are fortunate enough to avoid this issue, continue on.
Install UO as you normally would on windows. I have assumed all
of the defaults for the UO install.
You'll notice during the installation process that there are a
few odd visual artifacts that shouldn't be there. For example, the
"Total Installation" label runs over the CDROM image as well as
the progress bar. I'm not sure if there is a way to improve on this.
It's not that important at this point, but when we get to the patcher
we will see some more issues like this.
When prompted with the "re-install DirectX 8.1" dialog click "No"
The "Create Account" button opens the web browser, which doesn't
work, and I suspect you already have an account created.
When prompted with "Run UO: AOS" or "Exit Installer" you can do
either. Running AOS will start the initial patch process, which
will be done the first time you run UO. You probably want to actually
see UO at this point, so hit the "Run UO: AOS" button and continue
with the First Launch.
The first time you run UO the patch process will startup. Notice
that you will start out with the old-style (plain text) message
window. Continue as you would normally.
At some point the new patch window will open up. Now we see a few
more of those 'visual artifacts' mentioned previously. I believe
this window uses the MSIE browser functionality that's built into
windows. Wine doesn't have this, so you'll get a text version of
the Patch Message
Once the patching is finished the "OK" button will become enabled.
Click it to get past the patch window and startup UO.
After First Launch
To Run UO in the future, use the following command:
$ wine "C:\Program Files\Ultima Online 2D\UO.exe"
The file "uo.exe" is not actually the game client. It takes care
of running the patch program and then launching the client. If you
run uo.exe you will notice a little "untitled window" hangs around
when you are playing. This is the "uo.exe" application. If you want
to get rid of this window, and you know that UO is all patched up,
you can start UO using this command:
wine "C:\Program Files\Ultima Online 2D\client.exe"
Enjoy UO on Linux
Hopefully these instructions will be enough to allow you to enjoy
UO on Linux. If you have any problems or interesting things to report
please feel free to send me an email to hugo at its dot to.
The actual error message for this issue is:
err:virtual:map_image Standard load address for a Win32
program (0x00400000) not available - security-patched kernel ?
wine: could not load L"C:\\Program Files\\Ultima Online 2D\\client.exe"
as Win32 binary
More information about this issue is available on
the Codeweavers forum. There seems to be a number of possible
workarounds for this issue, but I have had mixed results with most
The workaround I have the most success with is by executing the
following commands (as root):
# echo 0 > /proc/sys/kernel/exec-shield # echo 0 > /proc/sys/kernel/exec-shield-randomize
This fix has to be done after every reboot. You can either do
it manually every time you boot into Linux, or put it in a startup
script. Hopefully a better solution will present itself soon.
Once you have dealt with this issue you can continue with the install.