Unreal Departments

News

Notes

Links

Home  >  Section Title  >  Subsection Title  >  Page Title

Installing Unreal Tournament on Linux

Introduction

Installing Unreal Tournament on Linux can at times seem like a black art. It really isn't so but you do have to understand what it is you have and what you want to do.

This article will focus on the installation of the client or game software. That is for the case where you want to play the game on your Linux system. Installation of the dedicated server software is dealt with in a separate article.

The variables of an Unreal Tournament installation

Unreal Tournament media version

That I know about, there are at least 5 different versions of Unreal Tournament installation media:
Original retail release

These disks were the version of Unreal Tournament originally produced when the game was first released. There are two disks: A game install disk and a 2nd disk containing S3 high resolution textures.

Unreal Tournament GOTY (Game of the Year)

This version of the game was released late in 2000 and contained the original retail release (patched to V4.32), all of the Bonus Packs and some additional user-generated mods (e.g. Chaos UT). I believe that later pressings of this version were patched to the final game patch level (V4.36). None of the versions of UT GOTY that I have came with the second disk of high resolution textures.

Totally Unreal

I don't have any copies of this version of the game but the excellent Liandri Archives suggests that it essentially the same as the UT GOTY edition.

Unreal Anthology

The game is presented on a single DVD along with several other Unreal-series games. The game is essentially UT GOTY edition less the user-generated mods. Again, the high resolution textures are missing. The installer is quite different from the original installers and so installation from Unreal Anthology is somewhat different from that for the other versions

Various OEM versions

These were versons that were bundled with sound or graphics cards, e.g. Creative Labs V4.28. The Windows version of UT has a special patch for these versions. I have no idea if it is possible to install one of these versions onto a Linux-based system other than by using WINE. Sorry.

Linux version

These instructions are based around recent versions of Linux. In general, the examples will be drawn from RHEL-derived versions of Linux e.g. CentOS or Fedora but there is a section on installing on recent Ubuntu versions.
Older versions of Linux will offer better compatibility with the original Unreal Tournament installers but it will be more difficult to get suitable graphics drivers.
The examples will be taken from 32-bit and 64-bit systems. Unless otherwise noted, Unreal Tournament works equally well on 32-bit or 64-bit systems.

Installer version

The original Loki installers do not work on recent versions of Linux due to changes in bash. They are presented here for completeness.

Installing on Ubuntu 10.04

Ubuntu 10.04 removed a number of older system packages that were needed to get the installer running. This guide shows you which packages you will need to install and where to get them from. The instructions have been tested on 32-bit Ubuntu but should work equally well on a 64-bit installation.

Get the correct installer

In this guide, I've used the updated installer packages from my web site. The packages are on this page.

As I'm installing from an original retail release disk, I used this installer: UT 436 Installer

If you are installing from another version of the game, for example, GOTY then make sure that you use the correct installer. Various installers are available on my web site's download page.

Missing dependencies

Ubuntu 10.04 removed a number of older packages that were needed to get the installers running. The missing packages are:
What we will do is install built packages from earlier versions of Ubuntu.

Please note that the packages listed are available in earlier versions of Ubuntu. If you are using an earlier version of Ubuntu and they are not installed then use the package manager to install them (the problem with 10.04 being that the packages cannot be installed using the main package manager directly).

Where to get these packages?

Libglib1.2

The packages we need are found on this page.

The specific package that we are after is this one.

As the above page is a bit confusing, I've provided a separate link (including the source in order to ensure that I remain compliant with the GPL.) You can find that here.

The link contains two files:

Gtk+1.2

The packages that we need are found on this page. We need two packages from that page:
As the above page is a bit confusing, I've provided a separate link (including the source in order to ensure that I remain compliant with the GPL.) You can find that here.

The link contains three files:

Installing the dependencies

Open up a terminal and change to the directory where you've downloaded all of the files. The examples assume ~/Downloads

utuser@utuser-desktop:~$ cd Downloads/

Install libgtk1.2-common

You will use the dpkg command to install the .deb file. As this is a privileged operation, you will need to use the sudo command to run the dpkg command.

utuser@utuser-desktop:~/Downloads$ sudo dpkg -i libgtk1.2-common_1.2.10-18.1build2_all.deb

[sudo] password for utuser:

Selecting previously deselected package libgtk1.2-common.

(Reading database ... 170257 files and directories currently installed.)

Unpacking libgtk1.2-common (from libgtk1.2-common_1.2.10-18.1build2_all.deb) ...

