Server Administration

This page covers how to set up and run a dedicated Quetoo server on Debian or Fedora Linux.

Installation

Download quetoo and quetoo-data packages from their respective Releases pages and install them together:

# Debian / Ubuntu
sudo apt install ./quetoo-x86_64-pc-linux.deb ./quetoo-data_*.deb

# Fedora / RHEL
sudo dnf install quetoo-x86_64-pc-linux.rpm quetoo-data-*.rpm

quetoo and quetoo-data have independent release cycles — install the latest of each.


Service Management

The quetoo package installs a systemd template unit quetoo-dedicated@.service and a default instance configuration at /etc/quetoo-dedicated/default.cfg.

Each .cfg file in /etc/quetoo-dedicated/ represents one server instance. Lines are in Quake console format and are passed directly as +set key value arguments to quetoo-dedicated. Blank lines and lines beginning with // or # are ignored.

Edit the default instance configuration to suit your server:

// /etc/quetoo-dedicated/default.cfg
set net_port 1998
set sv_hostname "My Quetoo Server"
set sv_public 1
set rcon_password "secret"
set g_frag_limit 30
set g_time_limit 20

Enable and start the default instance:

sudo systemctl enable --now quetoo-dedicated@default

Manage the service:

sudo systemctl start   quetoo-dedicated@default
sudo systemctl stop    quetoo-dedicated@default
sudo systemctl restart quetoo-dedicated@default
sudo systemctl status  quetoo-dedicated@default

Multiple Instances

To run multiple server instances, create a .cfg file per instance and enable each one:

# Create a CTF instance on port 1999
sudo cp /etc/quetoo-dedicated/default.cfg /etc/quetoo-dedicated/ctf.cfg
# Edit /etc/quetoo-dedicated/ctf.cfg: set net_port 1999, g_ctf 1, etc.
sudo systemctl enable --now quetoo-dedicated@ctf

Each instance is managed independently. A typical three-server VPS might have default.cfg (FFA, port 1998), ctf.cfg (CTF, port 1999), and instagib.cfg (Instagib, port 2000).

Attaching to the Console

Each dedicated server instance runs inside a named screen session. The quetoo-attach command lets any sudo-capable user attach to the live server console:

quetoo-attach           # attaches to the "default" instance
quetoo-attach ctf       # attaches to the "ctf" instance

Detach with Ctrl-A D without stopping the server.


Updates

quetoo-update fetches the latest release versions of quetoo and quetoo-data from GitHub independently, installs any that are out of date, and restarts all running instances.

Run it manually to update immediately:

sudo quetoo-update

For automatic updates, add it to root’s crontab with --wait-for-empty. The server will update within 15 minutes of a new release, but only once all human players have disconnected:

sudo crontab -e
*/15 * * * * /usr/bin/quetoo-update --wait-for-empty >> /var/log/quetoo-update.log 2>&1

Running a Dedicated Server

Quetoo ships with a quetoo-dedicated binary for headless server operation. You can also launch it directly from the command line:

quetoo-dedicated +set sv_hostname "My Server" +map edge

You can pass any cvar as a +set key value argument at startup, and any command (like map) with +command.

Minimal Startup Example

quetoo-dedicated \
  +set sv_hostname "Fragfest" \
  +set sv_max_clients 16 \
  +set sv_public 1 \
  +set g_frag_limit 30 \
  +set g_time_limit 20 \
  +map edge

Key Server Cvars

Network

CvarDefaultDescription
net_port1998UDP port the server listens on
sv_hostnameQuetooServer name shown in the browser
sv_public0Set to 1 to advertise on the master server

Capacity

CvarDefaultDescription
sv_max_clients64Maximum simultaneous players
sv_max_entities1024Maximum entities; rarely needs changing
sv_timeout20Client connection timeout in seconds

Security

CvarDefaultDescription
rcon_password(empty)Password for remote console access (rcon). Set this to allow trusted admins to run server commands remotely.
g_admin_password(empty)In-game admin password (set with admin <password>)

Game Rules

CvarDefaultDescription
g_frag_limit30Frags needed to win the level
g_time_limit20Minutes per level
g_capture_limit8Flag captures to win (CTF)
g_teams0Set to 1 to enable Team Deathmatch
g_ctf0Set to 1 to enable Capture the Flag
g_gameplaydefaultGame variant: default, instagib, or arena
g_num_teamsdefaultNumber of teams (auto-detected by default)
g_auto_join0Automatically assign players to teams
g_weapon_stay0Weapons stay after pickup instead of respawning
g_respawn_protection0Spawn protection duration in seconds
g_spawn_farthest0Spawn players as far as possible from enemies
g_ammo_respawn_time20.0Ammo respawn interval in seconds
g_weapon_respawn_time5Weapon respawn interval in seconds

Map Rotation

Map rotation is controlled by the g_map_list cvar, which points to a map list file. By default the server reads maps.lst from the game data directory.

maps.lst Format

// maps.lst — one map per entry, with optional settings
{
    map "edge"
    message "Back to Edge!"
}
{
    map "aerowalk"
}
{
    map "bsp2"
    g_ctf "1"
    g_time_limit "30"
}

Override with a custom file:

+set g_map_list "cfg/myserver_maps.lst"

Maps rotate automatically when the frag limit or time limit is reached. You can also change the map manually from the console:

map edge

Remote Console (rcon)

If rcon_password is set, admins can run commands remotely from a Quetoo client:

rcon_password mypassword
rcon map edge
rcon status

Firewall / Port Forwarding

Quetoo uses UDP port 1998 by default. Open this port in your firewall and forward it on your router if hosting from a home network.

To list your server on the public master server, set:

+set sv_public 1

Getting Help

Join the Discord #development channel for help running a server.