Usage guide
A nice and clean start is using the 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:
In older verions you can achieve the same like so:
If you want logging to be enabled, use this command:
If you don’t want a shell, you can just run the program directly:
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:
By default /home will be mounted inside the rootfs, so you can also run x86 programs from $HOME.
Compatibility
There’s a compatibility list:
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:
Configuration
The configuration file exists at /etc/opt/felix86/config.toml.
You can get a specific config by specifying its group and value, for example: ROOTFS=$(felix86 --get-config general.rootfs_path)
You can set a specific config in a similar fashion, but it requires administrator privileges: felix86 --set-config logging.print_signals=true
To list all configs, use the -c option.
Each configuration has a respective environment variable. These can be discovered by reading the configuration file.
Profiles
You can set per-game profiles, which are useful for enabling TSO or reduced precision for games that need it, among other options.
If you are running a Steam game, refer to Steam game profiles.
For non-Steam games and other executables, you can use a toml file in ~/.config/felix86/profiles/executables.
Let’s say you want to enable some options for Celeste and TEKKEN 7 so that they are automatically applied when those executables run.
Create a file called ~/.config/felix86/profiles/executables/my_profiles.toml and add the settings there. These profiles are parsed in alphabetical order, and the ones that are loaded last override the ones that are loaded first, if multiple profiles target the same executable.
["Celeste.bin.x86_64"]
General.enabled_thunks = "glx,vk,wl"
Performance.unsafe_flags = true
["TekkenGame-Win64-Shipping.exe"]
General.enabled_thunks = "glx,vk,wl"
Performance.unsafe_flags = true
Performance.inaccurate_minmax = true
00-installation-profiles.toml.
There’s also global profiles. Usage:
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 of these profiles is a .toml file in $HOME/.config/felix86/profiles. Each profile is a partial or full version of the config file, with some configurations changed. You may create new profiles and pass them to FELIX86_PROFILE as a name (which will look relative to the profile directory) or as an absolute path.
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 --get-config general.rootfs_path)
# Enter felix86 shell
felix86 --shell
# Go to dxvk directory
cd ~/Downloads/dxvk
export WINEPREFIX=$HOME/.wine
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
Note
This is assuming you have FELIX86_MOUNT_HOME enabled, which is on by default, and that the WINEPREFIX already exists.
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
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:
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.
MangoHud
felix86 has a custom MangoHud fork that shows some JIT-related information. It may be useful for profiling games.
It is based on the MangoHud FEX integration.
Installation
You can use this script to install it:
Usage
You will need to enable thunking: export FELIX86_ENABLED_THUNKS=vk,wl,glx
Enable the stats in the MangoHud and felix86 side:
export MANGOHUD_CONFIG=fex_stats=status+hotthreads+jitload+smc+softfloat
export FELIX86_STATS_ENABLED=1
Set FELIX86_MANGOHUD=1 for Vulkan apps, or use /opt/felix86/bin/mangohud for both OpenGL and Vulkan apps.