Setting up libgtk1.2-common (1.2.10-18.1build2) ...

Install libglib1.2


As before, you will use the dpkg command to install the .deb file. Again, this is a privileged operation and you will need to use the sudo command to run the dpkg command.

utuser@utuser-desktop:~/Downloads$ sudo dpkg -i libglib1.2ldbl_1.2.10-19build1_i386.deb

Selecting previously deselected package libglib1.2ldbl.

(Reading database ... 170377 files and directories currently installed.)

Unpacking libglib1.2ldbl (from libglib1.2ldbl_1.2.10-19build1_i386.deb) ...

Setting up libglib1.2ldbl (1.2.10-19build1) ...

Processing triggers for libc-bin ...

ldconfig deferred processing now taking place

Install libgtk1.2


As before, you will use the dpkg command to install the .deb file. Again, this is a privileged operation and you will need to use the sudo to run the dpkg command.

utuser@utuser-desktop:~/Downloads$ sudo dpkg -i libgtk1.2_1.2.10-18.1build2_i386.deb

(Reading database ... 170389 files and directories currently installed.)

Preparing to replace libgtk1.2 1.2.10-18.1build2 (using libgtk1.2_1.2.10-18.1build2_i386.deb) ...

Unpacking replacement libgtk1.2 ...

Setting up libgtk1.2 (1.2.10-18.1build2) ...

Processing triggers for libc-bin ...

ldconfig deferred processing now taking place

Running the UT installer


Make sure that UT disk is in the CD Drive and mounted (most modern desktops will automount the CD if you "open" the icon for the CD on the desktop)

Change to the directory where you've downloaded the installer file (again, ~/Downloads is assumed):

utuser@utuser-desktop:~$ cd Downloads/

Make sure that the installer is executable. The example shows the installer for the original retail release. Substitute the correct filename if you are using one of the other installers (e.g. for GOTY).

utuser@utuser-desktop:~/Downloads$ chmod 554 unreal.tournament_436-multilanguage.run

Now run the installer!

utuser@utuser-desktop:~/Downloads$ ./unreal.tournament_436-multilanguage.run
Verifying archive integrity... All good.
Uncompressing Unreal Tournament 436-multilanguage
Installer...................................................................................


The installer GUI should then display. Using that is a topic for a different article.

Thanks to Mr.Maddog for testing these instructions.

Installing with Unreal Anthology

TBD

Installing with the original retail release

TBD

Installing with the UT GOTY edition

TBD

Installing Bonus Packs

TBD

Installing S3 high-resolution textures

TBD

Installing with the UT GOTY edition

TBD

Cheating - Installing using WINE

Wine is an Open Source implementation of the Windows API on top of X, OpenGL, and Unix.

The most common versions of Unreal Tournament are rated Platinum on the WINE Application Compatability Database which means that Unreal Tournament is an application that "installs and run flawlessly on an out-of-the-box Wine installation."

Good news!

If you have an OEM copy of UT e.g. the Creative Labs V4.28 version then you can install it using WINE and then patch it to V4.36 using the NODELTA patch available on the downloads page.

Do you have WINE installed?

First of all, it is necessary to check that you have WINE installed.

On a Redhat or Redhat-derived system (e.g. CentOS or Fedora), this done by querying RPM. If WINE is installed, you should see a display similar to that shown below (version numbers might differ slightly.) Note that you do not need to be root to query or to install UT under WINE.

[utuser@margrave07 ~]$ rpm -qa|grep -i wine
wine-jack-1.0-0.rc2.el5.rf
wine-nas-1.0-0.rc2.el5.rf
wine-1.0-0.rc2.el5.rf
wine-esd-1.0-0.rc2.el5.rf
wine-capi-1.0-0.rc2.el5.rf
wine-twain-1.0-0.rc2.el5.rf
wine-cms-1.0-0.rc2.el5.rf
wine-ldap-1.0-0.rc2.el5.rf
wine-core-1.0-0.rc2.el5.rf
[utuser@margrave07 ~]$


Installing WINE

On the system that I am using, I did not have WINE installed. For a (recent) Redhat-derived system, it is a simple matter to install WINE (yum install wine). Notice that it is only necessary to be root to install WINE using the system package management application. Once WINE has been installed, you should drop back to a normal user account. The remainder of these instructions assume that the installation of UT is carried out from a non-privileged account.

