Welcome, below you will find information on how to host a dedicated server on Linux and Windows.
Before you start you will need ports 7777, 27015, and 15000 forwarded. There are many port forwarding guides available on the Internet so we will not be going over that process.
To run multiple instances on same server you can use -PORT, -QUERYPORT, -GAMEINI, -ENGINEINI and -Beaconport parameters to specify different ports & config files for different server instances, just remember to use full path when referring to those files.
example:
./MordhauServer.sh -Port=7778 -QueryPort=27016 -Beaconport=15000 -GAMEINI=/home/*username*/steam/mordhau/Mordhau/Saved/Config/LinuxServer/Game2.ini -ENGINEINI=/home/*username*/steam/mordhau/Mordhau/Saved/Config/LinuxServer/Engine2.ini
Contents
- 1 Linux Setup Video:
- 2 Linux setup
- 3 Monitoring your server (to integrate with monitoring tools like Nagios or control panels)
- 4 Windows setup
- 5 Tweaks and configurations
- 6 Console commands
- 7 RCON commands
- 8 References and information sources
Linux Setup Video:[]
Below you will find a video that shows you exactly how to setup a Dedicated Mordhau Server using Linux, You need no experience with Linux to set this up just to follow this video below:
YouTube Link To Mordhau Linux Server Setup
Linux setup[]
Docker[]
If your server is running Docker, you can simply use:
docker run -d --net=host --name=mordhau-dedicated cm2network/mordhau
The container will automatically update the game on startup, so if there is a game update just restart the container.
The config is located here: /home/steam/mordhau-dedicated/Mordhau/Saved/Config/LinuxServer
If you want to launch another instance you can increment the environment variables, using -e (--env):
docker run -d --net=host -e SERVER_PORT=7778 -e SERVER_QUERYPORT=27016 -e SERVER_BEACONPORT=15001 --name=mordhau2-dedicated cm2network/mordhau
You can find the associated Docker Hub page here: https://hub.docker.com/r/cm2network/mordhau/
Install SteamCMD dependencies[]
$ sudo apt-get install lib32gcc1
As the root user, create a separate user as follows under which we will run the server. We do this as a security precaution: you should never run the server as root.
$ useradd -m steam
Now, we'll swap to the newly created account:
$ su - steam
Or if you aren't currently logged in as root, use:
$ sudo -iu steam
Now, we can install SteamCMD. This installs it in the current directory:
$ curl -sqL "https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz" | tar zxvf -
SteamCMD allows us to download and install the server and any updates that we may need at a later date. We'll create a simple SteamCMD script that we can run whenever we want to update our server. Create a file in the current directory with the following contents; I named mine update_mordhau.txt:
@ShutdownOnFailedCommand
@NoPromptForPassword 1
force_install_dir ./mordhau
app_update 629800 validate
quit
As you can see, the command app_update 629800 is the one that installs the server executable, with 629800 being the Steam app ID we want to install (Mordhau Dedicated Server). We also ask SteamCMD to install Mordhau to the mordhau folder in the current directory.
Running the script for the first time will cause SteamCMD to download the contents of the server application to your computer entirely. Any subsequent runs of this script will simply check for an update and install it if available. We can run it with:
$ ./steamcmd.sh +login anonymous +runscript update_mordhau.txt
You can also login with your steam credentials but Mordhau supports anonymous access so we prefer this.
If you want to login with steam do the following:
Replace anonymous with <your_username> <"your_password"> <steamguard_code> (you should omit the angle brackets). The Steam Guard code should be all lower-case.
Note that if you used a package manager to install SteamCMD, you may need to use simply steamcmd instead of ./steamcmd.sh.
This should initiate a fairly large download, so this may take a few minutes or hours depending on the network bandwidth of the server. Just remember to run the above command when you want to update your server to a new Mordhau patch.
See the SteamCMD documentation for more information on how to use SteamCMD.
If you want to install multiple servers onto a single machine you can make another update_mordhau.txt file and name it update_mordhau2.txt and then in the contents of the new update_mordhau2.txt change the install directory from ./mordhau to ./mordhau2 and save it. When you run the steamcmd to download the contents again make sure to use:
$ ./steamcmd.sh +login anonymous +runscript update_mordhau2.txt
This should install an entire new directory of mordhau files that can be configured for a second server. To start the second server on a different port use the start up script:
./MordhauServer.sh -Port=7778 -QueryPort=27016 -Beaconport=15005
Install Game Server Dependencies[]
At this point you should have all the required files to run the server in the mordhau folder. Unfortunately, we still need to install a few more things before we can start the server. If you try and run the server at this point, you'll get some errors relating to libraries not being found. We need to install these dependencies manually, so let's go ahead and do that. Note that the following is very distro-specific: you'll have to use your own intuition for which package is correct if you aren't using a distro that uses apt (or maybe search the comments for a list of library names for your specific package manager).
Using apt, you can run the following (you'll need root access for this, temporarily):
$ sudo apt-get install -y libfontconfig1 libpangocairo-1.0-0 libnss3 libgconf-2-4 libxi6 libxcursor1 libxss1 libxcomposite1 libasound2 libxdamage1 libxtst6 libatk1.0-0 libxrandr2 libcurl4
Configuring and Running the Server[]
Finally, we can now start thinking about how we want to configure the server. First, navigate to the folder where Mordhau is installed. If you've been following along, this will mean simply running cd mordhau
.
In the root of the mordhau folder, there should be a file called MordhauServer.sh - this is the script that actually runs the server. We need to run this first to generate some .ini files we need later. We can execute it with:
./MordhauServer.sh
Press CTRL+C to stop the server when it's finished loading up.
Now the .ini files are ready to edit.
If you type ls, you will see a few folders. The server configuration files are stored in Mordhau/Saved/Config/LinuxServer. If you navigate there and see what files are there (cd Mordhau/Saved/Config/LinuxServer && ls) you will see a few .ini files. The one we will want to edit the most is Game.ini. So let's open up that file in your favourite command line text editor (you could also download the file, edit it on your host machine and upload it back - but editing it in place is much simpler). nano is one such simple text editor, so simply run: nano Game.ini.
You should see something like this:
[/Script/Mordhau.MordhauGameSession]
MaxSlots=16
ServerName=
ServerPassword=
AdminPassword=
Admins=
Note: the admin system is currently in transition (written as of Patch 17), all values in Admins are converted to LegacyAdmins=
BannedPlayers=
[/Script/Mordhau.MordhauGameMode]
MapRotation=SKM_Contraband
MapRotation=FFA_ThePit
Admins are added via SteamID64 (Example: 76521138065219059) and allow using console commands without logging in with the admin password. Multiple admins require multiple "Admins=" lines. You can find your SteamID64 here: steamid.io
BannedPlayers is a list of blacklisted players that cannot join your server. You can add entries manually (with a similar syntax to the way you add admins).
Next, we see the MapRotation fields. When one map ends, the server loads the next entry in the MapRotation field. For example, if I just wanted Contraband Skirmish and Camp FFA (in that order), I'd write:
MapRotation=SKM_ContraBand
MapRotation=FFA_Camp
The map prefixes should be self-explanatory: SKM is Skirmish, FFA is FFA/Deathmatch, TDM is Team Deathmatch, etc.
Note that some people have reported issues with the Admins and MapRotation fields on the Windows dedicated server, saying that they simply don't work. If this is the case for you, try putting a '+' before each line that starts with Admins= or MapRotation= - this has fixed the issue for many.
If you want to change the tickrate of your server (default is 30, 60 or 120 may improve gameplay), you need to edit the Engine.ini file in the same folder. Add the following:
[/Script/OnlineSubsystemUtils.IpNetDriver]
NetServerMaxTickRate=60
Running the server[]
Having configured everything we want to configure, we can finally run the server. In the root of the mordhau folder, there should be a file called MordhauServer.sh - this is the script that actually runs the server. We can execute it with:
./MordhauServer.sh
After 15s or so, your server should be up and running. The problem with this method is that it's tied to the current command line session - as soon as you close your SSH connection, the server will close too. We need to run it in the background, using this command:
nohup ./MordhauServer.sh &
Instead of displaying the output directly to your screen, this will write the server log to a file in the current directory named nohup.out. Type man nohup for more details on this behaviour. Alternatively you can use systemd to run your server in the background. See this link for more information.
When you want to shut down the server, you'll need to type ps -a (or ps -ax if you don't see it) and look for the process ID of the game server. Then, close it with kill <pid> where you replace <pid> with the process ID you just found.
Systemd[]
If you want an easy and more clean way to stop, start and get status output of the Mordhau server you can create a systemd service. This is by no means an advanced systemd script. It only stops and starts the server and doesn't do anything else like updating for example).
Use your favorite editor.
sudo vim /etc/systemd/system/MordhauServer.service
Paste the following into the file:
You should edit the variables to reflect your own setup/user.
[Unit]
Description=Mordhau Server
[Service]
ExecStart=/home/steam/mordhau/MordhauServer.sh
User=steam
StandardOutput=file:/var/log/mordhau.log
StandardError=file:/var/log/mordhau_errors.log
[Install]
WantedBy=multi-user.target
You can edit the log output to whatever you want.
Now use the following commands to start the server:
sudo systemctl start MordhauServer.service
You can also let it start on boot:
sudo systemctl enable MordhauServer.service
To get the status:
sudo systemctl status MordhauServer.service
If you want a more advanced Systemd script that auto-updates, validates and auto-restarts on crash you can use the following:
Don't forget to edit the variables to reflect your own server files.
[Unit]
Description=Mordhau Server
Requires=network.target local-fs.target
After=network.target local-fs.target
[Service]
Type=simple
Restart=on-failure
RestartSec=5
StartLimitInterval=60s
StartLimitBurst=3
User=steam
Group=steam
ExecStartPre=/home/steam/Steam/steamcmd.sh +login anonymous +runscript /home/steam/Steam/update_mordhau.txt
ExecStart=/home/steam/Steam/mordhau/Mordhau/Binaries/Linux/MordhauServer-Linux-Shipping Mordhau
ExecStop=/bin/kill -SIGINT $MAINPID
[Install]
WantedBy=multi-user.target
If you want to run multiple servers you should append the following to ExecStart: -Port=7777 -QueryPort=27015 -BeaconPort=15000
Just +1 the ports from default.
Monitoring your server (to integrate with monitoring tools like Nagios or control panels)[]
quakestat can be used to monitor your Mordhau server.
sudo apt install qstat
quakestat -a2s IP:PORT
use quakestat --help
to see all options.
Windows setup[]
Installing via SteamCMD[]
Download SteamCMD for Windows: https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip
At the moment our most comprehensive tutorial is a Video[1]
Installing via Steam tools[]
1. With Steam open, right click on your library and open up "tools"
2. Navigate to "MORDHAU Dedicated Server" and click install
3. Once you have the server files navigate to the location below or wherever you chose to install the server files.
"C:\Program Files\Steam\steamapps\common\Mordhau Dedicated Server"
4.Create a shortcut of "MordhauServer.exe"
5. Right click your new shortcut and select properties
6. Edit the target field and add -log to the end of it so a console window is displayed upon launch.
"C:\Program Files\Steam\steamapps\common\Mordhau Dedicated Server\MordhauServer.exe" -log
You will have to run the server once before it generates configuration files for you to edit.
Installing via WindowsGSM[]
There is multiple tools for game server management built into this software. Along with the option to run and import other games servers all into one control panel.
- Download WindowsGSM from https://windowsgsm.com/.
- Install the dependencies needed .NET Framework 4.7.2 and Visual C++ 2015 32bit and 64bit version.
- Put WindowsGSM into a folder and start the application.
- In the top left click the "Servers" Drop down and pick Install a Server. Select the Mordhau Dedicated Server and then put a name for the WindowsGSM dashboard to display for the server ( this is not your actual servers name) and press install.
- At this point you can follow the rest of this page to configure and set up your server to what you want. Start the server at least once to generate the files and then stop it to start configuring.
Tweaks and configurations[]
Below you will find how to set the default game mode upon launching the server as well as changing the game modes available which is bound to the map rotation pool.
Adjusting duration & score[]
Edited in Game.ini
Skirmish:[]
Duration:[]
[/Game/Mordhau/Blueprints/GameModes/BP_SkirmishGameState.BP_SkirmishGameState_C]
RoundDuration=300
Deathmatch:[]
Score To Win:[]
[/Game/Mordhau/Blueprints/GameModes/BP_DeathmatchGameMode.BP_DeathmatchGameMode_C]
ScoreToWin=12000
Duration:[]
[/Game/Mordhau/Blueprints/GameModes/BP_DeathmatchGameState.BP_DeathmatchGameState_C]
MatchDurationMax=4800
Team Deathmatch:[]
Score To Win:[]
[/Game/Mordhau/Blueprints/GameModes/BP_TeamDeathmatchGameMode.BP_TeamDeathmatchGameMode_C]
TeamScoreToWin=1000
Duration:[]
[/Game/Mordhau/Blueprints/GameModes/BP_TeamDeathmatchGameState.BP_TeamDeathmatchGameState_C]
MatchDurationMax=1200
Setting a default map[]
The default map is chosen by ServerDefaultMap variable in /Mordhau/Saved/Config/*Server/Engine.ini, below are couple of examples for different vanilla maps:
For Horde:[]
[/Script/EngineSettings.GameMapsSettings]
ServerDefaultMap=/Game/Mordhau/Maps/DuelCamp/HRD_Camp
For Frontlines:[]
[/Script/EngineSettings.GameMapsSettings]
ServerDefaultMap=/Game/Mordhau/Maps/TaigaMap/FL_Taiga
It is also possible to configure a modded map into your rotation in the same way as shown above. Adding the mapname twice such as /Game/Mordhau/Maps/DuelCamp/HRD_Camp.HRD_Camp
is not necessary. You will need to configure the exact path to the map in this variable, and this is different than the configuration used to put it in map rotation below, which only requires the map name without the path.
Setting map rotation[]
For Map Rotation you add your maplist into /Mordhau/Saved/Config/*Server/Game.ini, under [/Script/Mordhau.MordhauGameMode]
Front Line:[]
MapRotation=FL_MountainPeak
MapRotation=FL_Camp
MapRotation=FL_Grad
MapRotation=FL_Crossroads
MapRotation=FL_Feitoria
Invasion:[]
MapRotation=INV_Castello_0
MapRotation=INV_Grad_0
MapRotation=INV_Crossroads_0
MapRotation=INV_Grad_1
MapRotation=INV_Taiga_0
MapRotation=INV_Camp_1
MapRotation=INV_Feitoria_0
MapRotation=INV_MountainPeak_1
Skirmish:[]
MapRotation=SKM_Castello
MapRotation=SKM_Contraband
MapRotation=SKM_Camp
MapRotation=SKM_Crossroads
MapRotation=SKM_Grad
MapRotation=SKM_ThePit
MapRotation=SKM_MountainPeak
MapRotation=SKM_Tourney
MapRotation=SKM_Taiga
MapRotation=SKM_Taiga_64
MapRotation=SKM_MountainPeak_64
MapRotation=SKM_Grad_64
MapRotation=SKM_Camp_64
MapRotation=SKM_Castello_64
Team Deathmatch:[]
MapRotation=TDM_Contraband
MapRotation=TDM_Camp
MapRotation=TDM_Camp_64
MapRotation=TDM_Castello
MapRotation=TDM_Castello_64
MapRotation=TDM_Feitoria
MapRotation=TDM_Feitoria_64
MapRotation=TDM_Grad
MapRotation=TDM_ThePit
MapRotation=TDM_MountainPeak
MapRotation=TDM_Taiga
MapRotation=TDM_Taiga_64
MapRotation=TDM_Tourney
Deathmatch/Free For All:[]
MapRotation=FFA_Contraband
MapRotation=FFA_Camp
MapRotation=FFA_Castello
MapRotation=FFA_Feitoria
MapRotation=FFA_Grad
MapRotation=FFA_ThePit
MapRotation=FFA_MountainPeak
MapRotation=FFA_Taiga
MapRotation=FFA_Tourney
Horde:[]
MapRotation=HRD_Camp
MapRotation=HRD_Castello
MapRotation=HRD_Feitoria
MapRotation=HRD_Grad
MapRotation=HRD_Taiga
MapRotation=HRD_MountainPeak
Battle Royale:[]
MapRotation=BR_Grad
MapRotation=BR_Taiga
Console commands[]
AdminLogin
Usage - "AdminLogin password" - Logs user in as server admin
AddAdmin
Usage - "AddAdmin SteamName" - Adds a user with steam name SteamName to your admin list. They must be in the server to use steamname. The command also accepts steamIDs regardless.
RemoveAdmin
Usage - "RemoveAdmin SteamName" - see AddAdmin above, same conditions apply.
AdminList
Usage - "AdminList" - Dumps the SteamIDs of all configured admins to the console
m.ShowServerStats
Usage - "m.ShowServerStats 1" - Shows players connected and server tick rate
PlayerList
Usage - "PlayerList" - Displays all the connected players session ID-SteamID-Username e.g. 88 - 12345566780 - PlayerOne
Kick
Usage - "Kick username/SteamID/session ID" - Kicks player from server - Note you can wrap a player name in quotations if they have a space in their name or just use their session ID number from playerlist
Ban
Usage - "Ban username/SteamID/session ID duration reason" - Bans player from server - Note you can wrap a player name in quotations if they have a space in their name or just use their session ID number from playerlist
AddBots
Usage - "Addbots 5" - Adds desired number of AI bots to the server. It does not seem to be possible to add them to the enemy team in horde mode.
RemoveBots
Usage - "Removebots 5" - Removes desired number of AI bots from the server
Slomo
Usage - "slomo 0.5" - Changes the game speed to half.
ToggleDamage
Usage - "ToggleDamage" - Disables damage dealing to other players and bots (though not to things like destructible doors). Execute it again to re-enable damage.
ToggleStamina
Usage - "ToggleStamina" - Disables stamina draining from taking damage, missing attacks for everyone and maxes their stamina bars.
RCON commands[]
Alive
Listen
Usage - "Listen <broadcast type> <start|stop>". Subscribes your RCON client to receive data on various broadcast types. Valid broadcast types are:
- all - subscribes to all the below events.
- login - subscribes to player join/leave events.
- chat - subscribes to the chat feed to be notified of new chat messages.
- matchstate - subscribes to the match's state to be notified of when a match ends or begins.
- killfeed - subscribes to the kill feed to be notified of kills.
- scorefeed - subscribes to the score feed to be notified of changes in player score.
- custom - subscribes to the custom feed. For use by modders.
ListenStatus
Lists the broadcast types your RCON client is currently listening for.
AdminList
Lists all server admins.
BanList
Lists all banned players.
MuteList
Lists all muted players.
PlayerList
Lists all players currently connected to the server. This provides each player's PlayfabID, profile name, ping and team. This command also tells you how many bots are connected to the server.
MapList
Lists all maps in the server's map rotation. This provides each map's index in the array as well as it's name.
AddMap
Usage - "AddMap <map name> <array index> <update config>". Example: "AddMap FFA_ThePit 8 true". If <update config> is set to true, your server's Game.ini file will be modified so that the added map persists through server restarts.
RemoveMap
Usage - "RemoveMap <map name> <update config>". Example: "RemoveMap FFA_ThePit false". If <update config> is set to true, your server's Game.ini file be modified so that the added map persists through server restarts.
AddAdmin
Usage - "AddAdmin <playerfabID>". This command grants admin rights to the specified player.
RemoveAdmin
Usage - "RemoveAdmin<playerfabID>". This command revokes admin rights to the specified player.
AddBots
Usage - "AddBots <amount> [team]". This command adds bots to the server. Team is an optional parameter.
RemoveBots
Usage - "RemoveBots <amount> [team]". This command removes bots from the server. Team is an optional parameter.
Say
Usage - "Say <message>". Broadcasts a message to all players on the server.
CustomSay
Usage - ?
String
This command is for passing custom data back and forth. This is only really useful for modders.
Event
This command is for triggering events*. This is only really useful for modders.
SpawnServerActor
Usage - "SpawnServerActor <ActorPath> <Transform>". This command spawns in server actors, mainly useful for modders.
Kick
Usage - "Kick <Player name|PlayfabID> <reason>". This command kicks a player from the server for the given reason.
Ban
Usage - "Ban <Player name|PlayfabID> <reason> <duration>". This command bans a player from the server for the given reason. Duration is in minutes. A duration of 0 indicated a permanent ban.
Unban
Usage - "Unban <PlayfabID>". This command unbans a currently banned player.
Mute
Usage - "Mute <Player name|PlayfabID> <duration>". This command mutes a player for the duration provided. Duration is in minutes. A duration of 0 indicated a permanent mute.
Unmute
Usage - "Unmute <PlayfabID>". This command unmutes a currently muted player.
Scoreboard
This command displays a string version of the scoreboard.
Info
This command displays server info including the hostname, server name, version, game mode and map.
Stats
This command displays server stats including the minimum tick rate, the maximum tickrate, the average tick rate, InBytesPerSecond and OutBytesPerSecond.
WriteToConsole
Usage - "WriteToConsole <message>". This command writes a custom message to the server's console and log. Useful for custom logging.
ChangeTeam
Usage - "ChangeTeam <Player name|PlayfabID> <team>". This command changes a player's team.
ModifyIniVar
Usage - "ModifyIniVar <engine|game> <section name> <variable name> <value> <type>". This command updates a variable within the provided file (engine for Engine.ini or game for Game.ini). Supported types are: bool, int, float, string, text, vector2d, vector, rotator, color.
GetMatchDuration
This command displays how many seconds are remaining in the current match.
ExtendMatchDuration
Usage - "ExtendMatchDuration <seconds to add>". This command adds the provided number of seconds to the match's timer.
SetMotd
Usage - "SetMotd <website url>". This command changes the webpage shown to players when they join the server.
TeleportPlayer
Usage - "TeleportPlayer <Player name|PlayfabID> <x=#,y=#,z=#>". This command teleports a player to the given location on the map.
KillPlayer
Usage - "KillPlayer <Player name|PlayFabID>". This command kills the given player.
GetTeamDamage
Usage - "GetTeamDamage <Player name|PlayfabID>". This command displays the amount of team damage a dealt as well as the percentage of their total damage output which has been team damage.
RenamePlayer
Usage - "RenamePlayer <Player name|PlayfabID> <new name>". This command changes a player's display name to a new name. Please do not abuse this command.
ChatLog
Usage - "ChatLog <amount of messages to retrieve>". This command retrieves the provided amount of messages from the chat log.
ChangeLevel
Usage - "ChangeLevel <Map name>". Can be used to change the map.
RestartLevel
Restart play on the current map you’re on.
Shutdown
This command shuts down the server.
References and information sources[]
- Linux setup guide by Vin¢