Xonotic is an open-source arena-style shooter like Quake or Unreal Tournament, where you don’t even need an account. I stumbled upon the project by chance a few days ago and fell in love with it. I used to love Quake Live when I was a kid.
In this guide, I’ll briefly describe how to host your own Xonotic server on a small Linux VPS, which is generally very simple and, with a little experience, can be set up very quickly. In my case, I use a VPS from Netcup (not an affiliate link).
Create User #
Once you have a server and have logged in via SSH, you can start creating a dedicated user.
First, create a separate user for Xonotic:
sudo useradd -m -d /opt/xonotic xonotic
Then enable login without an active SSH session:
sudo loginctl enable-linger xonotic
Switch to the new user account. You can find the user ID with cat /etc/passwd (here: 1002):
sudo machinectl shell --uid 1002
Download and extract Xonotic #
Download the latest version:
wget https://dl.xonotic.org/xonotic-0.8.6.zip
Extract the archive:
unzip xonotic-0.8.6.zip
Prepare the Configuration Directory #
Create the directory for the server configuration:
mkdir -p ~/.xonotic/data
Copy the sample configuration from Xonotic:
cp Xonotic/server/server.cfg ~/.xonotic/data/
Edit the configuration to suit your needs:
vim ~/.xonotic/data/server.cfg
Important settings:
sv_public 1
hostname ""
port 26000
sv_status_privacy 1
Create a systemd service #
Create the directory for the service:
mkdir -p ~/.config/systemd/user
Create the service file:
vim ~/.config/systemd/user/xonotic-server.service
Paste the following content (with security options):
[Unit]
Description=Xonotic dedicated server
After=network.target
[Service]
Type=simple
ExecStart=/opt/xonotic/Xonotic/xonotic-linux-dedicated.sh -sessionid xonotic +serverconfig server.cfg
SyslogIdentifier=xonotic
ProtectHome=yes
ProtectClock=yes
ProtectSystem=strict
PrivateDevices=yes
ProtectHostname=yes
RestrictRealtime=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
MemoryDenyWriteExecute=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
ReadWritePaths=%h
Restart=always
RestartSec=1
[Install]
WantedBy=multi-user.target
Start and enable the service #
Reload the Systemd configuration:
systemctl --user daemon-reload
Start the service and enable it to start automatically:
systemctl --user enable --now xonotic-server.service
Check the status (should show no errors):
systemctl --user status xonotic-server.service
Your server should now be visible in the Xonotic server list and ready to play. Have fun! 🎮