[utuser@margrave07 ~]$ su -l root
Password:
[root@margrave07 ~]# rpm -qa|grep -i wine
[root@margrave07 ~]# yum install wine
Loading "changelog" plugin
Loading "protectbase" plugin
Loading "priorities" plugin
Loading "fedorakmod" plugin
Loading "installonlyn" plugin
Loading "kernel-module" plugin
Loading "fastestmirror" plugin
Setting up Install Process
Setting up repositories
extras 100% |=========================| 1.1 kB 00:00
rpmforge 100% |=========================| 1.1 kB 00:00
base 100% |=========================| 1.1 kB 00:00
updates 100% |=========================| 951 B 00:00
addons 100% |=========================| 951 B 00:00
adobe-linux-i386 100% |=========================| 951 B 00:00
Determining fastest mirrors
Reading repository metadata in from local files
210 packages excluded due to repository protections
0 packages excluded due to repository priority protections
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for wine to pack into transaction set.
wine-1.0-0.rc2.el5.rf.i38 100% |=========================| 2.5 kB 00:00
---> Package wine.i386 0:1.0-0.rc2.el5.rf set to be updated
--> Running transaction check
--> Processing Dependency: wine-nas = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-esd = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-twain = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-cms = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-ldap = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-core = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-capi = 1.0-0.rc2.el5.rf for package: wine
--> Processing Dependency: wine-jack = 1.0-0.rc2.el5.rf for package: wine
--> Restarting Dependency Resolution with new changes.
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for wine-twain to pack into transaction set.
wine-twain-1.0-0.rc2.el5. 100% |=========================| 2.9 kB 00:00
---> Package wine-twain.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-jack to pack into transaction set.
wine-jack-1.0-0.rc2.el5.r 100% |=========================| 2.8 kB 00:00
---> Package wine-jack.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-esd to pack into transaction set.
wine-esd-1.0-0.rc2.el5.rf 100% |=========================| 2.9 kB 00:00
---> Package wine-esd.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-core to pack into transaction set.
wine-core-1.0-0.rc2.el5.r 100% |=========================| 82 kB 00:00
---> Package wine-core.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-cms to pack into transaction set.
wine-cms-1.0-0.rc2.el5.rf 100% |=========================| 2.9 kB 00:00
---> Package wine-cms.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-nas to pack into transaction set.
wine-nas-1.0-0.rc2.el5.rf 100% |=========================| 2.8 kB 00:00
---> Package wine-nas.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-capi to pack into transaction set.
wine-capi-1.0-0.rc2.el5.r 100% |=========================| 2.8 kB 00:00
---> Package wine-capi.i386 0:1.0-0.rc2.el5.rf set to be updated
---> Downloading header for wine-ldap to pack into transaction set.
wine-ldap-1.0-0.rc2.el5.r 100% |=========================| 2.9 kB 00:00
---> Package wine-ldap.i386 0:1.0-0.rc2.el5.rf set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
wine i386 1.0-0.rc2.el5.rf rpmforge 3.0 k
Installing for dependencies:
wine-capi i386 1.0-0.rc2.el5.rf rpmforge 16 k
wine-cms i386 1.0-0.rc2.el5.rf rpmforge 66 k
wine-core i386 1.0-0.rc2.el5.rf rpmforge 35 M
wine-esd i386 1.0-0.rc2.el5.rf rpmforge 43 k
wine-jack i386 1.0-0.rc2.el5.rf rpmforge 13 k
wine-ldap i386 1.0-0.rc2.el5.rf rpmforge 252 k
wine-nas i386 1.0-0.rc2.el5.rf rpmforge 12 k
wine-twain i386 1.0-0.rc2.el5.rf rpmforge 23 k

Transaction Summary
=============================================================================
Install 9 Package(s)
Update 0 Package(s)
Remove 0 Package(s)

Total download size: 35 M
Is this ok [y/N]: y
Downloading Packages:
(1/9): wine-twain-1.0-0.r 100% |=========================| 23 kB 00:00
(2/9): wine-jack-1.0-0.rc 100% |=========================| 13 kB 00:00
(3/9): wine-esd-1.0-0.rc2 100% |=========================| 43 kB 00:00
(4/9): wine-core-1.0-0.rc 100% |=========================| 35 MB 00:52
(5/9): wine-cms-1.0-0.rc2 100% |=========================| 66 kB 00:00
(6/9): wine-nas-1.0-0.rc2 100% |=========================| 12 kB 00:00
(7/9): wine-capi-1.0-0.rc 100% |=========================| 16 kB 00:00
(8/9): wine-1.0-0.rc2.el5 100% |=========================| 3.0 kB 00:00
(9/9): wine-ldap-1.0-0.rc 100% |=========================| 252 kB 00:00
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: wine-core ######################### [1/9]
Installing: wine-twain ######################### [2/9]
Installing: wine-jack ######################### [3/9]
Installing: wine-esd ######################### [4/9]
Installing: wine-cms ######################### [5/9]
Installing: wine-nas ######################### [6/9]
Installing: wine-capi ######################### [7/9]
Installing: wine-ldap ######################### [8/9]
Installing: wine ######################### [9/9]

