How to setup a dedicated Nexuiz server on linux

Nexuiz is an old-school, quake-like, free FPS game you can easily install on Linux. It was Initially released in 2005 and infos about it are slowly disappearing from the internet as forums and such dies...

It's a pretty fun game and peoples are still playing it ! So I'll explain how to setup a dedicated server (tested with ubuntu server on a Digital Ocean droplet, but it should also work on ubuntu desktop).

1. Install the game and the server

Simply run this command to install the game (if you don't already have) and the server :

apt install nexuiz nexuiz-server

2. Configuration file

Copy the server config file below (which I took from a source code repository right there) and paste it at this location : /usr/share/games/nexuiz/data/server.cfg.

// A setting needs to be surrounded with " if it contains special  
// characters like space, semicolon (seperates commands) or starts
// with // (begins a comment for the rest of the line or next
// semicolon).  While just "" means 'no/empty setting'.

// Everything has some sensible defaults so you do NOT really need to
// change anything.  But here are some settings you SHOULD change to
// make it 'YOUR' server.  IF so remove the // from the line start and
// change them to your liking.

//sv_public 1    // 0 if the server should not be on the public servers list
//sv_status_privacy 1    // 1 hides IP addresses from "status" replies shown to clients, 0 shows them. Enables players to identify wellknown punks on your server OR is a thread to anonymity.. depending on your point of view :)
//hostname "Nexuiz $g_nexuizversion Server"    // this name will appear on the server list (the $g_nexuizversion gets replaced with the current version)
//sv_motd ""    // this message (unless "") is displayed to players on connect
//maxplayers 8    // number of players allowed on the server
//port 26000    // the port used by the server
//log_file "server.log"    // server console output will also be copied to this file. This: "${serverconfig}.log" uses variable substitution to make the logfile have the same name as your config file with .log appended which is useful if you run several servers

// List of maps to play on the server.  Set to "" to autodetect (which would enumerate ALL maps.  Maps that don't support the current game mode will be skipped, so you don't need to remove them here.
//g_maplist "accident aggressor aneurysm basement basementctf bleach bloodprison bloodprisonctf bluesky cyberparcour01 darkzone desertfactory dieselpower downer eggandbacon evilspace farewell final_rage nr_piece-o-cake ons-reborn racetrack reslimed ruiner runningman runningman_1on1remix runningmanctf silvercity skyway slimepit soylent starship stormkeep2 strength toxic warfare"
//g_maplist_shuffle 1    // 0 always selects the next map out of g_maplist (but then better set g_maplist_votable 0 below to prevent repetitive votes), 1 will select random maps each time
//g_maplist_mostrecent_count 3    // number of maps that have to be played before a map can be repeated

// LIMITS: how long a match will last before the next map starts (-1 means use the map default, 0 = unlimited, please note that the variables fraglimit/timelimit can NOT be globally used for this but only DURING a match is being played)
//timelimit_override -1    // global timelimit for all maps and gametypes
//fraglimit_override -1    // global frag/point limit for all maps and gametypes
//g_ctf_capture_limit -1    // frag/capture limit for CTF
//capturelimit_override -1    // capture limit for CTF
//g_domination_point_limit -1    // frag/point limit for DOM
//g_runematch_point_limit -1    // frag/point limit for RUNE
//g_keyhunt_point_limit -1    // frag/point limit for KH
//g_lms_lives_override -1    // lives for LMS
//g_nexball_goallimit -1    // goals for NEXBALL

//g_ctf_win_mode 0    // CTF win mode: 0 = caps only, 1 = caps + points as tie breaker, 2 = points only
//g_ctf_ignore_frags 1    // set to 1 to ignore kills except for FC kills

// TEAMS for key hunt (change this to 2, 3, 4 to set a fixed keyhunt style)
//g_keyhunt_teams_override -1    // teams for KH

// GAME MODE: what type of server do you want to host?
// possible values: dm (deathmatch), tdm (team deathmatch), dom (domination), ctf (ctf), rune (runematch), lms (last man standing), arena (arena), kh (keyhunt), as (assault), ons (onslaught), race (race), nexball (nexball)
//gametype dm

// enable some mutators you'd like
//g_cloaked 0    // set to 1 for transparent hard to see players
//g_footsteps 0    // set to 1 to enable footsteps
//g_grappling_hook 0    // set to 1 to enable the hook
//g_laserguided_missile 0    // set to 1 for laser guided missiles in the RL
//g_midair 0    // set to 1 to make only midair damage count
//g_vampire 0    // set to 1 to give players the damage they cause as health
//sv_gravity 800    // for low gravity, set this somewhere between 50 and 400

// select AT MOST one of these arena mutators
//g_minstagib 0    // set to 1 for MinstaGib
//g_nixnex 0    // set to 1 for No Items Nexuiz
//g_nixnex_with_laser 0    // set to 1 to always give players the laser in NixNex
//g_rocketarena 0    // set to 1 to make the rocket launcher the only weapon

// Some settings you MIGHT want to change.  Again IF so remove the //
// from the line start and change them to your liking.

//net_address    // ONLY change this if you have problems with your server. Specifies the network interface used by the engine.  Set it you one of you internal IPs

//rcon_password ""    // you can use rcon if this password is set.  you need to set the same password in your client if you want to issue rcon commands
//rcon_restricted_password ""    // put here the password for a "restricted" rcon user (see below)

//bot_number 0    // number of bots to add
//skill 1    // the bots skill level
//minplayers 0    // add bots if less then that number of players playing. MAKE SURE ITS LESS THEN maxplayers or people will get blocked by bots!
//bot_prefix [BOT]    // prepend this to all botnames
//bot_suffix ""    // append this to all botnames
//g_maplist_check_waypoints 0    // set this to 1 to skip maps without waypoints if there aren't enough players to play without bots

//g_maplist_votable 6    // number of maps to vote between.  set to 0 to disable the map voting screen (please enable g_maplist_shuffle above when this is enabled, or votes will be repetitive)
//g_maplist_votable_suggestions 2    // number of suggestions to accept using the suggestmap command
//g_maplist_votable_abstain 0    // when 1, people get a "don't care" selection in the vote screen
//g_maplist_votable_nodetail 1    // when 1, people can't see how many voted for what (to thwart abusive "influential" first votes)

//sv_vote_commands "restart fraglimit chmap gotomap nextmap endmatch reducematchtime extendmatchtime allready kick cointoss movetoteam_auto"    // players can vote for those commands or use them if they are masters. You canm also add 'g_grappling_hook' for hook voting, and 'sv_fbskin_green sv_fbskin_red sv_fbskin_orange sv_fbskin_off' for fbskin voting.
//sv_vote_master_commands "movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink"    // add commands masters can use if logged in or elected. You may want to put 'kickban' here, so masters can keep out punks. It may be good to also put "sv_status_privacy 0" then...
//rcon_restricted_commands "restart fraglimit chmap gotomap endmatch reducematchtime extendmatchtime allready kick kickban \"sv_cmd bans\" \"sv_cmd unban\" status \"sv_cmd teamstatus\" movetoteam_auto movetoteam_red movetoteam_blue movetoteam_yellow movetoteam_pink"    // commands for the (stronger) rcon restricted

//sv_vote_call 1    // 0 will disable the normal voting
//sv_vote_master 1    // 0 will disable voting to become master, good if you prefer to use the master password instead
//sv_vote_master_password ""    // when set, vlogin PWD will allow people to become master to run master commands directly using vdo
//sv_vote_majority_factor 0.5    // 0.666 will require a 2/3 majority instead of a regular 1/2 one
//sv_vote_simple_majority_factor 0    // 0.666 will win votes by a 2/3 majority of the VOTERS (not the players!)
//note: to JUST support simple majorities, set these two factors equal

// Some more advanced settings.  You probably are not interested in changing them at all.

// select one of these:
//g_balance_rocketlauncher_detonatedelay 0    // rocket detonation at any time
//g_balance_rocketlauncher_detonatedelay 0.2    // rocket detonation at least 0.2s after it was shot (reduces rocket boosting)
//g_balance_rocketlauncher_detonatedelay -1    // rocket detonation only if the rocket is out of range of the owner (prevents rocket boosting, makes rockets "safer")

//sv_ready_restart 0    // 1 to allow players to restart the map when all of them press the ready button
//sv_autoscreenshot 0    // 1 will force a screenshot for all clients when the map ends.  Useful for competitions or the ladder.

//g_antilag 2    // 0 to disable the antilag feature, 1 and 2 use different methods

//sys_ticrate 0.05    // how long a server frame is.  0.05 = 20 fps, 0.02 = 50 fps.  Lower settings makes things smoother but create much more traffic (known good values include: 0.05, 0.046875, 0.03125)
//sv_maxrate 1000000    // limits client connections to this rate in bytes/seconds

// see Docs/mapdownload.txt for more info
//sv_curl_defaulturl    //fallback download URL

//sv_defaultcharacter 0    // 1 will force a specific model for all players
//sv_defaultplayermodel models/player/nexus.zym    // this model will be used
//sv_defaultplayerskin 0    // this skin number will be forced for all players
//g_fullbrightplayers 0    // 1 to make players fullbright
//g_fullbrightitems 0    // 1 to make items fullbright

//g_balance_teams 1    // 0 will show players the team selection menu after joining instead of automaticly putting them on the smaller team
//g_balance_teams_force 0    // 1 to automaticly balance teams even during a game

//set g_ban_sync_uri "" // sync bans using this ban list provider (disabled by default, uncomment this line to enable)
//set g_ban_sync_trusted_servers "" // accept bans that were initially set on the server IPs listed here (if not set, your bans are just sent to the sync URIs, but no bans are retrieved from there)

Every options are explained with comments so take a look at them and tweak the server to fit your needs.

3. Open public port

This step is only required if you want peoples on the internet to find your server, if you just want to play in LAN, skip this step.

This step consist of telling your firewall to let trafic pass inside the game port (which is 26000 by default). To do so, run this command :

sudo ufw allow 26000

Also make sure the sv_public config is set to 1 in the config file you created before (it's commented by default, you must uncomment it) otherwise it won't work.

4. Starting the server

Simply run this command : nexuiz-server and you are good to go !

It'll run in the current console, so you can CTRL + C to stop the server. If you want it to run in the background you can do nexuiz-server &. You could also run the command in a cronjob on start to make sure the server always run even when your computer reboot !

Have fun and see ya in game ! :)