Skip to content

Usage guide

A nice and clean start is using the felix86 shell:

felix86 --shell

This will disable logging and start a bash or zsh shell with a custom prompt.

In felix86 26.08 and later, you can start a program with the –shell command, which runs it via bash -c or zsh -c, which means it can find your binary in PATH:

felix86 --shell="steam -no-cef-sandbox"

In older verions you can achieve the same like so:

felix86 /path/to/rootfs/bin/bash -c "steam -no-cef-sandbox"

If you want logging to be enabled, use this command:

felix86 --shell-debug

If you don’t want a shell, you can just run the program directly:

felix86 /path/to/rootfs/usr/bin/nano

If installed in binfmt_misc (handled by install script, or with sudo -E felix86 -b) you can simply run x86 programs that are inside the rootfs:

/path/to/rootfs/MyGame.AppImage

By default /home will be mounted inside the rootfs, so you can also run x86 programs from $HOME.

Compatibility

There’s a compatibility list:

https://felix86.com/compat/

If you want to try a game that is not listed, you can make a compatibility report here:

https://github.com/felix86-emu/compatibility-list/issues

Thunking

There’s thunking support for GLX (OpenGL on X11) and Vulkan. You can enable it using FELIX86_ENABLED_THUNKS=glx,vk. This should improve performance in games.

Desktop shortcuts

Desktop shortcuts in Linux are usually XDG Desktop Entry specification files.

The shorcuts usually exist in the host desktop, since the host $HOME is mounted in the guest $HOME, but the binary usually exists inside the rootfs, not the host filesystem. Even if it does exist in the host filesystem, it may be a script that needs to be explicitly run with the x86 bash, so that filesystem accesses are resolved relative to the rootfs.

In order to be able to use it like a normal shortcut, we need to wrap the executable with felix86 --shell="...".

Here’s a sed one-liner that makes a desktop entry run with felix86:

sed -i -E 's/^Exec=(.*)$/Exec=felix86 --shell="\1"/' myshortcut.desktop

Profiles

You can use different execution profiles that set multiple configurations at once.

Usage:

FELIX86_PROFILE=extreme felix86 --shell

There’s currently the following profiles:

  • extreme - Enables all optimizations, may break some games that rely on TSO.
  • safe - Enables safe optimizations and TSO mode.
  • paranoid - Disable almost all optimizations and enable some slow safety checks.
  • zink - Enables Vulkan thunking and Zink usage in Mesa.

Each profile is a .toml file in $HOME/.config/felix86/profiles. Each profile is a partial or full version of the $HOME/.config/felix86/config.toml file, with some configurations changed.

DXVK

Installing DXVK is as simple as installing it on your host system:

# Set $ROOTFS to the rootfs absolute path for convenience
export ROOTFS=$(felix86 -g)

# Copy DXVK release inside rootfs
cp -r /path/to/dxvk-release $ROOTFS/tmp/

# Enter felix86 shell
felix86 --shell

# Usually export WINEPREFIX="$HOME/.wine"
export WINEPREFIX=/path/to/wineprefix
cd /tmp/dxvk-release
cp x64/*.dll $WINEPREFIX/drive_c/windows/system32
cp x32/*.dll $WINEPREFIX/drive_c/windows/syswow64

# Run winecfg from inside felix86 shell and add native DLL overrides for
# d3d8, d3d9, d3d10core, d3d11, dxgi.
winecfg

Make sure to enable Vulkan thunking for better performance:

# Needs to be exported before entering felix86 shell
export FELIX86_ENABLED_THUNKS=vk
felix86 --shell

gl4es

gl4es allows for using OpenGL on iGPUs in RISC-V boards, as those GPUs don’t support desktop OpenGL.

The iGPUs suck

Use a discrete GPU, if possible, as they tend to have way better Linux support and performance. When using a discrete GPU gl4es is not necessary.

You can download a prebuilt version of gl4es: https://cdn.felix86.com/misc/gl4es/gl4es.zip

To build gl4es from source, follow the instructions below.

sudo apt update
sudo apt install libx11-dev
git clone https://github.com/ptitSeb/gl4es
cd gl4es
cmake -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
cmake --build build -j$(nproc)

Installation

Install the library to a known host location, such as /opt/felix86/gl4es/. From the directory that contains the unzipped/built libGL.so.1, run the following:

export INSTALLATION_DIR="/opt/felix86/gl4es"
sudo mkdir -p $INSTALLATION_DIR
sudo mv ./libGL.so.1 $INSTALLATION_DIR

Make sure to symlink libGLX.so.0, as gl4es exports the libGLX symbols:

sudo ln -s libGL.so.1 "$INSTALLATION_DIR/libGLX.so.0"

Usage

In order to use gl4es you need to set LD_LIBRARY_PATH and enable thunking:

export INSTALLATION_DIR="/opt/felix86/gl4es"
export SDL_VIDEODRIVER=x11 # may be required for some games
export FELIX86_ENABLED_THUNKS=glx,egl
export LIBGL_NOBANNER=1
export LD_LIBRARY_PATH="$INSTALLATION_DIR:$LD_LIBRARY_PATH"
felix86 --shell

Warning

There’s currently no 32-bit thunking, so you need to try 64-bit games if you want to use the iGPU. A discrete GPU, like an AMD one, will be able to use the x86 drivers and not require thunking, so 32-bit games will work fine with a discrete GPU.