Installed: wine.i386 0:1.0-0.rc2.el5.rf
Dependency Installed: wine-capi.i386 0:1.0-0.rc2.el5.rf wine-cms.i386 0:1.0-0.rc2.el5.rf wine-core.i386 0:1.0-0.rc2.el5.rf wine-esd.i386 0:1.0-0.rc2.el5.rf wine-jack.i386 0:1.0-0.rc2.el5.rf wine-ldap.i386 0:1.0-0.rc2.el5.rf wine-nas.i386 0:1.0-0.rc2.el5.rf wine-twain.i386 0:1.0-0.rc2.el5.rf
Complete!
[root@margrave07 ~]#exit

Again, the exact versions of the packages might differ slightly depending on the Linux distributuion, software repository and the currently shipping version of WINE.
If you are using a non RPM-based system like Ubuntu, then something like apt-get install wine run as root might work but I haven't tested that combination.

Installing UT

The sequence shown below is for an installation of an original retail version of UT. That installs UT at V4.00 and it will require patching to bring it up to V4.36.

The sequence is
The reason that the patch is applied twice is that the Bonus Packs will not install properly on a V4.00 installation.

Most of the pictures below show an installation using KDE. It is not a requirement to use KDE to install UT. KDE was used because that's what I use.

Before installing UT, I installed the latest (in my case) NVIDIA graphics drivers (see later). You should do that before attempting to install UT otherwise you will have to use the software rendering mode.

Put UT disc 1 into your CD/DVD drive.

The disk should automount on your desktop as so:

UT_CD1_400D icon image on KDE desktop

A similar icon will appear if you are using Gnome. Right-click on the disk icon and select open. A Konquerer window should open showing you the content of the drive. If it does not then you will have to manually mount the disk and open the disk to look at the contents.

Once you have opened a view on the disk, select setup.exe and right-click with the mouse. Select Open with and then Wine Windows Emulator as shown:

Konquerer window showing setup.exe being opened with WINE

That will cause the standard Windows-based UT installer to open as shown:

Unreal Tournament - opening setup screen Unreal Tournament - mature content warning screen Unreal Tournament - default install location setup screen

You should accept the default options and keep hitting next.

On the fourth screen, you should deselect the option to install DirectX as shown:

Unreal Tournament - install component selection screen. DirectX not selected.

Select next and proceed to the installation confirmation screen as shown:

Unreal Tournament - Final confirmation screen before installing

Select Install and a screen like that shown below should appear. Now is a good time to go and make that cup of coffee that you promised yourself.



When the installation has completed, you should see a display like that below:

Unreal Tournament - Installation finished screen

Select Finish and the window should close. The initial installation of Unreal Tournament is complete.

Patching UT

Unless you have a strange nostagia for the original release version of Unreal Tournament, there is no point in not patching the game. If you do not patch the game then you will be unable to join most servers.

First of all, you will need the relevant patch. Just save it to your desktop. The examples shown below assume that is what has been done.
The examples shown below are for the standard patch. Behaviour for the OEM patch should be similar but I am unable to test that.
Right-click on utpatch436.exe and select Open with and then Wine Windows Emulator as shown:

Selection of UT 436 patch to open with WINE

That will cause the standard Windows-based UT installer to open as shown:

Unreal Tournament Patch set-up first page

You should accept the default options and keep hitting next.



Unreal Tournament Patch set-up - destination folder screen Unreal Tournament Patch set-up - CD-ROM selection screen

If you see the error shown below then one of two things has happened:- Files not found on CDROM error image

Once you have passed the CD check, it should be plain sailing. The following sequence of screens will appear:

Ready to install page for the patch Installing files page for the patch

Select Finish to finish the install of the patch.

Installing the UT Bonus Packs

