User:Lucasdessy

From ArchWiki

osu! on Arch Linux

Note: This session is heavily influenced by User:Katoumegumi page. I changed some things to help my experience

This guide assumes you already have installed PipeWire into your system. Make sure to install pipewire-pulse This guide helps you to get the best experience playing osu! on Arch Linux.

Installing dependencies

Enable multilib and install wine (this is required to get wine dependencies) and winetricks, then install ttf-ms-win10AUR. Also make sure to have lib32-alsa-plugins lib32-libpulse lib32-openal lib32-gnutls and lib32-libxcomposite installed, since those packages might not be direct wine dependencies. You can also install all remaining dependencies, which is recommended, by following this guide.

Installing custom wine

Download the gonX build, as it is the best at the time of this article being written. After downloading the file, execute sudo pacman -U wine-osu-6.14-1-x86_64.pkg.tar.zst. This guide will assume that your custom wine is located at /opt/wine-osu.

Installing osu!

Prepare wineprefix

Create WINEPREFIX for your osu! installation and run winetricks to install required dependencies for osu! to work correctly.

$ WINEARCH=win32 WINEPREFIX=~/.wineosu winetricks dotnet40 cjkfonts gdiplus

Preparing assets

Create a folder for your osu! install inside your newly created wine prefix.

$ mkdir ~/.wineosu/osu/

Download osu! executable.

$ wget --output-document ~/.wineosu/osu/osu\!.exe https://m1.ppy.sh/r/osu\!install.exe

Testing osu!

Start osu! and test if it works correctly.

$ PATH="/opt/wine-osu/bin:$PATH" WINEARCH=win32 WINEPREFIX=~/.wineosu wine ~/.wineosu/osu/osu\!.exe

Creating scripts for starting and killing the game

Create startup script for osu!

~/.wineosu/osu/start.sh
#!/usr/bin/env bash
PATH="/opt/wine-osu/bin:$PATH" WINEPREFIX="$HOME/.wineosu" wine "$HOME/.wineosu/osu/osu!.exe"

Create a kill script for osu! (Just in case wine hangs up or something)

~/.wineosu/osu/kill.sh
#!/usr/bin/env bash
export PATH="/opt/wine-osu/bin:$PATH"
export WINEPREFIX="$HOME/.wineosu"
#export WINEARCH=win32 # You actually don't need this flag, only need when creating the bottle for the first time.
wineserver -k

Create .desktop entries

Fetch osu! logo.

$ wget --output-document ~/.wineosu/osu/icon.png https://github.com/ppy/osu-wiki/raw/master/wiki/Brand_identity_guidelines/img/usage-full-colour.png

Create deskrop entry in ~/.local/share/applications/

Note: You'll have to put the full path, instead of using ~ or $HOME in Exec and Icon params, at least for KDE.
osu.desktop
[Desktop Entry]
Categories=Game;
Comment=A freeware rhythm game where player uses mouse and keyboard input to click on circles to the rhythm in main gameplay mo>
Exec=bash -c /home/lucas/.wineosu/osu/start.sh
Icon=/home/lucas/.wineosu/osu/icon.png
Name=osu!
Type=Application
StartupNotify=true
Terminal=false
osu-kill.desktop
[Desktop Entry]
Categories=Game;
Exec=bash -c /home/lucas/.wineosu/osu/kill.sh
Icon=/home/lucas/.wineosu/osu/icon.png
Name=Kill osu!
Type=Application
StartupNotify=true
Terminal=false
Wine extension entries
Note: If your wine doesn't create this entries, feel free to copy this file and add for all osu! extensions.

Wine might have added entries for .osk .osr .osz2 and .osz file extensions. They will work fine if you add the PATH before its Exec param. Example:

wine-extension-osk.desktop
[Desktop Entry]
Type=Application
Name=osu!
MimeType=application/x-wine-extension-osk;
Exec=env PATH="/opt/wine-osu/bin:$PATH" WINEPREFIX="/home/lucas/.wineosu" wine start /ProgIDOpen osu! %f
NoDisplay=true
StartupNotify=true
Icon=ED50_osu!.0

Setting up PipeWire

It's surprisingly simple to set PipeWire up. First copy its config files to your home directory

$ cp /usr/share/pipewire/* ~/.config/pipewire/

Editing PipeWire configuration

You'll need to edit two files, according to your sound card. ~/.config/pipewire/pipewire.conf and ~/.config/pipewire/pipewire-pulse.conf

Note: This guide will assume the quant value is 32 and the sample rate is 48000.
Tip: Try to use highest sample rate supported by your sound card, some commom sample rates are 192000, 96000, 48000 and 44100
Tip: Try first the lowest quant possible, then if the sound is cracking, try increasing in increments of 16, e.g. 48, 64, etc.

Inside ~/.config/pipewire/pipewire.conf, edit context.properties, and change the default.clock.min-quantum to 32 and also change default.clock.rate to 48000.

pipewire.conf
context.properties = {
...
    ## Properties for the DSP configuration.
    default.clock.rate          = 48000
    ...
    default.clock.min-quantum   = 32
...
}

Inside ~/.config/pipewire/pipewire-pulse.conf, edit context.modules, and change pulse.min.req, pulse.min.frag and pulse.min.quantum to 32/480000

pipewire.conf
context.modules = [
...
    {   name = libpipewire-module-protocol-pulse
        args = {
        ...
	    pulse.min.req = 32/48000             
	    #pulse.default.req = 960/48000          # 20 milliseconds
	    pulse.min.frag = 32/48000             
	    #pulse.default.frag = 96000/48000       # 2 seconds
	    #pulse.default.tlength = 96000/48000    # 2 seconds
	    pulse.min.quantum = 32/48000          
	    #pulse.default.format = F32
	    #pulse.default.position = [ FL FR ]
            # These overrides are only applied when running in a vm.
            vm.overrides = {
	        pulse.min.quantum = 1024/48000         # 22ms
            }
        }
    }
...
]

Testing changes

After editing the PipeWire config files, restart PipeWire services.

$ systemctl --user restart pipewire.service pipewire.socket pipewire-media-session.service pipewire-pulse.service pipewire-pulse.socket

You can check if osu is getting the lowest quant by running pw-top. If sound is cracking refer to tips from the session above.

Extras

Wacom tablet

If you use KDE and have a wacom tablet, I strongly suggest you to install kcm-wacomtablet, as it provides a graphical interface to change your tablet area, also giving the possibility to disable the cursor smoothing.

Disable compositing

I also strongly suggest you to disable compositing while osu is running. To do that on KDE (5.22.5 as the time of this writting), while osu! is running, press Alt+F3 to open up window settings. Then go to More Actions -> Configure Special Application Settings... -> Add Property button -> add Block Compositing -> set it to Force and choose Yes. Then apply it. KWin should automatically disable compositing when you open the game again.