A guide to installing osu! on Linux
Yes! Yet another guide on installing osu! on Linux; This will be a little subjective as I basically explain the steps I go through myself and not necessarily a universal general guide, but at the end you'll have a well working osu! install.
These instructions will work best with an Arch Linux based distro.
We will be using fsync, so make sure you use a Linux kernel that supports this feature. Tip: linux-zen and the kernel that comes with Manjaro (<5.10) have the fsync patch.
In my experience, with my hardware, without fsync osu!'s frametime on Wine will be just a little worse than on Windows. fsync will bring it back up on par with Windows.
- I use Pipewire but Pulseaudio will probably be fine too. Although I will mention an optional audio setting that applies to Pipewire.
While you could definitely just install osu-wine
with no additional modifications which is extremely simple (like 3 copy-pasted terminal commands) and have a decent experience (especially as a beginner to the game who won't be picky at all) I will advise on some additional set up below.
Custom Wine
default Wine? no. I advise installing a Wine TKG build made by openglfreak.
As of now this is Wine 6.12 staging with fsync, a slightly modified audio patch written by gonx (he has his own build of wine only with that audio patch) and some other stuff I think.
But before that get out of Wine's dependency hell. Just install that long list of packages in the linked article.
Download here (openglfreak's Google Drive)
Keep in mind this build isn't compiled to be generic. If your CPU is an older one it might just not work.
Now you have two options:
Install it as it's supposed to be with
sudo pacman -U <name of file>.tar.zst
and overwrite the wine build installed from your package manager.Or do what I did: Open the archive with your favourite archive viewer and dump all the contents in usr/ inside the archive into
/opt/wine-osu/
(create the folder first with root).
It is probably better to have this build installed separately and used exclusively for osu! as it has a couple limitations like only being able to simulate Windows 7.
(I know just linking a gdrive link to a binary isn't the most trustworthy thing. You can try to make a build of Wine TKG yourself if you really want to. An audio latency patch should look like this if I'm not entirely mistaken, look around) Maybe I will look into making my own build later down the line, I will update this page if I ever do.
osu-wine
osu-wine is a script that takes care of some stuff while starting osu! and a prepackaged wineprefix that will make installing osu! extremely easy.
Go git clone my fork (make sure you have git
installed):
git clone https://codeberg.org/vib/osu-wine
cd osu-wine
And begin with installing it:
sudo ./install.sh
# Read through and answer to questions when prompted
osu-wine
# Same as above
Copy the default config file to your home folder with cp /etc/osu-wine.conf ~/.osu-wine.conf
and edit .osu-wine.conf:
Uncomment (remove the "#" symbol at the start of the line) this line:
fsync=true
and if you want to you can enable Discord RPC functionality by uncommenting
rpcBridge=true
Also if you put the custom Wine build in /opt/wine-osu uncomment
PATH="/opt/wine-osu/bin:$PATH"
- You should now have all the pieces for running osu! with fsync. To check that run
osu-wine
inside a terminal and look for a line towards the beginning of the logs that says futex2: up and running.. (you can just press Ctrl+C to cancel starting the program after you see a dozen lines being written in the terminal)
Audio latency tweaking (~optional)
This is someting I personally haven't been too interested in so I can't go into many details but I can tell a couple of things. First you will need to lower the limits of Pipewire so you can set SAP (Staging Audio Period) and SAD (Staging Audio Duration) without making the audio unintelligible.
- For Pipewire
Copy the default user config files for Pipewire if you don't have those there already:
mkdir -p ~/.config/pipewire && cp -rv /usr/share/pipewire/* ~/.config/pipewire/
Inside pipewire-pulse.conf
edit the following:
context.modules = {
pulse.min.req = 32/48000 # 0.67ms
pulse.min.quantum = 32/48000 # 0.67ms
}
After configuring this restart pipewire and pipewire-pulse
systemctl --user restart pipewire pipewire-pulse
Inside .osu-wine.conf
uncomment these:
export STAGING_AUDIO_PERIOD=50000
export STAGING_AUDIO_DURATION=100000
As it says in the config file the SAD should be always double of the SAD. You can try to lower those values up to the point where you don't have audio crackling or sounding weird yet.
Small but important things:
Due to how Wine works you will have to set universal offset now, so go grab peppy's offset wizard beatmap and set that up. If you are curious I had mine set to -19 without sound tweaks and now -36 with pipewire-pulse, SAP and SAD set up.
Turn off your compositor/screen compositing (look up on how to do that for your Desktop Environment), it either totally stutters the game or introduces a bit of input latency(not sure on this one).
And also it isn't a bad idea to add
export vblank_mode=0
, for Intel and AMD, orexport __GL_SYNC_TO_VBLANK=0
, for Nvidia, in.osu-wine.conf
.
Problems you may encounter:
Don't be surprised when these happen
Audio might sound a bit deepfryey at times with the audio latency patch.
osu! might crash once or twice when you first open it up and play a beatmap after booting the computer, but then work properly.
From time to time a map or replay you just imported might get stuck in
~/.local/share/osu-wine/OSU/
and each time you open the game it might "import" that map or show that play on the screen until you delete that file yourself.
You may have these problems, you may not. I know I had them, but they are pretty harmless.
For tablet users:
Installing OpenTabletDriver:
- For Arch Linux install
opentabletdriver
from the AUR with your favourite AUR helper, for exampleparu -S opentabletdriver
.
For other distros look up their install guide page.
Disable your past tablet driver if you have one. Wacom tablets have drivers included in the kernel anyway.
echo "blacklist wacom" | sudo tee -a /etc/modprobe.d/blacklist.conf
and disable the driver for the running sessionsudo rmmod wacom
Enable at startup and start now the opentabletdriver daemon (the service that will always run in the background and the GUI accesses)
systemctl --user --now enable opentabletdriver
If you want to still keep the old driver around for whatever reason (preferring it for drawing?) you can just sudo rmmod wacom
or use xinput
to disable it temporarely and systemctl start opentabletdriver
. Then when you're done systemctl stop opentabletdriver
and sudo modprobe wacom
or enable it back with xinput
.
This should be it. Now enjoy yourself and click some circles!