There are four bonus packs to enjoy. You'll find them on the Downloads page.
For the purposes of this installation, I'll assume that you have downloaded them to the desktop of account that you are using to play UT.

Patching UT again

TBD

Configuring UT to run under WINE

TBD

Upgrading OpenGL in WINE

TBD

Installing S3 high-resolution textures

TBD

Graphics Drivers

TBD

Fixing the usual problems

UT is too fast/too slow/stutters

A common (almost certain) problem on modern machines is that UT will be too fast or too slow or suffer from intermittent stuttering.

Reports vary about the effacy of the various solutions. All I can suggest is that you work your way through the options until the problem goes away. Solutions should be added together, not tried in isolation.
CPUSPEED

UT is not very good at understanding the processor speed of a modern processor.
This is solved by using a command line option to tell UT the clock speed of the processor. The value used should be the true clock frequency and not the marketing-speak CPU speed. For example, an x2AMD5200 processor will have a true clock speed of approximately 2.6GHz. The value of the command line parameter for that processor will be 2600. The value is obtained by multiplying the CPU clock frequency in GHz by 1000. For example:
Clock frequency (GHz) CPUSPEED=
2.0GHz 2000
2.4GHz 2400
0.9GHz (900MHz) 900

In MS Windows, for the above example AMD5200 CPU (clock speed 2.6GHz), the CPU speed is set by adding -CPUSPEED=2600 to the shortcut used to start UT.
Powersaving options
Speedstep (Intel) and Cool'n'Quiet options cause the CPU clock rate to vary according to the CPU load, temperature and power mode.

These confuse UT and need to be disabled whilst playing UT. Typically, these options will be found in the BIOS and as part of utilities like KPowersave.

TBD - enabling and disabling. Using kernel options to disable power saving (acpi=off), power management daemons.
Processor affinity
In a multi-CPU system (i.e. most modern systems), UT can stutter as a result of the UT task being switched between CPU.
The following discussion applies to 2.6 (and later) Linux kernels. Partly because older systems that would run 2.4 series kernels tend not to be multi-CPU (says the man who owns a 4-way Pentium Pro system) and partly because setting hard processor affinity is a 2.6 kernel feature (although, back-ported to some 2.4 kernels).

The Linux 2.6 series kernel does a pretty good job of trying to keep a task scheduled always on the same CPU (soft affinity). In order to avoid the stuttering associated with moving the UT task between CPUs, it may be necessary to enforce hard affinity. The easiest way to do that is to use schedutils.
The manner in which schedutils is installed seems to vary between distributions. In some, schedutils is a separately installable item, in others, it is installed as a dependency and not separately installed.

[root@margrave01 ~]# rpm -qa|grep -i schedutils

Looks like it needs to be installed!

[root@margrave01 ~]# yum -y install schedutils
livna | 2.1 kB 00:00
fedora | 2.1 kB 00:00
adobe-linux-i386 | 951 B 00:00
updates | 2.3 kB 00:00
Setting up Install Process
Parsing package install arguments
Requested dep: schedutils is provided by installed package
Nothing to do


OK...so it seems that it has been installed as part of something else...

[root@margrave01 ~]# yum whatprovides schedutils
util-linux-ng.x86_64 : A collection of basic system utilities
util-linux-ng.x86_64 : A collection of basic system utilities
util-linux-ng.x86_64 : A collection of basic system utilities


So, depending on your Linux distribution, you will need to either install schedutils directly:

[root@margrave01 ~]# yum -y install schedutils

#apt-get install schedutils

or, install the containing package:

[root@margrave01 ~]# yum -y install util-linux-ng

The key component in schedutils is the command taskset.

taskset can be used to set the processor affinity of an existing task or used to spawn a new task with a defined processor affinity.

There are two ways of using taskset. The first is to set the PID of an existing UT instance that you have running and the second is to modify the UT invocation scripts to use taskset to launch UT.

To set the processor affinity of an existing task, it is necessary to find the Process IDentification (PID) of that task. That is done by executing,

# ps ax | grep TBD_String

The output will look similar to:

TBD

The PID of the UT task is the first number on the left of the output.

TBD - set existing affinity
TBD - modify UT start script to use taskset
TBD - using Windows Task Manager to set processor affinity.
Dual-core utilities
TBD
Frame rate and VSync
A modern system can run UT with framerates far in excess of 200fps. That causes problems with the game running too fast with local play and irregular framerates with network play. Two options exist:

Making the old installers work

TBD

If you have comments or questions, please contact me at IronMonkey. Thanks!