Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
To get started is to visit and pick a server to install. Follow the simple step-by-step guide to install your game server on Linux.
Once the installation is complete a working game server will be available. Use the various LinuxGSM commands available to manage the game server.
Read through this documentation to ensure you understand how to configure your game server.
The section will help you understand how to configure both LinuxGSM and the game server.
The command-line tool for quick, simple deployment and management of Linux dedicated game servers.
User docs:
Dev Docs:
Welcome to the LinuxGSM documentation covering various topics related to the project.
Contributions to this documentation are welcome and can be submitted via GitHub.

LinuxGSM comes with a game server check-update command. All SteamCMD games servers are supported, as well as some other servers such as Teamspeak, Minecraft, Mumble & Factorio.
Standard: ./gameserver check-update
Short: ./gameserver cu
Unlike the update command check-update will check for any available updates and take no action if no update is available. If there is an update it will send an alert.
For game servers that use LinuxGSM Workshop downloads (v26.4.0+), check-update also reports Workshop mod updates without applying them.
A can be set to run check-update at any given time.
To edit cronjobs, type:
crontab -e
A cronjob can be run as the gameserver user or as root, this choice is down to personal preference. Remember to amend the examples to match a specific game server.
Here is an example of a user-based cronjob to check for an update once an hour.
Here is an example of a root-based cronjob to check for an update once an hour.
is a great resource to generate cronjobs.
Game server config files are the configuration files used by the game server to store various game server settings, such as the server name, maximum players, map cycle, etc. These settings can be edited to customise a game server. Different game server configs can use different syntax and work slightly differently, but all do the same basic job of editing a game server settings.
The details command will provide you with some config file information. However, some servers do use multiple config files.
./gameserver details
Whenever possible, LinuxGSM provides basic easy-to-use game server configuration files. A dedicated repository has been made so all server admins can benefit, even Windows admins.
This configuration file is automatically downloaded upon server installation.
Whenever possible, LinuxGSM uses a custom name for configuration files that contains the ${servicename} variable in it in order to allow the running of with different config files. If the game does not allow for that, then the usual name will be used.
systemd is the default init system for most modern distros.
You need to create a service file in /etc/systemd/system/
Example ts3server.service
Replace the user and paths to fit your setup.
You need to reload the systemd-daemon once to make it aware of the new service file by systemctl daemon-reload
Now you can do
The crontab will allow you to create that allow you to run a command on a set time or on boot. The below example uses
Many game servers require start parameters, these are command-line options that are set with the server executable when the server starts.
Using over parameters is preferred, however, sometimes this is not an option. When this is the case only parameters or a mixture of game server config and parameters will be used.
Parameters being used by the game server can be found in ./gameserver details. To alter them, you will need to edit .
LinuxGSM often uses predefined parameters that can be edited. This makes adjusting common settings easier and allows them to be displayed in ./gameserver details.
Additional command-line parameters can be added to the startparameters setting.
The debug command is used to start your server directly in your current terminal (outside of () and should only be used for diagnosing issues. If a game server is already running in the background debug will stop it to start a debug session.
Standard: ./gameserver debug
Short: ./gameserver d
The validate command will check the server files to make sure they match the SteamCMD repository. This command is useful if game server files are deleted, corrupted or SteamCMD is failing to update.
Validation will overwrite any files that have been changed. This may cause issues with customised servers. For example, if you customise mapcycle.txt, this file will be overwritten to the server default. Any files that are not part of the default installation will not be affected. It is recommended you use this command only on initial installation and if there are server issues.
Standard: ./gameserver validate
Short: ./gameserver v
The force-update command bypasses the update check and runs the SteamCMD update regardless of update availability. This will run the SteamCMD update and restart the game server.
Force update is a useful feature for admins that restart their server daily. It allows LinuxGSM to check for updates while restarting the server.
Standard: ./gameserver force-update
Short: ./gameserver fu
The skeleton command created a mirror of the directory structure of a game server. This allows you to create a skeleton directory of custom files, configs, maps etc.
Standard: ./gameserver skeleton
Short: ./gameserver sk
The skeleton directory is created in skel.
Skeleton can be used alongside version control software like or backed up to save custom configurations for a game server. If a change is added to your git repository/backup it is possible to pull/copy the updates to your game server. If you want to re-deploy a game server you can create a fresh installation and pull/copy in the custom changes over the top of the fresh install.
Minecraft: Java Edition required Java 16
Minecraft java edition splits up its release in two ways. Firstly a branch is either classed as a release or a snapshot. A release is a stable version of the game whereas a snapshot is still under development
With LinuxGSM you can specify a specific release/snapshot or the latest release/snapshot. By default, LinuxGSM will use the latest release.
TODO
Stop mode allows a game server to gracefully shutdown by sending a stop signal to the server. The stop signal might be one of the various commands such as stop,quit,exit etc. In some cases, this is important to give the server time to save its state.
# Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
# 12: shutdown
# 13: Soulmask
# 14: Running With Rifles
# 15: Rising World
# 16: Conan Exiles
stopmode="7"@rebootAfter a reboot, any game server that has a "started" status will be started on boot. Servers that were manually stopped will remain stopped.
To learn more, see cronjobs and automated monitoring.
Start a game server unconditionally, even if you manually stop a server.
To learn more, see Start-Stop-Restart
rc.local is another method to run scripts on boot. Any commands added to the rc.local file will run on boot.
0 * * * * /home/username/gameserver check-update > /dev/null 2>&10 * * * * su - username -c '/home/username/gameserver check-update' > /dev/null 2>&1/home/gameserver/skel[Unit]
Description=LinuxGSM Teamspeak3 Server
After=network-online.target
Wants=network-online.target
[Service]
Type=forking
User=ts3server
WorkingDirectory=/home/ts3server
#Assume that the service is running after main process exits with code 0
RemainAfterExit=yes
ExecStart=/home/ts3server/ts3server start
ExecStop=/home/ts3server/ts3server stop
Restart=no
[Install]
WantedBy=multi-user.targetsystemctl start ts3server # Start the server
systemctl stop ts3server # Stop the server
systemctl enable ts3server # Enable start on boot
systemctl disable ts3server # Disable start on boot @reboot '/home/username/gameserver monitor' > /dev/null 2>&1crontab -e
@reboot su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1crontab -e
@reboot su - username -c '/home/username/gameserver start' > /dev/null 2>&1nano /etc/rc.local
su - username -c '/home/username/gameserver start'For source servers, the default server.cfg is not used with LinuxGSM. Instead if you're running ./csgoserver, then the config file will be called csgoserver.cfg.
LinuxGSM will always check a config file is present when starting a server. If a config file is missing, it will re-download the default one or give a warning.
Game servers have many different ways of managing settings. Some are set within start parameters, while some are set within a configuration file.
One of the goals of LinuxGSM is to make managing these as easy as possible, by providing all important settings out of the box, wherever they are. There is no general rule about where config files are set. It is a good idea to look for the official documentation of the game server that you're trying to run in order to find relevant information about settings.
If you found settings that are absent from the default configuration file provided by LinuxGSM that would be a useful addition, then you can open an issue or a pull request.
./gmodserver details
gmodserver Script Details
==================================================================================
Service name: gmod-server
gmodserver version: 170110
User: ultimatebyte
GLIBC required: 2.15
Email alert: off
Pushbullet alert: off
Update on start: off
Location: /home/gmodserver
Config file: /home/gmodserver/serverfiles/garrysmod/cfg/gmod-server.cfgstartparameters="-game nmrih"
./srcds_run -game nmrih
7 Days to Die
Gold Source Servers
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
defaultmap="map_name"
gamemode="game_mode"
maxplayers="42"
port="27015"
sourcetvport="27020"
clientport="27005"## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="-game nmrih -strictportbind -ip 91.121.72.41 -port 27015 +clientport 27017 +tv_port 27016 +map nmo_broadway +servercfgfile nmrih-server-1.cfg -maxplayers 8"Discord is a VoIP app that allows other applications to send messages via a webhook. This functionality is used to allow users to recieve alerts about LinuxGSM.
A webhook is required to post alerts to a Discord text channel
Right-click on the text channel you want to use and select Edit channel.
Select Webhooks > Create Webhook
Name: LinuxGSM
Icon:
Copy the Webhook URL
Turn on discord alert and enter the URL in to the . (~/lgsm/config-lgsm/<gameserver>/common.cfg)
Rocket.chat is an open-source collaboration tool.
Follow the Rocket.chat guide on how to create an incoming webhook.
Copy the Webhook URL.
Turn on Rocket.chat alerts and copy the URL into the . (~/lgsm/config-lgsm/<gameserver>/common.cfg)
is an opt in voluntary feature that allows you to provide selected information about your game server to be displayed on by enabling the stats setting.
All data collected is used to provide insight into which game servers, distros, and servers are popular with game server admins. This will assist in prioritising LinuxGSM development and give me (Daniel Gibbs) a never before insight into the number of people using LinuxGSM. This is a massive personal motivator as it has previously been difficult to know how many people actually use LinuxGSM.
The collected data is publicly available to view in a dashboard on
Below is a list of types of data collected
Custom Mods and Maps are supported in Insurgency: Sandstorm via . Please use this basic guide to get started using custom mods more in-depth information can be found at
To get started you will need a mod.io account, once you have signed in, click your username as the top right, and click API Access from the left navigation.
Under OAuth 2 Management > Generate Access Token, enter a name to give your token and give it read access and click Create Token.
Once the token is generated you will need to copy it to your game servers Engine.ini. Paste the following into Engine.ini
Information for Sven Co-op servers
Official Resources
The discord contains information for Sven Co-op under the information tab including mapping guides, server config information, and angelscript documentation, among other things.
Reminder: Sven Co-op is incompatible with both CentOS and Fedora as libssl.so.1.0.0 is not available
Survival Mode settings, can be set in svenserver.cfg
An MTA server comes in two parts. MTA itself and then the resources you install. There is the option to install the default MTA resources to your server within LinuxGSM on install or using the ./mtaserver install-default-resources option. There are many resources available so it is recommended that you take a look at the MTA community resources page
Resources are a key part of Multi Theft Auto. A resource is essentially a directory that contains a collection of files - including essential script and content files, plus a meta file that describes how the resource should be loaded - and runs on a Multi Theft Auto dedicated server.
A resource can be seen as being partly equivalent to a program running in an operating system - it can be started and stopped, and multiple resources can run at once. Its worth remember though, that unlike programs on an operating system, there is no multi-tasking between resources. Resources generally contain content and Lua scripts for game modes, user interfaces and other tasks affecting the players that are connected to the dedicated server on which the resources are running.
For a collection of user created resources, head over to our web page which serves as a place for hosting our community's resources.
LinuxGSM provides an easy way to start, stop and restart your game server. LinuxGSM knows the location of the server binaries and inserts the start parameters to allow the server to start. LinuxGSM will also run various checks to prevent issues and apply any required server fixes to get the game server running.
Will start the server in a session allowing the server to run in the background.
./gameserver start
Stop will attempt a of a game server. Failing this stop will kill the tmux session.
./gameserver stop
If the stoponlyifnoplayers setting is enabled, LinuxGSM will only stop the server when it is empty and prevent it from stopping otherwise.
is a cloud-based set of proprietary team collaboration software tools and online services.
A webhook is required to post alerts to a slack.
Follow slack's guide to setting up an .
Copy the Webhook URL
LinuxGSM comes with an game server update command. All games servers are supported, as well as some other servers such as Teamspeak, Minecraft, Mumble & Factorio.
Standard: ./gameserver update
Short: ./gameserver u
Update will check for any available update, taking no action if no update is available. If there is an update it will apply the update, restarting the server if already running.
For game servers that use (v26.4.0+), update also updates the Workshop mods set in workshopmods
LinuxGSM allows alerts to be received using various methods, should the game server require your attention.
Alert settings can be changed in
More info allows you to get further info about an alert using hastebin.com. Many alerts only give basic info, unlike email. More info displays the same output as email in a link within a basic alert.
The IP address you want to be displayed in alerts.
By default, the LinuxGSM alert will display the external internet facing IP. Failing this will fall back to the server IP. If the IP is incorrect it can be manually set using displayip="".
allows the sending of push notifications to various devices such a PC, phone and tablet. This functionality is used to allow users to receive alerts about LinuxGSM.
A Pushover application and your user key is required to send messages to Pushover.
Visit to create a new application.
name: LinuxGSM
jq allows LinuxGSM to filter json files to extract specific useful data.
7 Days to Die uses telnet to admin the server. This is enabled by default with no password however will only listen on localhost.
Installs, updates and removes the Steam Workshop mods set in workshopmods, for game servers that cannot download Workshop content themselves.
Available for Arma 3, Barotrauma, Colony Survival, DayZ, Hurtworld, Left 4 Dead 2, Operation: Harsh Doorstop, Soldat, Squad, Squad 44, Starbound and Stationeers from v26.4.0. See for setup and requirements.
Expands any collections in workshopmods and checks each item for updates.
Downloads new and changed items with SteamCMD while the server keeps running.
change-password resets the TeamSpeak 3 server query password. The server will reboot and a new password will be generated.
TeamSpeak 3
Standard: ./gameserver change-password
Short: ./gameserver pw
The console command allows access the output of the game server executable. Depending on which server you are running it allows you to see the current activity of the game server, check errors in real time, and input commands.
Run the following command to access console:
Standard: ./gameserver console
Short: ./gameserver c
Answer y at the prompt.
To exit the console: Press CTRL + b, then, press d
1.5
Debian 8
1.4
Debian 9
1.5
Debian 10
1.5
CentOS 7
1.6
CentOS 8
1.5
Ubuntu LTS 16.04
1.4
Ubuntu LTS 18.04
Distro - It is useful to know which distros LinuxGSM is being used on to help focus development.
LinuxGSM Version - The currently installed version of LinuxGSM.
Alert Types - The alert types that have been turned on.
Gathering game server usage helps set the minimum required hardware for each game server. This is particularly useful for resource-intensive servers.
CPU Used - The CPU usage in MHz (rounded to the nearest 100MHz) of the game server.
RAM Used - The memory usage in MB (rounded to the nearest 100MB) of the game server.
Disk Used - The storage taken by the game server (serverfiles directory) of the game server.
Gathering information on the server hardware being used to host a Game Server. This provides useful stats on the sorts of hardware game server admins are deciding to use.
CPU - Gathers the CPU Manufacturer and Model.
RAM - Total server RAM.
Disk Space - Total server disk space.
The country of origin is shown identifying where in the world LinuxGSM is being used.
The country of origin is no longer working with GA-4 but might be available again in the future
LinuxGSM Stats uses Google Analytics (GA-4) event-driven API to collect information to allow Daniel Gibbs to get an idea of which game servers and distros are popular identify system requirements for game servers and know the sort of servers game server admins are using.
Short answer - Yes
Long answer - All information gathered is anonymous, the server IP address, hostname, etc., or other identifying information is not collected. When LinuxGSM Stats is first run it creates a UUID (Unique identifier) which is a randomly generated ID to allow Google Analytics to identify your unique information anonymously. Since this ID is random there is no way to know where the info is from, only that it is from the same sender.
The UUID is located inlgsm/data/uuid.txt,if this file is deleted a new UUID will be generated.
Since LinuxGSM is open-source you can also see how the data is gathered by looking at the info_stats.sh file.
Data is sent every time the monitor runs as this is the only way to regularly send data.
To enable LinuxGSM Stats simply add the stats="on" setting to the common.cfg file. This can also be enabled on install.
Installs each item where the game loads mods from. For Arma 3 and DayZ, it also converts file names to lowercase and copies keys into serverfiles/keys.
Removes mods that are no longer in workshopmods. Mods you added yourself are left alone.
If the server is running and anything was installed, updated or removed, the server is restarted.
The update command runs the same Workshop update after updating the game server, and check-update reports Workshop updates without applying them.
restart is requested while players are online, the restart is postponed rather than cancelled: LinuxGSM records a restart request and the monitor command will retry the restart automatically once the server is empty. Enable a monitor cronjob for postponed restarts to be carried out.An update that finds an update while players are online is postponed in the same way, and the monitor command applies it once the server is empty.
By default this protection applies to all commands that stop the server, including update. To limit it to only the explicit stop and restart commands (so an update can still stop the server even while players are online), set stoponlyifnoplayersallcommands to off.
LinuxGSM can count down with in-game messages before it stops, restarts or updates the server. See Player Warnings.
Will simply stop, and then start the server.
./gameserver restart
It is possible to update a game server on start, by editing the LinuxGSM config.
updateonstart="on"
This will take longer for the game server to start but can be useful for servers that are kept offline most of the time.
A cronjob can be set to run update at any given time.
To edit cronjobs, type:
crontab -e
A cronjob can be run as the gameserver user or as root, this choice is down to personal preference. Remember to amend the examples to match a specific game server.
Here is an example of a user based cronjob to check for an update once an hour.
Here is an example of a root based cronjob to check for an update once an hour.
It is recommended to check for updates once per hour.
crontab.guru is a great resource to generate cronjobs.
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""./gameserver workshop-update./gameserver wustoponlyifnoplayers="off"# Apply "stop only if empty" to every command that stops the server (default).
stoponlyifnoplayersallcommands="on"
# Or limit it to explicit stop/restart only:
# stoponlyifnoplayersallcommands="off"warnplayerstimer="15"0 * * * * /home/username/gameserver update > /dev/null 2>&10 * * * * su - username -c '/home/username/gameserver update' > /dev/null 2>&1TOKEN HEREAdd the -Mods parameter to your game server start parameters.
Next you will need to specify which mods you want to add to your game server.
Create the Mods.txt file located Insurgency/Config/Server/Mods.txt
In the txt file you will need to specify each mod ID line by line. The mod ID can be found on the mods details page at mod.io. Once restarted the mod will be available to use.
To use this custom map you will need to add it to your mapcycle and if required, your default map
Create MapCyle.txtand add the custom map to your mapcycle.
If you want the custom map to be the default edit your start parameters
Once the server is restarted the custom map should be available on your game server.
[/Script/ModKit.ModIOClient]
bHasUserAcceptedTerms=True
AccessToken=TOKEN HEREmkdir -p Insurgency/Config/Server
touch Insurgency/Config/Server/Mods.txttouch Insurgency/Config/Server/MapCyle.txt
(Scenario="Scenario_TORO_Checkpoint_Security",Lighting="Day",Mode="Checkpoint")
(Scenario="Scenario_TORO_Checkpoint_Insurgents",Lighting="Day",Mode="Checkpoint")defaultmap="TORO"
defaultscenario="Scenario_TORO_Checkpoint_Security"//Default Survival state (enabled by default) 1=on 2=off
mp_survival_mode
//1=Players can vote to enable/disable survival 2=Players can't vote on this
mp_survival_voteallow
//Number of retries before "next map" vote starts. -1 is infinite, 3 is default
mp_survival_retries
//Minimum number of players needed to start Survival mode
mp_survival_minplayers
Turn on slack alerts and enter the URL in to the LinuxGSM settings. (~/lgsm/config-lgsm/<gameserver>/common.cfg)
# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="on"
slackwebhook="your webhook url"Once the application has been created get the API key and user key (which can be found in the pushover dashboard). Turn on Pushover alerts and paste in API key and user key in the LinuxGSM config.
# Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover
pushoveralert="on"
pushoveruserkey="yourpushoverid"
pushovertoken="b5u24t1wua34gmh14kr1s3erkwi7tl"# Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord
discordalert="on"
discordwebhook="https://discordapp.com/api/webhooks/3539332633367897009/5t_K4GkuBaR2-69TsKqXmHIya1ck1tirnu_Fst-DUC00dye98eaa_I6uTIcHEsi7a17K"LinuxGSM cannot always provide support for specific game servers. However, there are various support forums available for specific game server support that may be useful. Below is a list of useful links support forums:
The dedicated server is a native Linux build, downloaded with SteamCMD (App ID 4019830, about 5 GB). LinuxGSM recommends at least 2 GB of RAM.
Most server settings live in DedicatedServer.ini, which the server creates the first time it starts:
serverfiles/RSDragonwilds/Saved/Config/LinuxServer/DedicatedServer.iniInstall and start the server once so that DedicatedServer.ini is created:
Find your Player ID in the game's settings menu and set it as OwnerId in DedicatedServer.ini:
Start the server again:
These settings are read from DedicatedServer.ini, not from LinuxGSM config. Stop the server before editing.
./rsdwserver details shows the server name, world name and Owner ID that LinuxGSM reads from this file.
To change the port, set port in your LinuxGSM instance config (lgsm/config-lgsm/rsdwserver/rsdwserver.cfg). It is passed to the server as -Port=. Players can join with Direct Connect using your server's IP and port.
monitor checks the game server to ensure the server functioning. First checking the game server process is running then querying the game server to check the game server is responding. monitor is designed to be an automated command that frequently checks the game server, rebooting and alerting if required.
Standard: ./gameserver monitor
Short: ./gameserver m
Monitor first checks that the server process or tmux session is running. If it is, it will then attempt to query the server using gamedig or query_gsquery.py. Should this fail to query it will attempt to query every 15 seconds over 60 second period. Should this fail the server will be rebooted and an alert sent out.
During server start, map change, workshop downloads, the server is unable to answer queries.The monitor will wait for 60 seconds as it is common for servers to stop responding to queries during a map change. This wait prevents monitor from rebooting a server that does not require it.
Monitor is designed to be and automated task, using to allow a game server to be frequently checked.
As a reminder, you can edit your cronjobs, typing :
Use these cron examples to setup automated monitoring.
A user based cronjob to monitor your server every 5 minutes .
A root user based cronjob to monitor your server every 5 minutes .
To learn more about automation, see .
To be notified when a server fails alert notifications can be setup , see .
Game Servers do not respond to queries while the server is booting. Query delay prevents monitor from giving a false positive should it query while the server is booting. A timed delay prevents monitor from using query at all during a set time (normally either 1 or 5 minutes) after start, giving the server time to boot and become ready to accept queries. Query delay timer can be adjusted using the querydelay setting.
Starting and stopping the game server activates and deactivates monitor. This prevents the server being manually stopped only to be started again by monitor.
Game Port Default: 7777 UDP Handled by: LinuxServer-KFEngine.ini
Query Port Default: 27015 UDP Handled automatically or handled by parameters. The formula for finding query port assigned automatically is 19238 + assigned game port.
Web Admin Default: 8080 TCP Handled by: KFWeb.ini
Steam Port Default: 20560 UDP Handled automatically. The formula for finding the steam port is 12783 + Game Port.
LinuxGSM installations contain configSubDir=servername in the command line by default, which creates a folder for config files named after the server. The default directory is /home/user/serverfiles/KFGame/Config/kf2server . Use these files to change server settings.
Workshop content is added in LinuxServer-KFEngine.ini in the OnlineSubsystemSteamworks.KFWorkshopSteamworks section
This will only work for Workshop items that the server downloads itself, that are listed in the [OnlineSubsystemSteamworks.KFWorkshopSteamworks] section as described above.
Make sure that the server is not running. If it is running, the Workshop setup will be overridden the next time you restart the server.
Find the section [IpDrv.TcpNetDriver] in the PCServerEngine.ini config file.
Add the line "DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload" to that section. If there are other "DownloadManagers=" lines, make sure this one is the first.
Most servers require a specific version of glibc installed. Newer distros normally have the required version. However the older the distro the less likely the server will run. Check the requirements below. If you have an older distro the game server may still run with a glibc fix.
A complete list can be found here.
List of distros and there glibc version.
is also a great source to find this information.
glibc version history available on .
SFTP (Secure File Transfer Protocol) is the transfer protocol to view and transfer files over SSH. SFTP works the same as FTP but is encrypted.
Encrypted
Nothing extra to install (such as FTP server)
Works like any other FTP server
Compatible with the popular clients such as Filezilla and WinSCP
You can login to any SSH accessable Linux user.
Connect like any FTP except it uses the port (default 22)
Use your linux username / password
You might need to set protocol to SFTP in your FTP client.
Connect to a server as root.
Use FTP if SFTP is available.
Here is why you shouldn't
By logging in as root, you might accidentally remove essential system files or put useless files into the wrong place and mess up with your system.
But even more annoying, any file you'll write will belong to root, and the user won't be able to either read, change, or execute writtent files as root.
FTP is an unencrypted protocol, therefore it is very unsecure to edit sensitive files using it.
How to operate without root FTP login ?
If you need to edit system config files, then do like everyone else : use an SSH text editor like "nano" or "vi".
Set your FTP so that you can login as users with a valid shell from the machine. Eventually, disable root FTP login.
Oh, one more thing... Did we talk about SFTP ?
There are hundreds in integrations available on IFTTT allowing you to send alerts in all sorts of different ways to various services and devices. This functionality is used to allow users to recieve alerts about LinuxGSM.
To enable IFTTT you will need to setup a Webhooks integration.
Login and connect the Webhooks integration
Select Documentation to get your IFTTT API key.
Paste the API key into .
An event name is a word used to trigger IFTTT event. This word is used when setting up an applet and can be any word you choose.
IFTTT allows 3 different values to be sent using the webhook; Value1, Value2 and Value3. LinuxGSM sends different data for each value as listed below.
Value1: Sends the name of the server e.g csgoserver
Value2: Sends an alert subject e.g Alert - csgoserver - Test
Value3: Sends an alert summary message.
Create a New applet
Select the Webhooks service
Choose Receive a web request
Many admins who have tried, reported a local server does not appear on the LAN tab in the steam browser.
Connect using the console command.
connect IP:PORTIf the port is 27015, then you can just use : connect IP
connect 192.168.1.10:27025Add the server to the server browser's favourites. If in-game, then go to the legacy browser if applicable to find it. The syntax to use is the same as for the console connection.
As this github issue shows, there might be a possible configuration that fixes the issue, but LinuxGSM devs were not able to reproduce it at the time of writing the doc, so this information is purely experimental and you are welcome to update it or post on the issue if you have useful information to share about it.
Edit your using your files
Change ip="0.0.0.0" to an actual interface IP, for example ip="192.168.1.10" ; this will allow LinuxGSM to and query your server properly.
In the fn_parms section, add +sv_lan 1 and make sure you replace -ip ${ip} with -ip 0.0.0.0
Make sure your server main port listens to one of these IP or IP ranges: 4242 ; 26900-26905 ; 27015-27020 ; 27215
Logs are an important part of monitoring a server as it allows you to know what has been happening. LinuxGSM has a log directory that allows you to track the gameserver, console and LinuxGSM itself.
If your user is gameserver, then LinuxGSM logs are located in the following directory:
/home/gameserver/log
This "log" directory contains two other directories:
script, logs LinuxGSM script activity
console, logs gameserver [console](../commands/console.md) output
game, is a redirect to the game server log files if available.
Settings
You can alter these settings to change LinuxGSM behavior:
Note: logdays="0" means logs will be removed if older than 24h.
LinuxGSM clears outdated logs according to logdays variable setting. This will affect script and console logs, as well as common game logs.
LinuxGSM also clears logs from common locations to prevent them from using gigabytes of disk space, including:
${systemdir}/logs
${systemdir}/*/logs
${systemdir}/addons/sourcemod/logs
Note: ${systemdir} designates the location of your game server installation
A Linux server's own email solution can be used to receive alerts about LinuxGSM.
LinuxGSM will send an email using the mail command.
Postfix or equivalent must be setup and correctly configured before sending emails. Failure to correctly configure Postfix and a domain for your server will mean the email alert may be flagged as spam or not arrive at all. Configuring postfix is not covered here, but there are many tutorials online to help.
If you only need to relay outbound alert emails through an external SMTP provider rather than run a full mail server, nullmailer is a lightweight alternative to Postfix. On Debian/Ubuntu, LinuxGSM will detect an existing nullmailer setup (/etc/nullmailer) and install mailutils alongside it instead of postfix, so an existing nullmailer relay won't be overwritten by LinuxGSM's dependency check.
Sending mail directly from a home/VPS IP is likely to be flagged as spam. Relaying through a dedicated email provider improves deliverability, and several offer a free tier suitable for the low volume of alert emails LinuxGSM sends:
Any of these can be used as the smarthost for Postfix or nullmailer — see the provider's SMTP relay setup docs for the exact Postfix/nullmailer configuration.
To enable email alerts you will need to add an email address to the .
Allows the selection of specific builds of a game server in SteamCMD
Game developers sometimes make available several builds of the game server on Steam, often to allow beta testing of new releases. These builds are made available via branches (betas) and can be entered in the LinuxGSM Config.
A list of all available branches for a game server are listed on SteamDB under the appid depots.
The default SteamCMD branch is public. However, it is possible to use other builds by entering a branch name in the branch setting in your LinuxGSM config.
# Steam App Branch Select
# Example: "latest_experimental"
branch="staging"Some branches require a password. This can be done by entering a password in thebetapassword setting in your LinuxGSM config.
betapassword="branchpassword"LinuxGSM uses tmux to run servers in the background so the server instance is not terminated when you close a terminal session.
Tmux is a key component of LinuxGSM and replaced screen which was used on earlier versions. tmux has a few improvements over screen; mainly being better at handling standard Linux users, this was a major issue when developing with screen. tmux allows LinuxGSM to call up a game server running in the background so you can see what it is doing; this feature is available with console feature.
Some server admins have attempted to run LinuxGSM within a tmux or screen session. As LinuxGSM calls tmux it is not possible to run LinuxGSM within a tmux or screen session.
tmux 1.8 has an issue that prevents console logging from working. This is because the pipe-pane feature is broken in tmux 1.8 causing it not to output the console to the console log files. The only solution is to use another version of tmux.
This issue normally occuires with CentOS and is caused by the standard user not having permissions to user /dev/ptmx.
To fix this the user needs to be part of the tty group.
To confirm the user has been added check /etc/group.
If the default version of tmux (1.8) installed on CentOS 7 it will fail to log the console output. To fix this it is possible to upgrade to a newer version of tmux using the repository.
Install Ghettoforge with the following command.
Install tmux using the Ghettoforge repo.
Once installed restart the server to complete the upgrade.
In Linux, files and directories are owned by a user and a group (see File Ownership). On top of that, this user, group, and other ones (groups and users), have different permissions on these files. That's what we call file permissions. You might need to change them. If this can be boring to new users, remember that this is a huge part of what makes Linux as secured as it is, and you are required to know this if you wish to do anything serious with Linux.
ls -al /path/to/file/or/dir
Sample output:
ultimatebyte@game:~$ ls -al twserver
-rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserverExplaination:
First character is a a - for files, or a d for directories
Three next ones are owner permissions: rwx
Three next ones are group permissions: rwx
Three next ones are "others permissions: rwx for groups and users that are now owning the file
First user listed is the owner
Next entry is the group owning the file
"r" stands for "read", "w" stands for "write", "x" stands for execute.
If any letter from rwx is showed as a -, it means that the permission is not granted.
Change permissions from files or directories
chmod
Append -R to your chmod
chmod -R
Set all permissions at once
chmod 777 == chmod -a+rwx
chmod 000 == chmod -a-rwx
First number is for user, second is for group, third for others
Default permissions are 755. If you wish to prevent other users from interacting with your files, then 750 can be great.
chmod -R 750 /home/userdir
We used rwx for these, but of course, you should pick the permissions you wish to add or remove.
chmod +rwx filename
Will add read, write, and execute permissions to this file anyone on the machine. r stands for "read", w for "write", and x for "execute"
Example : chmod +x filename
Will make the file executable by anyone on the machine.
chmod -rwx filename Will remove read, write, and execute permissions to this file anyone on the machine.
Note : root user is the only exception.
chmod -u+rwx
chmod -g+rwx
chmod -o+rwx
chmod -a+rwx
chmod -u+r,g-w,o-rwx
Of course, you can replace +rwx by anything previously mentioned
Advanced permissions management, you will likely not need this for game servers.
No GUID
chmod -R a-s /path/to/dir
chmod -R 0xxx /path/to/dir
Example : chmod -R 0640 /home/user/website
Set UID
Files will run as the user
chmod -R u+s /path/to/dir/
chmod -R 2xxx /path/to/dir
Set GID
Any subdir and subfile will have the same group
chmod -R g+s /path/to/dir/
chmod -R 4xxx /path/to/dir
Set GUID
Set both UID and GID
chmod -R a+s /path/to/dir/
chmod -R 6xxx /path/to/dir
Some game servers are listed on the steam master server list
For a game server to be seen online it normally has to register itself on a master server list. Valve maintains a master server for many different games. The master server is used to populate the server browser.
LinuxGSM can check that supported game servers are listed on the steam master server. This is useful for confirming that the server is actually registering and to help diagnose issues.
You can check that your server is listed on the master server by using ./gameserver details
Master server: listedsteammaster="true"There are instances when a game server might not appear in the server list due to several common reasons:
Server Loading Time: Please be patient while the server loads, as it may take some time before it becomes visible. Depending on the game server type, certain servers require additional time for tasks like map seeding or loading mods.
Blocked or Misconfigured : Ensure that the ports are correctly set up and not blocked. To verify the connection, try connecting directly to the server.
Filtering in Server List: Check that you have not applied any filters in the server browser. Filters like specific maps, "Empty Server," or "Password Protected" should be unchecked to display all available servers.
Server Browser Limitations: It's possible that the server browser functionality of the game might not list all available game servers. In such cases, not all servers may be visible in the server list.
The configuration of LinuxGSM is handled through several config files, which are loaded in a specific order. Understanding this process is crucial to ensure that settings are appropriately placed within the correct config files.
Relative to your installation directory, config files are located in:
The LinuxGSM configuration mechanism is intentionally designed to provide users with several advantages. These include the ability to access new features, retain default settings, effectively handle multiple instances, and allow LinuxGSM to update the configuration when necessary.
_default.cfg is the template config, this file is a base of all available default settings. It can not be edited and is updated by LinuxGSM when using ./gameserver update-lgsm. This config is loaded first.
common.cfg is used for common settings that apply to all game server instances of the same installation. This saves having to apply the same settings multiple times.
Depending upon the configuration of your server you may need to be more aware of its IP address configuration and how it relates to your game server.
Your game server can be hosted online using a server provider such as Linode or on a at home for either local-only LAN parties or allowing online players in through your router.
If your server is hosted on the internet using a server provider you should have been allocated a public internet IP address that will be accessible by everyone on the internet.
Using a home server or virtual machine on your desktop is a great way to get started with LinuxGSM. However, a local network (LAN) may require a better understanding of networking equipment, how local IP addressing works, and technologies such as and .
When a server is hosted on a local network it will be given a private IP address that is only accessible to other devices on your local network. This is fine if you want to get friends around host a game server for a good old-fashioned LAN party. But if you want to allow online players access to your local game server you will need to configure your home router's firewall and setup port forwarding using NAT.
All computers will have some sort of physical or virtual
To automate LinuxGSM you can set scheduled tasks using cronjobs, to run any command at any given time.
Commonly used scheduled tasks are:
Automatically check for updates
Automatically check for server crash and restart if needed
Automatically keep LinuxGSM up to date
FastDL (Fast Download) allows the client to download custom server content (maps, materials, models, particles, sounds, fonts, images) from a web server.
It is used to offload content downloads to a web server instead of relying on source servers (SRCDS) that only allows 20KBps downloads to clients. Content on the web server can be compressed to further speed up the download process. This means that custom content downloads much faster.
Valve now use steam workshop for most custom content however FastDL is still required in some cases.
LinuxGSM FastDL automatically creates the web directories and compresses the content for you.
All Source engine servers
HLDM Servers
LinuxGSM allows for the simple installation of game servers. The installer is designed to get a game server to a working state allowing the game server to be started right away.
The installer will:
Create required directories
Install/advise on required dependencies
Download the game server files
LinuxGSM uses the most recent version of UT2K4 server available for Linux.
v3369.3
This includes the various map packs such as the UT2004 Mega Pack.
Complete list of maps available with the LinuxGSM installer
A firewall is a security device that blocks or allows network traffic on to a system or network to prevent unauthorised access and help protect from malicious attack. Firewalls can also assist in rate limiting traffic to prevent too much traffic being sent to a system. This is useful for game servers to help prevent a DDoS (Distributed Denial-of-Service) attack that can overwhelm a game server.
Firewalls can be physical hardware devices that sit on a network, or software that sits on a server or desktop device. This page will focus mainly on software firewalls.
A (DDoS) attack occurs when multiple systems flood the bandwidth or resources of a targeted system, usually one or more web servers. Such an attack is often the result of multiple compromised systems (for example, a botnet) flooding the targeted system with traffic. A botnet is a network of zombie computers programmed to receive commands without the owners' knowledge. Server providers may offer DDoS protection, such as Arbor, that will mitigate such attacks before it reaches a server. However, this feature is often provided as a premium feature meaning often only available on more expensive servers. Some providers may also provide sub-standard protection that may incorrectly filter traffic. So be aware of what protection if a server provider has to protect your server.
is the most commonly used and supported Linux firewall utility, with many other tools interfacing with it To see iptables rules: iptables -L To flush (erase) iptables rules:
Autorefresh can lag the server when certain Lua files are edited. This happens when the refreshing cascades. This can be unwanted behavior when editing the scripts of a large project on a live server.
To disable autorefresh, add -disableluarefresh to parms.
Loading screens are added by defining a website with sv_loadingurl, which is in gmodserver.cfg by default. This file overrides other files.
Gamemode is changed by editing start parameters in the LinuxGSM config file.
Other game modes like Zombie Survival can be found on the .
is an open standard for decentralised, real-time communication. LinuxGSM uses the to send alerts to a room on any Matrix homeserver (matrix.org or self-hosted).
Create a room for LinuxGSM to post alerts into using any Matrix client (e.g. ).
An access token authenticates LinuxGSM as your Matrix account.
In Element: Settings > Help & About > Advanced > Access Token and click to reveal, then copy it.
LinuxGSM needs the room's internal room ID, which starts with ! (e.g. !wsxanjDijPztgZgrYL:matrix.org).
Turn on Matrix alerts and enter your details in the (~/lgsm/config-lgsm/<gameserver>/common.cfg).
Symlinks create multiple paths to a file or directory and are useful for saving space or having 1 set of files for multiple installs.
This guide is for pointing multiple directories to the same folder using ln command. Ln creates hardlinks and softlinks, the -s variable creates softlinks. These can be compared to shortcuts on windows, and are going to be used in this guide.
Example guide using two "one server + one user" installs with Sven Co-op:
Gameserver folder 1: /home/svencoop/serverfiles/svencoop_downloads/
Gameserver folder 2: /home/svencoop2/serverfiles/svencoop_downloads/
Shared folder /home/svencoop_content/svencoop_downloads/
allows the sending of push notifications to various devices such a PC, phone and tablet. This functionality is used to allow users to recieve alerts about LinuxGSM.
To enable Pushbullet alerts an Access Token needs to be generated. Access Tokens are available from Pushbullet setting found .
Once you have created a token insert it in to you .
Alerts can also be sent to Pushbullet channels. Channels are push notification feeds that can be subscribed to. Anything you push to a channel will instantly go to all of the channel's subscribers. Only the owner of a channel can push to it.
Visit to generate a channel.
Once you have created the channel set the channeltag in the script without using hash #
CentOS 7
2.17
CentOS 8
2.28
Debian 9
2.24
Debian 10
2.28
Debian 11
2.31
Ubuntu 16.04 LTS
2.23
Ubuntu 18.04 LTS
2.27
Ubuntu 20.04 LTS
2.31
The command to link these would be ln -s /shared_folder/ /gameserver_folder/
ln -s /home/svencoop_maps/svencoop_downloads/ /home/svencoop/serverfiles/
ln -s /home/svencoop_maps/svencoop_downloads/ /home/svencoop2/serverfiles/
Change the game server folder ownership to be under their respective users and you are done.
chown svencoop /home/svencoop/serverfiles/svencoop_downloads
chown svencoop2 /home/svencoop2/serverfiles/svencoop_downloads
The files in the symlinks do not need be owned by the gameserver users and will not be recognized by linuxGSM's ownership check. That being said, make sure they can be read by the gameserver users.
AdminPassword
Password for admin access.
DefaultWorldName
The world the server loads.
OwnerId
Your Player ID. Required.
ServerName
Name shown to players.
WorldPassword
Game
7777
UDP
Password players need to join. Leave empty for none.
${systemdir}/data/darkrp_logs
${systemdir}/data/ulx_logs
instance.cfg is the configuration file used for each individual game server instance. Settings here will only apply to this specific game server instance. This config file takes the same name as the game server instance name ./gameserver. For example, if ./csgoserver is used the instance.cfg will be called csgoserver.cfg. This config is last to be loaded.Secret configs serve as a designated space for storing sensitive information, such as steam login details, separately from the main config files. This separation allows server administrators to back up their configurations while excluding sensitive data, enhancing security and privacy. It proves especially valuable for administrators who wish to create a version-controlled skeleton configuration using git that might eventually become publicly accessible.
It's essential to understand that the secret config is not encrypted or inherently more secure than other config files. However, it provides a convenient way to keep sensitive information isolated from the rest of the configurations.
To distinguish secret configs from others, their names are typically prefixed with the word "secrets." This naming convention aids in identifying and managing these specific files.
When the configuration files are loaded by LinuxGSM, they adhere to a specific order. Initially, settings are fetched from _default.cfg, followed by common.cfg, and finally instance.cfg. As a result, any setting specified in instance.cfg will take precedence over the same setting in common.cfg, which, in turn, overrides the setting in _default.cfg. This hierarchical loading ensures that settings become increasingly specific, with instance configurations having the highest priority.
This configuration fits most scenarios, where you have a simple installation with only one instance.
Browse to the config-lgsm directory
Use ls to list the directory contents and find the name of your instance.cfg.
Use cat or nano to see the contents of _default.cfg .
Copy the individual settings you want to change to instance.cfg
This configuration is useful for multiple instances.
Browse to the config-lgsm directory
Use ls to list the directory contents.
Use cat or nano to see the contents of _default.cfg .
Copy any settings you want to apply to all instances to common.cfg.
Copy any settings you want to apply to a specific instance to its instance.cfg.
Load de_nuke as default map on csgoserver:
Load cs_office as default map on csgoserver:
Load de_dust2 as default map on csgoserver:
Load de_nuke as default map on csgoserver instance and de_inferno on csgoserver-2 instance:
Load de_nuke as default map on csgoserver instance and cs_office on csgoserver-2 instance:
Automatically restart the server at a given time (restart command)
Automatically update and restart the server (force-update command)
To access and edit your cronjobs use crontab.
It is possible to set up cronjobs as any user including root. The recommended way is to set up cronjobs using the game servers user account. However, If you run several game server installations on your server you may want to centrally manage cronjobs then using root.
If you are not used to setting up cronjobs you can use crontab.guru as a great reference to get started.
Here is an example of a user based cronjob for a daily restart at 5 am.
Here is an example of a root based cronjob for a daily restart at 5 am.
Here is an example of a user based cronjob to monitor your server every 5 minutes.
Here is an example of a root based cronjob to monitor your server every 5 minutes.
Below is a recommended basic example and will do the following:
Monitor your server every 5 minutes.
Check for an update every 30 minutes, update and restart only if an update is detected.
Restart and check for an update every day at 4:30 AM
Update check and update LinuxGSM every Sunday at midnight.
/gameserver fastdlShort: ./gameserver fd
Maps (.bsp)
Materials (.vtf, .vmt, .png, .svg)
Models (.vtx, .vvd, .mdl, .phy)
Particles (.pcf)
Sounds (.wav, .mp3, .ogg)
Fonts (.otf, .ttf)
Images (.png, .svg)
Web server on the game server (Apache/Nginx).
or
Access to a remote web server.
Run the FastDL command on your main LinuxGSM script. This will create a new directory /home/gameserver/public_html/fastdl
./gameserver fastdl
If Apache2 is being used a virtual host pointing to the newly created public_html directory can be used.
Tip: Apache2 mod "userdir" is useful if the Linux server is hosting multiple game servers, as it creates a url for the current user http://yourwebsite.ltd/~username.
Here is an example of setting up Apache2 using a subdomain.
This works for Apache 2.4+ and when using a domain name. If you have got a different configuration, refer to the Apache2 documentation.
Firstly make sure your subdomain redirects to your game server and that Apache2 is correctly installed and started. Create a virtual host in order to be able to host a website :
nano /etc/apache2/sites-available/yourvirtualhost.com.conf
See the example below and edit the relevent details.
Enable your website by restarting Apache2
Test the domain, to make sure it is working http://subdomain.domain.com/fastdl
The new url will need to be added to the game server config
nano serverfiles/gamename/cfg/game-server.cfg
Make sure you have this:
If the custom server content is updated or removed re running the fastdl command is required to ensure that the webserver is in sync with the game server.
Note for addons developers : Note that clients won't download a file that they already downloaded unless you rename it.
Custom server content can be compressed using bzip2 which is supported by source games, allowing clients downloads will be faster. It is a must-have if you're hosting large files, as it will save you bandwidth, and speed up downloads for clients. However, using bzip2 on many small files can slow down client loading times.
HLDM does not support bzip2 compression.
In order for a client to download files from a FastDL in Garry's Mod, the developer of an addon must put files from the addon into lua code resource.Addfile ( "/path/to/file.ext" ). However, some addon developers do not do this. In order for clients to download the required files, an lua file needs to be generated for it to work, which is what the lua enforcer feature does. The only downside is that clients may download files that are not required on the server.
Load config files
Apply any fixes required to get the game server working
The standard installation is the default installation method that requires user interaction.
Standard: ./gameserver install
Short: ./gameserver i
Auto install is useful for automatic server deployments as no user prompt is required.
Standard: ./gameserver auto-install
Short: ./gameserver ai
Make your script executable:
chmod +x gameserver
Run the install command: ./gameserver install or ./gameserver auto-install to bypass any prompts.
Follow on-screen instructions.
Installation of dependencies requires either sudo or root access. LinuxGSM can automatically install dependencies if the user has sudo or is root.
As root run ./gameserver install and the installer will complete a dependency installation only, ignoring the other installation steps.
If a user has sudo access the installer will prompt to enter the sudo password to automatically install dependencies. If sudo is not available the installer will advise on the command required to install dependencies.
LinuxGSM may fail to run if the correct permissions have not been used. This fault commonly occurs if an admin has not correctly followed installation instructions found on https://linuxgsm.com
Common faults include:
Trying to install the LinuxGSM as root.
Trying to install LinuxGSM in a directory not owned by the correct user.
Not making gameserver file executable using the chmod +x command.
If trying to run as root LinuxGSM will fail to run. See FAQ.
To check if the correct user owns the directory or gameserver file, use ls -al
Example output
If some files/directories are not owned by the correct user, use the chown command. Login as root and use the following command, changing the details to match your server
chown -R username:username /home/gameserver
chown -R csgoserver:csgoserver /home/csgoserver
If the connection to the Steam servers is poor (quite common), the SteamCMD download can fail. This is why LinuxGSM will always ask you if the installation was successful allowing admins to retry the download should it fail.
If there are still issues downloading try the validate option.
./gameserver validate
If downloading is still failing it may be worth contacting your server provider to confirm Steam servers are not being blocked for any reason.
It is also worth searching the internet for issues relating to the error message you receive.
Some game servers take up a significant amount of disk space. If you are having issues downloading check that your server has enough space available.
To check your available storage, use:
df -h or ./gameserver details
Make sure you can ping using a hostname.
Should this fail, your server may not have DNS lookup correctly configured. https://www.cyberciti.biz/faq/linux-setup-dns-lookup/
iptables -FOne way to protect a game server is to rate-limit incoming connections to the game server. Iptables will do this by dropping packets from a connection if it is sending too much traffic. This is particularly important if using the LinuxGSM monitor feature, as monitor relies on the query port being available. Should the query port be flooded with traffic it may become unavailable and LinuxGSM will assume the game server has crashed and reboot. The below example will rate-limit traffic on port 27015 (the default for source engine games) to 10 requests every 60 seconds. Different game servers may require different rate limits, so it may be important to adjust the limits to ensure legitimate traffic does not get blocked.
Once you have created your port forwards and want to see if the internet can access the ports, there is a website called canyouseeme.org. Simply change the port to your game port (27015 for example) and it will tell you if it can access it on your computer. This will help you verify your port forward was created successfully.
Some game servers (like Rust) register their external IP with steam when they startup. When you create port forwards to the game server, you need to make sure the port forward is on the address the outbound traffic is on. For example, say you have a router with two IPs from different ISPs;
If your traffic is going out WAN0 you need to put the port forwards on the 71.2.5.23 address. If your outbound traffic is going out WAN1 you would need to put your port forwards on 65.13.29.46.
wscollectionid setting. This will download the collection when the server starts.Some Garry's Mod addons like TTT use content from other games. To do this the content will need to be "mounted".
This guide is for installing another game server with LinuxGSM and using that content, copying that game's files, and mounting the game to Garry's Mod. This guide is for CS:S but should work for any other game.
First install a Counter-Strike: Source server, if you already have a server installed this step can be skipped. If the server will be deleted after copying files.
Copy the cstrike the directory from the Counter-Strike: Source to the Gmod folder.
Ensure that the copied files are owned by the gmodserver user.
Open mount.cfg file.
Add game to mount.cfg
Restart the server. Check if the mount was successful by changing the level to a mounted map with console or rcon.
./rsdwserver install
./rsdwserver start
./rsdwserver stop[/Script/Dominion.DedicatedServerSettings]
OwnerId=YOUR_PLAYER_ID
ServerName=My Dragonwilds Server
WorldPassword=
DefaultWorldName=World-12345./rsdwserver startcrontab -e*/5 * * * * /home/username/gameserver monitor > /dev/null 2>&1*/5 * * * * su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="1"logdays="7" # How long logs are kept
consolelogging="on" # Turning this to off will disable console logging0 no permissions
1 x
2 w
3 wx
4 r
5 rx
6 rw
7 rwxlgsm/config-lgsm/gameserver_default.cfg -> common.cfg -> instance.cfgcd lgsm/config-lgsm/cat _default.cfgcd lgsm/config-lgsm/csgoserver.cfg
csgoserver-2.cfg_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: defaultmap="de_nuke"_default.cfg: defaultmap="de_dust2"
common.cfg: defaultmap="cs_office"
csgoserver.cfg: NOT SET_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: NOT SET_default.cfg: defaultmap="de_dust2"
common.cfg: defaultmap="de_inferno"
csgoserver.cfg: defaultmap="de_nuke"
csgoserver-2.cfg: NOT SET_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: defaultmap="de_nuke"
csgoserver-2.cfg: defaultmap="cs_office"crontab -e* * * * * [/path/to/script] [command] > /dev/null 2>&1* * * * * su - username -c '[/path/to/script] [command]' > /dev/null 2>&1* * * * **/30 * * * *0 * * * *0 */2 * * *30 */2 * * *10 17 * * *0 1 * * * 30 1 */5 * *0 5 * * * /home/username/gameserver restart > /dev/null 2>&10 5 * * * su - username -c '/home/username/gameserver restart' > /dev/null 2>&1*/5 * * * * /home/username/gameserver monitor > /dev/null 2>&1*/5 * * * * su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1*/5 * * * * /home/username/gameserver monitor > /dev/null 2>&1
*/30 * * * * /home/username/gameserver update > /dev/null 2>&1
30 4 * * * /home/username/gameserver force-update > /dev/null 2>&1
0 0 * * 0 /home/username/gameserver update-lgsm > /dev/null 2>&1<VirtualHost *:80>
ServerAdmin adminemail@domain.com
ServerName subdomain.domain.com
ServerAlias subdomain.domain.com
DocumentRoot /home/gameserver/public_html
<Directory /home/gameserver/public_html>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>a2ensite yourvirtualhost.com.conf
service apache2 reloadsv_downloadurl "http://subdomain.domain.com/fastdl"
sv_allowdownload 1drwxrwxr-x 5 nmrihserver nmrihserver 4096 Jul 17 20:25 lgsm
drwxr-xr-x 4 nmrihserver nmrihserver 4096 Aug 27 2015 log
-rwxrwxr-x 1 nmrihserver nmrihserver 3885 Aug 9 23:04 nmrihserver
drwxrwxr-x 8 nmrihserver nmrihserver 4096 Jul 17 20:32 serverfiles
drwxrwxr-x 3 nmrihserver nmrihserver 4096 Jul 17 20:25 .steam
drwxrwxr-x 8 nmrihserver nmrihserver 4096 Aug 19 16:00 Steam
drwxrwxr-x 6 nmrihserver nmrihserver 4096 Aug 19 16:00 steamcmdping google.comiptables -A INPUT -p udp -m udp --dport 27015 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -A INPUT -p udp -m udp --dport 27015 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j DROP[eth0] 192.168.1.1 (LAN)
| |
-----------------
| | --[WAN0] 71.2.5.23 (ISP A)
| | --[WAN1] 65.13.29.46 (ISP B)
------------------ -disableluarefreshsv_loadingurl "www.website.com/loading/screen"TTT gamemode="terrortown"
Sandbox gamemode="sandbox"wscollectionid="157384458"cp -R /home/cssserver/serverfiles/cstrike /home/gmodserver/serverfiles/cstrikechown -R gmodserver /home/gmodservernano /home/gmodserver/serverfiles/garrysmod/cfg/mount.cfg"mountcfg"
{
"cstrike" "/home/gmoduser/serverfiles/cstrike"
}changelevel cs_italyKFGame/Config/kf2server/LinuxGSM-KFEngine.ini[OnlineSubsystemSteamworks.KFWorkshopSteamworks]
ServerSubscribedWorkshopItems=605633924
ServerSubscribedWorkshopItems=605551918
ServerSubscribedWorkshopItems=605549089
ServerSubscribedWorkshopItems=605532351Event Name and click Create TriggerSelect an action service.
Give the applet a name and save.
# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT
iftttalert="off"
ifttttoken="e-Yg8blVGDA15ewWvtZjUe"
iftttevent=""# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT
iftttalert="off"
ifttttoken="e-Yg8blVGDA15ewWvtZjUe"
iftttevent="linuxgsm_alert"Testing LinuxGSM Alert. No action to be taken.
Game Squad
Server name LinuxGSM Server 1
Hostname ubuntu.example.com
Server IP 1.2.3.4:27015100 emails/day
1,000 emails/month
6,000 emails/month (200/day)
# Email Alerts | https://docs.linuxgsm.com/alerts/email
emailalert="off"
email="email@example.com"
emailfrom=""3,000 emails/month
Typically you may see (depending on distro) a localhost loopback interface and an eth0 interface. The eth0 (Ethernet) is used for your standard copper network cable and is what you will likely see. If you have multiple interfaces you may also see eth1, eth2, etc. More advanced setups can choose to bond together interfaces to work as one to increase bandwidth and resilience.
An IP (Internet Protocol) address is a numerical label assigned to each device connected to a computer network that uses the Internet Protocol for communication. It serves two primary functions: host or network interface identification and location addressing. IP addresses enable devices to send and receive data within a network, facilitating communication and data transfer across the Internet.
LAN IP Address:
Example: 192.168.1.10
Explanation: In a typical home or office network, devices are often assigned private IP addresses within the range defined by the Internet Engineering Task Force (IETF) for private networks. The "192.168.1.10" address is an example of a private IP address commonly used within a LAN. Each device on the local network would have a unique private IP address for internal communication.
Internet IP Address:
Example: 203.0.113.45
Explanation: Internet IP addresses, also known as public IP addresses, are assigned by Internet Service Providers (ISPs) and are globally unique. The "203.0.113.45" address is an example of a public IP address. Websites, servers, and other devices connected to the Internet have public IP addresses that are used for communication between different networks on a global scale. These addresses are essential for routing data across the Internet.
Some servers may be connected to a VPN (Virtual Private Network) using software such as Wireguard or OpenVPN. This normally creates its own interface that gets allocated an IP address. It is possible to use a VPN to create a private connection to a LAN server
A relatively new technology is starting be become popular that allows applications hosted (think self-hosted web applications) on a private network to be accessed on the internet via a network "tunnel". This typically involves running a tunnel client in the private network that points to a specific internal IP and port. This bypasses the need to port forward on a router. Currently, there is a service called playit.gg that is specifically designed for game servers. However other solutions may work.
Each network interface can be allocated an IP address either manually on the server or via DHCP. If you are using a provider an internet IP address is normally automatically allocated to your server. For a local network, your router DHCP server will allocate a local IP address. A local IP address can be reserved using DHCP or you can manually set an IP on the server.
Game Servers will typically bind (attach a network socket) to all available IP addresses making the game server available on all networks. However, sometimes a particular IP address may need to be specified if you only want a particular network to access it or the game server requires it.
The simplest and most common server configuration will have one network interface and thus one IP address. When your game server starts it will simply listen and bind to this IP address.
Some servers will have multiple network interfaces available, allowing for multiple IP addresses to be assigned to your server. In this configuration, a server might listen and bind itself to all IP addresses or just one (depending on the game server).
If you have multiple interfaces you may choose to multihome your server. This simply means each interface is on a different network. For example, eth0 is on the 192.168.0.0 network and eth1 is on the 192.168.1.0 network and wg0 (WireGuard VPN) is attached to 10.0.0.0. While it is unlikely there is a specific use case for game servers to use multiple networks you need to be aware of what IP addresses your server is bound to.
The 0.0.0.0 IP is a meta-address means non-specific or all addresses. When you set up a game server you may notice the IP address 0.0.0.0 in command line parameters and settings. It is the default IP for game servers just signifies that the game server can bind to all available server IP addresses.
ip -o link showmatrixalert
Set to on to enable Matrix alerts.
matrixhomeserver
Your homeserver. A bare hostname is assumed to be https://; http:///https:// prefixes are respected.
matrixtoken
Your account access token.
Execute a test alert with ./gameserver test-alert to verify the setup. If the alert appears in your Matrix room, the configuration is correct.
# Matrix Alerts | https://docs.linuxgsm.com/alerts/matrix
matrixalert="on"
matrixhomeserver="matrix.org"
matrixtoken="mat_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
matrixroom="!wsxanjDijPztgZgrYL:matrix.org"# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet
pushbulletalert="on"
pushbullettoken="o.noWN6jpIeBUkLraw24saHKd7ksOkn7on"
channeltag=""channeltag="myepicserver"create session failed: ./srcds_linux -game csgo: Operation not permittedusermod -G tty csgoservergrep tty /etc/grouptty:x:5:csgoserveryum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpmyum --enablerepo=gf-plus install tmuxrestart
AS-BP2-Acatana.ut2 CTF-Avaris.ut2 CTF-Smote.ut2 DM-CBP1-Elegance.ut2 DM-DE-Ironic.ut2 DM-UCMP-PleasantValley.ut2 DOM-ScorchedEarth.ut2
AS-BP2-Jumpship.ut2 CTF-BP2-Concentrate.ut2 CTF-TwinTombs.ut2 DM-CBP1-Emperor.ut2 DM-DE-Osiris2.ut2 DM-UCMP-RancidMetal.ut2 DOM-SepukkuGorge.ut2
AS-BP2-Outback.ut2 CTF-BP2-Pistola.ut2 CTF-UCMP-Aithanarid.ut2 DM-CBP1-Finale.ut2 DM-Deck17.ut2 DM-UCMP-ThePits.ut2 DOM-Suntemple.ut2
AS-BP2-SubRosa.ut2 CTF-BridgeOfFate.ut2 CTF-UCMP-Aquatica.ut2 DM-CBP1-GoldenDawn.ut2 DM-DesertIsle.ut2 DM-UCMP-Xanadu.ut2 DOM-UCMP-Cerebral.ut2
AS-BP2-Thrust.ut2 CTF-CBP1-Betrayal.ut2 CTF-UCMP-DecaneCaldera.ut2 DM-CBP1-Neandertalus.ut2 DM-Flux2.ut2 DM-UCMP2-Adamantium.ut2 DOM-UCMP2-1on1-Smelter.ut2
AS-CBP2-Thrust.ut2 CTF-CBP1-Concentrate.ut2 CTF-UCMP2-Campgrounds.ut2 DM-CBP1-Ougaldwin.ut2 DM-Forbidden.ut2 DM-UCMP2-Churn.ut2 DOM-UCMP2-Meskhenet.ut2
AS-Confexia.ut2 CTF-CBP1-Ferris.ut2 CTF-UCMP2-Enlightenment.ut2 DM-CBP1-Shifter.ut2 DM-Gael.ut2 DM-UCMP2-Dynarak.ut2 Entry.ut2
AS-Convoy.ut2 CTF-CBP1-TechDream.ut2 CTF-UCMP2-Orcus.ut2 DM-CBP2-Achilles.ut2 DM-Gestalt.ut2 DM-UCMP2-Hieron.ut2 ONS-Adara.ut2
AS-FallenCity.ut2 CTF-CBP2-Bahera.ut2 CTF-UCMP2-RottenCity.ut2 DM-CBP2-Archipelago.ut2 DM-Goliath.ut2 DM-UCMP2-Saiko.ut2 ONS-ArcticStronghold.ut2
AS-Glacier.ut2 CTF-CBP2-Botanic.ut2 CTF-UCMP2-Sublimity.ut2 DM-CBP2-Azures.ut2 DM-HyperBlast2.ut2 DM-UCMP2-Taron.ut2 ONS-Aridoom.ut2
AS-Junkyard.ut2 CTF-CBP2-Decadence.ut2 CTF-UCMP2-Vadamerca.ut2 DM-CBP2-Buliwyf.ut2 DM-Icetomb.ut2 DM-UCMP2-Thebes.ut2 ONS-Ascendancy.ut2
AS-MotherShip.ut2 CTF-CBP2-Deep.ut2 CTF-UCMP3-Tidal.ut2 DM-CBP2-Drakonis.ut2 DM-Inferno.ut2 DM-UCMP3-Altitude.ut2 ONS-CBP2-Argento.ut2
AS-RobotFactory.ut2 CTF-CBP2-Gazpacho.ut2 CTF-UCMP4-Talya.ut2 DM-CBP2-Griffin.ut2 DM-Injector.ut2 DM-UCMP3-Gantham.ut2 ONS-CBP2-Brassed.ut2
AS-UCMP2-Cruciatus.ut2 CTF-CBP2-Pistola.ut2 CTF-UCMP4-Virility.ut2 DM-CBP2-Kadath.ut2 DM-Insidious.ut2 DM-UCMP3-Glorian.ut2 ONS-CBP2-Mirage.ut2
AS-UCMP3-IslandStrike.ut2 CTF-CBP2-Skorbut.ut2 DM-1on1-Albatross.ut2 DM-CBP2-Kerosene.ut2 DM-IronDeity.ut2 DM-UCMP3-Sympathy.ut2 ONS-CBP2-Pasargadae.ut2
BR-Anubis.ut2 CTF-Chrome.ut2 DM-1on1-Crash.ut2 DM-CBP2-Khrono.ut2 DM-Junkyard.ut2 DM-UCMP4-Elucidation.ut2 ONS-CBP2-Tropica.ut2
BR-Bifrost.ut2 CTF-Citadel.ut2 DM-1on1-Desolation.ut2 DM-CBP2-KillbillyBarn.ut2 DM-Leviathan.ut2 DM-UCMP4-Mania.ut2 ONS-CBP2-Valarna.ut2
BR-BridgeOfFate.ut2 CTF-Colossus.ut2 DM-1on1-Idoma.ut2 DM-CBP2-Koma.ut2 DM-Metallurgy.ut2 DM-UCMP4-Propaganda.ut2 ONS-CBP2-Yorda.ut2
BR-CBP1-BreakLimit2004.ut2 CTF-DE-ElecFields.ut2 DM-1on1-Irondust.ut2 DM-CBP2-KroujKran.ut2 DM-Morpheus3.ut2 DM-UCMP4-Speos.ut2 ONS-Crossfire.ut2
BR-CBP2-Aquarius.ut2 CTF-DE-LavaGiant2.ut2 DM-1on1-Mixer.ut2 DM-CBP2-Masurao.ut2 DM-Oceanic.ut2 DOM-Access.ut2 ONS-Dawn.ut2
BR-CBP2-Bahera.ut2 CTF-December.ut2 DM-1on1-Roughinery.ut2 DM-CBP2-Meitak.ut2 DM-Phobos2.ut2 DOM-Aswan.ut2 ONS-Dria.ut2
BR-Canyon.ut2 CTF-DoubleDammage.ut2 DM-1on1-Serpentine.ut2 DM-CBP2-Niflheim.ut2 DM-Plunge.ut2 DOM-Atlantis.ut2 ONS-FrostBite.ut2
BR-Colossus.ut2 CTF-Face3.ut2 DM-1on1-Spirit.ut2 DM-CBP2-Reconstruct.ut2 DM-Rankin.ut2 DOM-CBP1-Aphrodite.ut2 ONS-Icarus.ut2
BR-DE-ElecFields.ut2 CTF-FaceClassic.ut2 DM-1on1-Squader.ut2 DM-CBP2-Summit.ut2 DM-Rrajigar.ut2 DOM-CBP1-Hathor.ut2 ONS-IslandHop.ut2
BR-Disclosure.ut2 CTF-Geothermal.ut2 DM-1on1-Trite.ut2 DM-CBP2-TelMecoMEX.ut2 DM-Rustatorium.ut2 DOM-CBP1-Verde.ut2 ONS-Primeval.ut2
BR-IceFields.ut2 CTF-Grassyknoll.ut2 DM-Antalus.ut2 DM-CBP2-Tempest.ut2 DM-Sulphur.ut2 DOM-CBP2-Gerroid.ut2 ONS-RedPlanet.ut2
BR-Serenity.ut2 CTF-Grendelkeep.ut2 DM-Asbestos.ut2 DM-CBP2-TensileSteel.ut2 DM-TheDeck2004.ut2 DOM-CBP2-Summit.ut2 ONS-Severance.ut2
BR-Skyline.ut2 CTF-January.ut2 DM-BP2-Calandras.ut2 DM-CBP2-Torkenstein.ut2 DM-TokaraForest.ut2 DOM-Conduit.ut2 ONS-Torlan.ut2
BR-Slaughterhouse.ut2 CTF-Lostfaith.ut2 DM-BP2-GoopGod.ut2 DM-CBP2-Tydal.ut2 DM-TrainingDay.ut2 DOM-Core.ut2 ONS-Tricky.ut2
BR-TwinTombs.ut2 CTF-Magma.ut2 DM-CBP1-Arkanos.ut2 DM-Compressed.ut2 DM-UCMP-1on1-Derelict.ut2 DOM-Junkyard.ut2 ONS-UCMP-ABC-ECE.ut2
BR-UCMP2-Sublimity.ut2 CTF-Maul.ut2 DM-CBP1-AugustNoon.ut2 DM-Corrugation.ut2 DM-UCMP-BloodRun.ut2 DOM-OutRigger.ut2 ONS-UCMP-ABC.ut2
CTF-1on1-Joust.ut2 CTF-MoonDragon.ut2 DM-CBP1-BlackJackal.ut2 DM-Curse4.ut2 DM-UCMP-Contrast.ut2 DOM-Renascent.ut2 ONS-Urban.ut2
CTF-AbsoluteZero.ut2 CTF-Orbital2.ut2 DM-CBP1-Downgrave.ut2 DM-DE-Grendelkeep.ut2 DM-UCMP-ImMortalis.ut2 DOM-Ruination.ut2 VCTF-UCMP2-RiverCanyon2.ut2Don't Starve Together server requires an Authentication Token.
Go to the Klei website https://accounts.klei.com.
After logging into your account visit this page to get your game server authentication token.
Enter a friendly name for your server and copy the access token and paste it into the file cluster_token.txt.
You can quickly do this by running the following command, replacing [AUTHTOKEN] with your authentication token.
A Don't Starve Together server consists of clusters and shards.
One cluster can contain multiple shards. A shard is simply a map/level. Multiple shards are connected by cave entrances/exits found on the map. These are functioning as portals to allow players to travel between actual game servers.
By default, the cluster will be single-sharded. So you only need one server but you will also only have one map.
Default start parameter setting:
Take a look at to get a general idea of how to create multiple game servers.
There are two types of shards:
master shard: the shard you enter when joining the server / the shard/server you have to join (one per cluster)
slave shard: shard that will connect to the master (arbitrary number per cluster)
In this example, we will only use two shards, one overworld shard and one cave shard, on the same machine using the same installation. If you want to use more shards or run the shards on different machines, take a look at the guides mentioned at the bottom. First of all we need two scripts:
dstserver-1 will be the master shard with an overworld as level.
~/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini
dstserver-2 (this will be the slave shard with a cave as level):
~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini
If you want to Caves and Overworld to display on the same server, you also to change the cluster.ini, otherwise it will run two instances, one with the Overworld and another with the Caves:
~/.klei/DoNotStarveTogether/Cluster_1/cluster.ini
Set all installation variables BEFORE running the ./dstserver-[1,2] install commands. Feel free to change these settings but make sure that you set them to the same clusters. You also should not change them afterwards.
For clarity it is recommended recommend naming the master shard Master.
Lastly you have to start both servers. The order does not matter because the slave server will auto-retry connecting to the master server which is listening.
Setting cave="true" on a shard is all that is required to turn it into an actual cave, LinuxGSM handles the rest automatically during install.
When a server is installed with cave="true", LinuxGSM writes the following file for you:
~/.klei/DoNotStarveTogether/Cluster_1/Caves/worldgenoverride.lua
This is what tells the game to generate an underground cave map for that shard instead of a normal overworld. Without it, a "Caves" shard would just generate a second overworld map. Since this file is only written on install, changing cave on an already-installed shard requires a fresh install (or a reinstall) of that instance to regenerate the world with the new preset.
LinuxGSM does not install or manage Don't Starve Together mods automatically, this has to be done manually in three steps.
Add each mod's Steam Workshop ID to dedicated_server_mods_setup.lua so the dedicated server downloads it from the Workshop.
~/serverfiles/mods/dedicated_server_mods_setup.lua
Run ./dstserver update (or install) afterwards so the mods get downloaded.
Each shard (Master and Caves) needs its own modoverrides.lua listing which mods are enabled for that shard.
~/.klei/DoNotStarveTogether/Cluster_1/Master/modoverrides.lua
Copy the same file into the Caves shard directory if you want the mod active there too, most world/gameplay mods need to be enabled on both shards to behave consistently.
Some mods expose extra configuration options (difficulty, spawn rates, etc). The easiest way to generate a correctly formatted modoverrides.lua with these settings is to temporarily host a non-dedicated client server with the same mods enabled, configure the mods through the in-game mod options UI, generate the world once, then copy the resulting modoverrides.lua from that client's save folder over to both the Master and Caves shard directories on the dedicated server.
The details command allows access to various useful information about the game server. Details are gathered from configs, parameters and server queries.
Standard: ./gameserver details
Short: ./gameserver dt
postdetails (using hastebin) is used to share server details, to help with support, while hiding sensitive information:
Standard: ./gameserver postdetails
Short: ./gameserver pd
Various relevant details are provided including:
Distro Details
Performance
Disk usage
Server Name
details provides the following status and connectivity information:
Public access also depends on the server binding to the correct network interface, inbound firewall rules, and any router port forwarding or container port mappings. An external query response confirms that the query service is reachable from that test location; connecting with a game client checks player access.
See for troubleshooting steps.
A Hytale account that owns the game. It's needed even to download the dedicated server, and for the server itself to run.
Java 25 (openjdk-25-jre on Debian/Ubuntu, java-25-openjdk on RHEL-based distros). LinuxGSM installs it as a dependency.
At least 4 GB of RAM. The download is about 3.5 GB.
Hytale isn't on Steam. LinuxGSM downloads the server with Hytale's official hytale-downloader.
A Hytale server needs two separate logins with your Hytale account. Each one is approved once in a browser, then saved and renewed automatically.
The server login is encrypted with a key tied to the machine, so it only works on the machine (or container) where it was created. After restoring a backup on another machine, or re-creating a Docker container, the server can't read it and needs a new login. LinuxGSM detects this on start and shows a new server login URL.
Create and install the server:
Downloader login. The install stops at Hytale account login required and shows a URL. Open it in a browser, log in with your Hytale account and approve the code. The install waits up to 15 minutes, then downloads and extracts the server.
Start the server:
Server login. On the first start, LinuxGSM shows Hytale server login required
If the server login code expires, or you need to log in again, send the command to the server console and approve the code shown in the console log (./hytserver console):
The flow is the same, but there's no terminal, so the login URLs appear in the container logs:
Start the container and follow its logs:
Approve the downloader login URL from the logs within 15 minutes. The install then completes.
When the server starts, approve the server login URL from the logs, or from your configured alert (Discord, ntfy and so on), within 10 minutes.
The downloader login is saved under serverfiles on the data volume, so re-creating or updating the container doesn't ask for it again. The server login is tied to the container, so after re-creating or updating the container, approve the new server login URL from the logs or your alert.
The server creates serverfiles/Server/config.json on first start. Stop the server before editing it.
./hytserver details shows the server name, password and max players from this file.
To use a different patchline (for example pre-release), set hytalepatchline in your LinuxGSM instance config.
To change the port, set port in your LinuxGSM instance config (lgsm/config-lgsm/hytserver/hytserver.cfg). It's passed to the server as --bind.
./hytserver update and ./hytserver check-update use the saved downloader login, so they run unattended, for example from cron or with updateonstart="on". LinuxGSM keeps your world, config.json, mods, bans and the server login when it updates.
If the saved downloader login stops working, an unattended update fails within 5 minutes with a message, rather than waiting forever. Run ./hytserver update in a terminal and approve the login again.
Valheim servers require a server password to start a server. This means it is not possible to connect to a Valheim server unless you know the password.
The Valheim in-game browser can be slow, as a workaround you can directly connect to a server in-game through the Join Game tab by pressing the Join IP button, or by adding a server to your Steam server browser favorites. To access the Steam server list, at the top left of the Steam library window go View > Game Servers > Favorites, and click the blue + button. Use ./vhserver details to list the current query port. The default port is 2457.
LinuxGSM starts Valheim with the -crossplay parameter by default. Crossplay routes connections through the PlayFab relay so that Xbox and PC Game Pass players can join alongside Steam players.
If your server is Steam-only and players connect by direct IP or through the Steam server browser, you may want to disable crossplay. With crossplay enabled, players may not be able to reach the server directly.
To disable crossplay, copy the startparameters line from lgsm/config-lgsm/vhserver/_default.cfg into your instance config (for example lgsm/config-lgsm/vhserver/vhserver.cfg) and remove -crossplay:
With crossplay disabled and the server public, deeper monitoring is available by setting querymode="2" and querytype="protocol-valve" in your instance config.
See for more on overriding startparameters.
Valheim has been previously known to have problems with long server names and special characters, if you are having trouble connecting to a server try making its name shorter or remove special characters.
Add admins to Valheim server:
How LinuxGSM handles IP addresses
By default, LinuxGSM will use the 0.0.0.0 meta-address. This behavior will allow the game server to bind to all interfaces and allow LinuxGSM to query all available IP addresses. If there are multiple IP addresses available, details will display 0.0.0.0.
Internet IP: LinuxGSM will try to gather the server's internet IP address to be shown in details.
Specific IP: If a specific IP address needs to be set it can be done using the ip setting in the LinuxGSM or game server config files. Depending upon the game server this will allow it to bind to a specific IP address.
Display IP: If you want to change the IP address displayed in alerts you can use the displayip.
glibc 2.28 or newer. The native Linux server arrived with the Conan Exiles Enhanced update.
At least 8 GB of RAM.
The dedicated server (Steam app 443030) downloads anonymously, so no Steam login is needed.
The server name, max players and ports are set as start parameters in your instance config (lgsm/config-lgsm/ceserver/ceserver.cfg):
Other settings are in ServerSettings.ini, which the server creates on its first start:
This includes AdminPassword and ServerPassword. Stop the server before editing it, then start it again.
When running more than one instance, leave a gap of at least two between game ports, so the raw port doesn't clash.
RCON is off by default. To enable it, add an [RconPlugin] section to Game.ini in the same folder as ServerSettings.ini:
If you enable RCON, also open the RCON port (TCP) in your firewall.
The Conan Exiles server doesn't exit after a single CTRL+c, so LinuxGSM uses 16, which sends CTRL+c twice.
The server writes its logs to serverfiles/ConanSandbox/Saved/Logs.
Hosting multiple game servers on the same host
Depending upon the game server you are running it is possible to run multiple game servers on the same server host.
There are two recommended ways to run multiple game servers on one physical server. Depending upon the circumstances you may choose a particular method or mixture of both.
It is best to make a proper plan for running multiple game servers at the earliest stage of your deployment. Make sure that you examine this page carefully and understand all of its content before starting.
You need some definitions to make this guide clear.
Installation: An installation refers to the base directory of a game server. This is where the files required to run a game server is stored.
Game Port Default: 26000 UDP
As written in the FAQ, the default Configuration files are located in:
A Steam account that owns Running With Rifles. The dedicated server is part of the game (app 270150) and can't be downloaded anonymously. Set steamuser and steampass as described in .
The WW2 game modes also need the account to own the matching DLC (see ).
Unreal Tournament 99 Requires a few alterations from the official server download. Because of this, the LinuxGSM version of the server files includes the following.
OldUnreal-UTPatch469a-Linux.tar.bz2 ()
ut-server-436.tar (Latest Official Version)
LinuxGSM can warn players in-game before it stops, restarts or updates a server, so they have time to finish what they are doing.
Set warnplayerstimer to the number of minutes of warning to give, in common.cfg or an instance config. It is off (0) by default.
LinuxGSM works out the warnings from the timer, counting down through 60, 30, 15, 10, 5, 3 and 1 minutes:
Many tutorials state that the game disk is required to install a CoD4 server. This is because the server is built into the client. This made it difficult to distribute and create a CoD4 server.
After investigating this issue, it was found that it is possible to run a server with most of the client files removed. This greatly reduces the file size and prevents the client from being used. Because of this LinuxGSM provides a download to only the files required to run the server. Preventing the use of the client, removing the opportunity to use the server to pirate the game.
cod4server uses CoD4x project for its server, rather than the original, as it fixes various bugs and adds a few features over the vanilla server.
CoD4x has its own update functionality. It will automatically check for updates and does not require LinuxGSM to check for updates.
CoD4x game servers (since version 17.6) require a server token to be listed on the CoD4x master server.
For a typical public Source dedicated server, allow 27015/UDP inbound for players and server browser queries. If the server is behind a router, forward that port to the server. Add incoming ports for RCON or SourceTV only when you use those services over the Internet.
The table shows common Source defaults. Use your configured ports if they differ, and check the game's requirements for additional services. GoldSrc and Source 2 games may differ.
Direction is relative to your server: Inbound starts with another machine contacting your server; Outbound starts with your server contacting another service. Replies travel in the opposite direction.
Linux files and directories always belong to a user and group. That is what we call ownership. If this can be boring to new users, remember that this is a huge part of what makes Linux as secure as it is.
ls -l
Example output:
Syntax of the output is:
d for directory or - for file
matrixroom
The internal room ID (!...:server) to send alerts to.
MOTD
Message of the day.
Downloader
During install
serverfiles/.hytale-downloader-credentials.json
Server
On the first start
ServerName
Name shown to players.
Password
Password to join. Empty for none.
MaxPlayers
Game
5520
UDP
serverfiles/Server/auth.enc (encrypted)
Maximum number of players.

UDP
7778
Always port + 1.
Query
UDP
27015
Set by queryport.
servername
LinuxGSM
maxplayers
40
port
7777
queryport
Game
UDP
7777
Set by port.
27015
Raw UDP
Once a token is generated add it to the sv_authtoken cvar in server.cfg or command-line parameters.
The server then needs to be restarted to allow the game server to be listed.
Mods for Call of Duty 4 have to be manually added to the game server.
To run a mod the servers fs_game variable must be set correctly. Mods reside in the mods folder inside fs_homepath. Example directory tree:
To start the server with a mod set the fs_game variable accordingly.
Modded CoD4 servers have the ability to run with user-created maps. To run a server with a custom map, it has to first be placed in the usermaps directory (if missing simply create it yourself).
Typically, maps are prefixed by mp_ following the maps name.
Running custom maps on unmodded servers is not supported, but there is a neat workaround to still load custom maps. First, create a mods folder and some empty folder inside it.
Now set fs_game to mods/myemptymod and you will be able to run custom maps.
Fast download is possible with CoD4 to allow custom maps and mods to be hosted on a webserver.
here sv_wwwBaseURL has to point to a URL served by your web server.
An example directory tree for a served folder may look as below:
user, then group, then others permissions
number specifies the number of links or directories inside of a directory
The user that owns the file, or directory
The group that file or directory belongs to
The size in bytes
The date of last modification
The name of the file
ls -al /path/to/file/or/dir
Sample output:
Change owner from files or directories
chown
As usual, chown --help will provide you with all available arguments
chown newowner /path/to/file/or/directory
chown -R newowner /path/to/directory
chown -R myuser /home/myuser
Change group ownership on files or directories
chgrp
As usual, chgrp --help will provide you with all available arguments
chgrp newgroup /path/to/dir/or/file
chgrp -R newgroup /path/to/dir/
Change user and/or ownership for files and directories at the same time
chown
As usual, chown --help will provide you with all available arguments
chown user:group /path/to/dir/or/file
chown -R user:group /path/to/dir
chown -R myuser:myuser /home/myuser
echo '[AUTHTOKEN]' > ~/.klei/DoNotStarveTogether/[CLUSTER]/cluster_token.txtsharding="false"./dstserver-1
./dstserver-2## Predefined Parameters
sharding="true"
master="true"
shard="Master"
cluster="Cluster_1"
cave="false"[NETWORK]
server_port = 11000
[STEAM]
authentication_port = 8768
master_server_port = 27018## Predefined Parameters
sharding="true"
master="false"
shard="Caves"
cluster="Cluster_1"
cave="true"[NETWORK]
server_port = 11001
[STEAM]
authentication_port = 8769
master_server_port = 27019[SHARD]
shard_enabled = truereturn { override_enabled = true, preset = "DST_CAVE", }ServerModSetup("378160973")
ServerModSetup("some-other-workshop-id")return {
["workshop-378160973"] = { enabled = true },
["workshop-some-other-workshop-id"] = { enabled = true },
}./linuxgsm.sh hytserver
./hytserver install./hytserver start./hytserver send "/auth login device"docker logs -f hytserverstartparameters="-name '${servername}' -password ${serverpassword} -port ${port} -world ${worldname} -public ${public} -savedir '${savedir}' -saveinterval ${saveinterval} -backups ${backups} -backupshort ${backupshort} -backuplong ${backuplong} -instanceid ${instanceid} ${logFile:+ -logFile '${logFile}'} ${worldmodifiers:+ ${worldmodifiers}}"serverfiles/ConanSandbox/Saved/Config/LinuxServer/ServerSettings.ini[RconPlugin]
RconEnabled=1
RconPassword=CHANGEME
RconPort=25575set sv_authtoken "mytokenhere"`+set sv_authtoken "mytokenhere"mods/
├── pml220
│ ├── mod.ff
│ ├── pml220.iwd
│ ├── z_c_r.iwdparms="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 1 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap} +set fs_game "mods/pml220"" ├── usermaps
│ ├── mp_nuketown
│ │ ├── mp_nuketown.ff
│ │ ├── mp_nuketown.iwd
│ │ ├── mp_nuketown_load.ff ├── mods
│ ├── myemptymodset sv_allowDownload "1" // allow clients to download gamefiles
set sv_wwwDownload "1" // enable download redirection
set sv_wwwBaseURL "http://domain.tld/cod4fastdl/" // defines url to download from
set sv_wwwDlDisconnected "0" // disconnect clients while downloading cod4fastdl/
├── mods
│ ├── pml220
│ │ ├── mod.ff
│ │ ├── pml220.iwd
│ │ ├── z_c_r.iwd
├── usermaps
│ ├── mp_nuketown
│ │ ├── mp_nuketown.ff
│ │ ├── mp_nuketown.iwd
│ │ ├── mp_nuketown_load.ffultimatebyte@game:~$ ls -l
total 32
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:26 lgsm
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:23 log
drwxr-xr-x 4 ultimatebyte ultimatebyte 4096 Jan 29 22:26 serverfiles
drwxr-xr-x 8 ultimatebyte ultimatebyte 4096 Jan 29 22:26 Steam
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:24 steamcmd
-rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserverultimatebyte@game:~$ ls -al /home/ultimatebyte
total 132
drwxr-xr-x 11 ultimatebyte ultimatebyte 4096 Feb 2 07:36 . # Ownership from the current given dir
drwxr-xr-x 22 root root 4096 Feb 2 07:36 .. # Ownership from the parent dir
-rw------- 1 ultimatebyte ultimatebyte 49744 Feb 12 03:04 .bash_history
-rw-r--r-- 1 ultimatebyte ultimatebyte 220 Apr 15 2016 .bash_logout
-rw-r--r-- 1 ultimatebyte ultimatebyte 3515 Apr 15 2016 .bashrc
drwxr-xr-x 4 ultimatebyte ultimatebyte 4096 Jan 15 23:26 .config
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:26 lgsm
drwxr-xr-x 3 ultimatebyte ultimatebyte 4096 Jan 14 18:10 .local
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:23 log
-rw------- 1 ultimatebyte ultimatebyte 1005 Jan 30 01:14 .nano_history
-rw-r--r-- 1 ultimatebyte ultimatebyte 675 Apr 15 2016 .profile
-rw-r--r-- 1 ultimatebyte ultimatebyte 66 Sep 1 17:43 .selected_editor
drwxr-xr-x 4 ultimatebyte ultimatebyte 4096 Jan 29 22:26 serverfiles
drwxr-xr-x 3 ultimatebyte ultimatebyte 4096 Jan 15 01:40 .steam
drwxr-xr-x 8 ultimatebyte ultimatebyte 4096 Jan 29 22:26 Steam
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:24 steamcmd
-rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserver
-rw-r--r-- 1 ultimatebyte ultimatebyte 29 Jan 30 02:17 .tw-server.lockServer Ports
Passwords
Config File
Backups
Server parameters
Query Check
A link to , shown for supported games. Open it to test whether the public query address responds.
Status: STARTED
LinuxGSM's tmux session exists. The game server may still be loading.
Status: STOPPED
LinuxGSM's tmux session is absent.
LISTEN
Distro Details
===============================================================================================================================================================
Distro: Debian 7.7
Arch: x86_64
Kernel: 2.6.32-042stab102.9
Hostname: vps86887.ovh.net
tmux: tmux 1.6
GLIBC: 2.13
Performance
===============================================================================================================================================================
Uptime: 0d, 17h, 36m
Avg Load: 0.00, 0.02, 0.00
Mem: total used free
Physical: 1.0G 1.0G 17M
Swap: 128M 25M 102M
Disk Usage
===============================================================================================================================================================
Disk available: 5.4G
Serverfiles: 1.6G
Backups: 4.8M
Fistful of Frags Server Details
===============================================================================================================================================================
Server name: Fistful of Frags Server
Server IP: 192.168.1.1:27015
RCON password: rconpassword
Status: STOPPED
Service name: fof-server
User: fofserver
Location: /home/fofserver
Config file: /home/fofserver/serverfiles/fof/cfg/fof-server.cfg
Backups
===============================================================================================================================================================
No. of backups: 1
Latest backup:
date: Fri Jan 23 15:54:52 CET 2015
file: /home/fofserver/backups/fof-server-2015-01-23-155447.tar.gz
size: 4.8M
Command-line Parameters
===============================================================================================================================================================
./srcds_run -game fof -strictportbind -ip 192.168.1.1 -port 27015 +clientport 27005 +tv_port 27020 +map fof_depot +servercfgfile fof-server.cfg -maxplayers 16
Ports
===============================================================================================================================================================
Change ports by editing the command-line
parameters in ./fofserver.
Useful port diagnostic command:
netstat -atunp | grep srcds_linux
DESCRIPTION DIRECTION PORT PROTOCOL
> Game/RCON INBOUND 27015 tcp/udpThe number of local socket entries matching the listed port and protocol. A value above zero indicates a local match.
Instance: Each individual game server is referred to as an instance. There might be multiple instances running per installation. An instance is started by running the ./gameserver script
User: Each game server installation should run using its own Linux user. Although it is possible to have multiple installations per user.
You should be familiar with how LinuxGSM Configs work.
You need to understand how ports work in order to avoid port overlapping, otherwise, your new instances won't start. Useful resource: Ports.
Single instance per installation is the most simple method and will fit most use cases. It keeps the server files and configs completely separate from each other.
This consists of creating a new user for each game server, repeating the install process, and edit your config files ensuring default ports are changed.
Running different game servers requires installation in a different directory
Running multiple servers of the same game, but they have different content, addons or mods.
You want your game servers to be totally separate for simplicity and reduce the chance of multiple instances breaking all at once.
Easy to setup
Separate installations partition the game servers from each other
Each instance can have different maps, addons and mods rather than sharing, preventing conflicts.
More secure, by keeping instances separate with there own user.
Reduced risk of breaking multiple instances.
Requires more disk space as server files can not be shared
Each instance has to be individually setup.
The installs are separated and isolated from each other in each users home directory.
Garry’s Mod
gmodserver
/home/gmodserver/gmodserver
Garry’s Mod
gmodserver-slender
Create a new user with a home directory.
Repeat the standard installation process using this new user.
Change the instance config adjusting ports numbers from the default
Single installation with multiple instances is the method used when base installation content, maps, addons and mods are the same. Allowing either a clone of an existing instance or using different slightly different config such as different game modes and map rotations.
This consists of creating a new LinuxGSM executable file ./gameserver-2 in the same installation as an existing instance.
Running cloning an existing game server by creating a new instance.
Running the same game server with different game modes, maps etc.
Running multiple instances even with limited disk space available.
Uses less disk space as base installation is the same
Less configuration required
It is possible to use different game modes and map rotations by editing configs.
Each instance shares the same files which may limit options to customise an instance
Potential mod conflicts
Should one instance break all instances might also experience the same issue
You have one game server installation, but you have multiple instances start in the same installation using different config files.
Every time a new instance is created, new default config files are created. This allows each instance to have different hostname, ports etc. The config files are by default the same name as the instance script. For example, if the script is ./gameserver-2 the config is gameserver-2.cfg. You can see the location of config files in ./gameserver-2 details (replace "instance" with your actual instance name).
Each instance is managed using its own script which gives the config file names. These can be renamed how you like, however, the default will simply have an incremental number. Some admins may choose to name them after the server port, the map or the gamemode instead.
Garry’s Mod
gmodserver
/home/gmodserver/gmodserver
1.2.3.4:27015
In these examples, you can see the scripts are located in the same installation but have different names. Each instance has had its port altered in the server config to prevent port clashes.
linuxgsm.sh allows you to generate as many instances as you want by running .
It will generate a new LinuxGSM script using an incremental number.
On the first run of ./gameserver-2 a new default LinuxGSM and game config gameserver-2.cfgwill be created . These new configs will need to be altered with new ports, hostname and any other settings that are required.
If you run multiple game servers you will need to alter ports. Ensure you are aware of how to manage ports.
Installing multiple installations using the same user does work. However you must use unique script names i.e. ./gameserver. This is because tmux requires unique session name to start a session. Tmux will fail to start if another server is using the same session name. LinuxGSM uses the script name as the tmux session name.
/home/gameserver/serverfiles/home/gameserver/gameserver
/home/gameserver/gameserver-2./linuxgsm.sh install
OR
./linuxgsm.sh gameserver./gameserver-2Linux
$HOME/.xonotic/data/
Windows
%USERPROFILE%\Saved Games\xonotic\
MacOS
$HOME/Library/Application Support/xonotic/
You can start Xonotic with the startparameter '-userdir'. With this parameter, Xonotic expects in that folder a subfolder data with the server.cfg. For example for choosing ./xonotic-linux64-dedicated -userdir /home/xonotic/server1 your server.cfg location should be /home/xonotic/server1/data/server.cfg
A list is currently located in Xonotic Gitlab. with the following server parameters
Deathmatch
dm
Classic Free for All Gamemode where the player with the most frags wins
Team Deathmatch
Xonotic has Custom Maps support in fileformat pk3. Maps should be located in the data folder like server.cfg on your dedicated Server.
Xonotic doesn't provide a Filedownloader inside the gameserver, have need to host your custommaps on HTTP Webspace and set the correct values in server.cfg.
Userdir: -userdir /home/xonotic/server1: add foo.pk3in /home/xonotic/server1/data/
server.cfg: Add sv_curl_defaulturl="http://xonotic.foo.bar"
Put foo.pk3 in the HTTP Root Folder to make it accessable via http://xonotic.foo.bar/foo.pk3
Look at Xonotic Wiki for more infos about Custom Map Hosting
Every Server cvar can be overwritten in an starting argument, but it's recommended to setup as much as possible in server.cfg
The server starts into a lobby, then LinuxGSM runs a game mode script on its console. The server name, port, comment, mode and max players are set in that script, in the start_server command.
On install, LinuxGSM copies the default invasion script to an instance script you can edit:
Restart the server after editing it.
The game mode is chosen by two settings in your instance config (lgsm/config-lgsm/rwrserver/rwrserver.cfg):
startpackage
media/packages/vanilla
Package folder containing the game mode.
startscript
${selfname}.as
For example, to run deathmatch:
Mode
startpackage
startscript
Default port (UDP)
Invasion (default)
media/packages/vanilla
rwrserver.as
1240
The scripts in other packages aren't copied by LinuxGSM, so they're overwritten by game updates. To keep changes, copy the script to a new file name in the same folder and point startscript at the copy.
The WW2 game modes need scripts from the Running With Rifles DLC. The base game includes the pacific and edelweiss maps, but their scripts folders only come with the DLC, which SteamCMD only downloads when the Steam account owns it. Without it, these modes fail with script build failed in the console.
startpackage
startscript
DLC needed
media/packages/ww2_invasion
start_invasion_pacific.as
RUNNING WITH RIFLES: PACIFIC (616850)
media/packages/ww2_invasion
After buying the DLC on the server's Steam account, run ./rwrserver validate so SteamCMD downloads it.
The server writes rwr_server.log to the top of serverfiles.
serverfiles/media/packages/vanilla/scripts/rwrserver.asstartpackage="media/packages/deathmatch"
startscript="start_deathmatch_server.as"UTBonusPack2.zip (maps only)
UTInoxxPack.zip
UTBonusPack4.zip
With a default LinuxGSM Install, server settings can be configured in this file:
/home/user/serverfiles/System/ut99server.ini
You can change most of these settings in a browser by enabling the webserver and putting in settings there.
[Engine.GameReplicationInfo]
ServerName=
ShortName=
AdminName=
AdminEmail=
Region=0
MOTDLine1=
MOTDLine2=
MOTDLine3=
MOTDLine4=
[Botpack.ChallengeBotInfo]
Difficulty=4
[Botpack.DeathMatchPlus]
bNoviceMode=True
bHardCoreMode=True
bUseTranslocator=False
bCoopWeaponMode=False
MinPlayers=10
AirControl=0.350000
FragLimit=30
TimeLimit=0
bChangeLevels=True
bMegaSpeed=False
bAltScoring=False
bMultiWeaponStay=True
bForceRespawn=False
bTournament=False
NetWait=10
RestartWait=15
MaxCommanders=0
InitialBots=9
bNoMonsters=True
bHumansOnly=False
bClassicDeathMessages=False
MinFOV=80.000000
MaxFOV=130.000000
MaxNameChanges=0
[UWeb.WebServer]
Applications[0]=UTServerAdmin.UTServerAdmin
ApplicationPaths[0]=/ServerAdmin
Applications[1]=UTServerAdmin.UTImageServer
ApplicationPaths[1]=/images
DefaultApplication=0
ListenPort=8076
bEnabled=True
[UTServerAdmin.UTServerAdmin]
AdminUsername=
AdminPassword=15
15, 10, 5, 3, 1
10
10, 5, 3, 1
5
5, 3, 1
1
1
7
7, 5, 3, 1
The command waits for the countdown to finish before stopping the server, so a restart with warnplayerstimer="15" takes about 15 minutes.
stop
Server stopping in ...
restart
Server restarting in ...
backup (with stoponbackup="on")
There are no warnings when:
monitor restarts a crashed server.
force-update or validate is used.
The server is empty. If everyone leaves during the countdown, LinuxGSM stops waiting and carries on straight away.
If the countdown is cancelled with CTRL+c, players are told the stop or restart was cancelled.
Warnings are sent with the game's own chat command, typed into the server console, so they work for game servers with an interactive console:
Source, Source 2 and GoldSrc games, Quake and Call of Duty games, Xonotic, Minecraft, Terraria, Unturned, Barotrauma, Hytale
say
Project Zomboid
servermsg
Don't Starve Together
For other game servers, warnings are skipped with Warning players: not supported.
Stop only if empty (stoponlyifnoplayers) and player warnings work together:
stoponlyifnoplayers
Players online
What happens
on
Yes
The stop, restart or update is postponed until the server is empty. No warnings are needed.
off
Yes
Server restarting in 15 minutes
Server restarting in 10 minutes
Server restarting in 5 minutes
Server restarting in 3 minutes
Server restarting in 1 minutewarnplayerstimer="15"warnplayerstimer
Warnings at (minutes)
Game and query
27015
UDP
Inbound
Yes, for Internet players and queries.
RCON
27015
TCP
Inbound
Only if administrators need direct Internet access. Restrict it to trusted addresses.
The forwarding guidance assumes a router with stateful NAT and outbound connections allowed. The router tracks outbound connections and lets their replies back without a separate port forward.
Server firewall: allow the inbound game/query port and any optional incoming services you use. Allow required outbound Steam traffic and its replies.
Router/NAT: forward only the required incoming services to the server. Outbound Steam connections and their replies do not need manual forwarding rules.
Public-IP server/VPS: router forwarding is not needed when the server has a directly reachable public IP. The server firewall and provider firewall/security group must still allow the required incoming traffic.
Docker bridge networking: publish the required incoming ports to the host with the correct TCP/UDP protocol. If the host is behind a router, forward those ports to the host as well. Outbound connections do not need Docker ports published to receive replies.
Use ./gameserver details to check port settings. Its LISTEN column reports socket binding; it does not test firewall rules, router forwarding or Internet reachability. If Steam login fails, check the game console and outbound connectivity rather than adding an inbound Steam-port forward.
Source servers advertise their configured game port to Steam's server browser. Keep the Internet-facing game port the same as the game's configured port so players can connect to the advertised address.
For example, if the game uses 27015/UDP, publish 27015/UDP from Docker and forward 27015/UDP on the router to that host. To use 27016/UDP instead, change the game's start parameters to 27016 and use that port in the Docker mapping and router rule.
To enable server query certain permissions have to be enabled or the guest server group.
Virtual Server
b_virtualserver_info_view
b_virtualserver_channel_list
b_virtualserver_client_list
Group
b_virtualserver_servergroup_list
b_virtualserver_channelgroup_list
To enable these permissions first navigate to TeamSpeak3 Options and enable Advanced permissions system.
Navigate to server groups server permissions and select guest.
Select the values shown below and close the menu.
Virtual Server
Information
b_virtualserver_info_view
Because a user has to manually enable server query with TeamSpeak 3, LinuxGSM has gamedig query disabled by default. Enabling will allow more information to be displayed in details and enable monitor to use gamedig.
Copy the query mode settings from _default.cfg to common.cfg and change querymodefrom 5 to 3.
You can connect to a TeamSpeak 3 server to input commands without the need for a TeamSpeak 3 client. This can be done by connecting to the query port using telnet.
Using PuTTY or equivalent select a telnet connection and enter the server IP and TeamSpeak 3 query port (default:10011).
Note: Your server ID is usually 1
See .
The TeamSpeak 3 database contains all user information, groups, and statistics for your server.
By default, TeamSpeak 3 uses an SQLite database file, which allows good performance for most users, and easy server transfers from one server to another. This method is recommended for most admins as it is the simplest database method to use.
TeamSpeak 3 also allows admins to use MariaDB (MySQL alternative) manage the database. MariaDB is entirely optional and is not required so it is recommended that admins only use if they are comfortable.
Information about installing TeamSpeak 3 with MariaDB can be found .
TSDNS is a system allowing admins to redirect a domain name to a given TeamSpeak 3 port.
If TeamSpeak 3 port is using the default port, you do not need to provide the port when you are giving your server address, you can use the IP or domain name directly.
TSDNS is useful to admins that are hosting multiple TeamSpeak 3 servers on a single dedicated server.
Further documentation can be found using the following command.
Additional information can be found .
Then you can copy the sample, edit it accordingly and restart your TeamSpeak 3 server to apply the changes.
Some users with IPv6 enabled might encounter a server failing to start properly. To fix this edit serverfiles/ts3-server.ini to add a standard IPv4 (voice_ip; filetransfer_ip; query_ip) and remove the , :: from IPv6. Then as the server failed to start at the installation, the privilege key hasn't been generated. So you will need to use server query (ID/Password have been generated for them) to generate a new Server Admin privilege key.
If you find the above in the TeamSpeak 3 log you may need to remove the following file.
If the following message appears in the log of the Teamspeak 3 Linux Server Error creating ephemeral license: EXPIRED You need to upgrade the version of the TeamSpeak 3 Server to a more up-to-date version.
SteamCMD is Valve's command-line client for downloading and updating applications distributed through Steam. LinuxGSM uses it for game servers that provide their files through Steam. Each application has an AppID; the dedicated server AppID can differ from the game's client AppID. See Valve's Dedicated Servers List or SteamDB.
SteamCMD connects to Valve over the Internet to log in and download or update game files. It needs outbound access, not incoming port forwarding.
Valve lists these destination ports for Steam login and downloads:
If your firewall already allows outbound connections and their replies, no extra inbound rule or router port forward is needed for SteamCMD. If outbound traffic is restricted, allow the destination ports above and reply traffic. These are ports on the remote services, not ports to forward into your server. See Valve's for its current requirements.
The running game server has separate networking requirements. Players must be able to reach its incoming game/query ports. See or the for other games.
The game's Steam distribution determines whether SteamCMD can log in anonymously or needs an account.
For servers available anonymously, keep LinuxGSM's default Steam login settings. No Steam account details are required.
Some servers require a Steam account, and some require that account to own the game. Use a for server administration.
When LinuxGSM reports that a Steam login is required, set the credentials in the . Use secrets-common.cfg for shared settings or secrets-<gameserver>.cfg for a particular instance, in lgsm/config-lgsm/<gameserver>/.
Keep the password in single quotes so characters such as $ are not expanded. Config values use Bash quoting rules.
ERROR! Failed to install app '<appid>' (No subscription) means the Steam login does not have the entitlement needed for the requested application. Check the AppID, the account being used, and whether that server supports anonymous downloads. For a paid game that requires ownership, the account must own the required game. For a free game, the account may need to claim its licence through the Steam store.
Some game servers also need a Steam login for , even when the server itself downloads anonymously.
See the for game-specific login requirements.
Secret config files separate credentials from general settings; their contents are not encrypted. Limit read access to the server account and administrators, and exclude these files from public repositories and shared backups.
LinuxGSM passes configured credentials to SteamCMD when it logs in. Command-line arguments, diagnostic output or debug logs can expose sensitive values depending on the system and logging mode. Check logs before sharing them for support.
Steam Guard adds verification to Steam account logins. A new or unauthorised login can require an emailed code or confirmation through the Steam Mobile app. See for account settings.
Use email-based Steam Guard for a server account that needs unattended LinuxGSM updates. Complete the initial authorisation interactively as the same Linux user that runs the game server, then verify that a subsequent update can log in without prompting.
Authentication that requires a fresh mobile code or approval for each login is unsuitable for automatic updates and should not be used for unattended server operation.
SteamCMD can cache a successful login for later runs. The cache belongs to that Linux user's Steam installation. It must remain available between updates, including when running in a container. Moving to another user or installation, removing the cache, or Steam requiring reauthorisation can cause another prompt. Complete the required verification interactively before relying on scheduled updates again.
GameDig is a tool that queries game servers and returns outputs data from a query into json format. It can not only check if the game server is online but also return various data such as current maps and players. This allows ./gameserver details to display live information.
GameDig super-seeds gsquery as the tool to monitor game servers. GameDig is currently optional but recommended and gsquery is kept to ensure compatibility as gamedig requires Node.js to be installed.
GameDig requires Node.js a JavaScript runtime environment installed to work. Use the following instructions to install Node.js.
If you already have an older version of nodejs installed or be having issues with node dependencies. It may be worth reinstalling Node.js.
sudo apt remove --purge nodejs npm
sudo apt clean
sudo apt autoclean
sudo apt install -f
sudo apt autoremoveInstalling nodejs can be problematic, however, using the below should work well.
Once nodejs is installed use npm to install gamedig with the following command.
npm install gamedig -gUpdates to GameDig are regularly made. It is possible to update by running the npm update command.
You can also see which version of gamedig is installed by running the following.
Extra info becomes available for game server details.
Some game servers require using Java Runtime Environment (JRE) such as Minecraft and Project Zomboid.
If you are unsure which version to choose simply pick the default JRE.
To install the most up to date JRE for the distro run:
apt install default-jreFor openjdk, run the following changing the version number:
apt install openjdk-8-jreapt install openjdk-11-jreapt install openjdk-16-jreapt install openjdk-17-jreRun the following command, changing the version number:
yum install java-1.8.0-openjdkyum install java-11-openjdkJRE Availability Table Different Distros have different versions of Java. This page will outline the different versions that are available.
also contains details of JRE versions.
Further Reading
The backup command allows the creation of .tar.gz archives of a game server. This can be used to transfer a game server to another Linux server, to backup the game server before a risky change, to save the current state of the game server.
Standard: ./gameserver backup
Short: ./gameserver b
Alter these three settings by editing .
Set the maximum number of backups with maxbackups. If the number of backups exceeds this value, the oldest backup will be removed after a successful backup.
Game Server Login Token is a new system by Valve for managing game servers.
Ballistic Overkill
Brainbread 2
Black Mesa: Deathmatch
is an instant messaging app that provides a powerful API that enables applications to send messages through bots. LinuxGSM leverages the to dispatch alerts to users, enhancing monitoring and management of gaming servers.
Initiate Bot Creation: Chat with on Telegram to start creating your bot. Begin the conversation by clicking "Start".
Register Your Bot: Send /newbot to @BotFather and follow the provided instructions to set up your bot. Upon completion, you will receive an API token.
/home/gmodserver-slender/gmodserver
Counter-Strike: Global Offensive
csgoserver
/home/csgoserver/csgoserver
Counter-Strike: Global Offensive
csgoserver-zombies
/home/csgoserver-zombies/csgoserver
Garry’s Mod
gmodserver
/home/gmodserver/gmodserver-1
1.2.3.4:27018
Garry’s Mod
gmodserver
/home/gmodserver/gmodserver-2
1.2.3.4:27021
Counter-Strike: Global Offensive
csgoserver
/home/csgoserver/csgoserver-zombies-27024
1.2.3.4:27024 Zombie Mod
Counter-Strike: Global Offensive
csgoserver
/home/csgoserver/csgoserver-zombies-27027
1.2.3.4:27027 Zombie Mod
Start script inside the package's scripts folder.
Invasion rotator
media/packages/invasion_rotator
start_rotator.as
1280
Deathmatch
media/packages/deathmatch
start_deathmatch_server.as
1238
Minimodes
media/packages/minimodes
start_minimodes.as
1238
Classic
media/packages/classic
start_classic.as
1238
start_invasion_edelweiss.as
RUNNING WITH RIFLES: EDELWEISS (1210750)
media/packages/ww2_invasion
start_invasion_combined.as, start_rotator.as
PACIFIC and EDELWEISS
media/packages/ww2_combined
start_invasion.as, start_campaign.as, start_quickmatch.as
EDELWEISS (1210750)
Server restarting in ...
update (when an update is found)
Server updating in ...
workshop-update (when mods changed)
Server updating in ...
c_announce
SCP: Secret Laboratory
/bc
Vintage Story
/announce
WaterfallMC
alert
Factorio
Plain console text
Players are warned, then the server stops.
Either
No
The server stops straight away.
tdm
Teambased Gamemode where the team with the most frags win
Capture the Flag
ctf
Teambased Gamemode where the enemy flag has to be captured and brought back to their own base
Clan Arena
ca
Team and Round-based Mode where the surviving team gets a point. Pickup Items are absent
Freeze Tag
ft
Like Teamdeathmatch, where killed players are frozen and can be revived by team members. Ammo Pickups are absent
Key Hunt
kh
Multiteam- and Roundbased Mode Mode where one player of each team gets a key and the team goal is to get all keys
Assault
as
Team- and Round-based Mode where one Team is attacking and the other defending. Attackers try to destroy objects as fast as possible
Domination
dom
Multiteambased Gamemode where the teams capture and control points on the map
Last Man Standing
lms
Free for All Gamemode where you only respawn a certain amount of time
Keepaway
ka
Free for All Gamemode where you take a ball and with that equipped frag people
Invasion
inv
Roundbased PvE Gamemode where players fight against monsters
Onslaught
ons
Team and Roundbased Mode where the Team tries to destroy the enemy generator
Race
rc
Free for all Gamemode where players try to run over a track as fast as possible
Complete the Stage
cts
Like Race Gamemode with additional Checkpoints to pass
Nextball
nb
Team and Round-based Mode where teams try to shoot a ball to the enemy goal
SourceTV
27020
UDP
Inbound
Only if Internet spectators use SourceTV.
Client networking
27005
UDP
Outbound
No for normal dedicated Source server hosting.
Steam backend
26900/26901 on older Source games; varies
UDP
Outbound
No for outgoing Steam connections and their replies.




YES
YES
NO
NO
NO
Debian 9 "Stretch"
NO
NO
YES
YES (backport)
NO
NO
NO
Debian 10 "Buster"
NO
NO
NO
YES
NO
NO
NO
Debian 11 "Bullseye"
NO
NO
NO
YES
NO
NO
YES
Ubuntu 16.04 LTS
NO
NO
YES
NO
NO
NO
NO
Ubuntu 18.04 LTS
NO
NO
YES
YES
NO
NO
NO
Ubuntu 20.04 LTS
NO
NO
YES
YES
YES
YES
YES
CentOS 7
YES
YES
YES
YES
NO
NO
NO
CentOS 8
NO
NO





b_virtualserver_client_list
Group
Information
b_virtualserver_servergroup_list
b_virtualserver_channelgroup_list
Tools > Options > ApplicationPermissions > Server Groups## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="3"
querytype="teamspeak3"login serveradmin <password>use sid=<server-id>
tokenadd tokentype=0 tokenid1=6 tokenid2=0cat ~user/serverfiles/tsdns/tsdns_settings.ini.samplecd serverfiles/tsdns/
cp tsdns_settings.ini.sample tsdns_settings.ini
nano tsdns_settings.ini
cd ~
./ts3server restartERROR |Accounting | |failed to register local accounting service: File exists/dev/shm/7gbhujb54g8z9hu43jre8Steam Guard Mobile Authenticator
Mobile code or approval when requested
Not recommended for unattended game-server updates. Any login requiring a fresh code or approval needs an administrator present.
80 and 443
TCP
Outbound from your machine to Valve/content servers
27015-27050
TCP and UDP
Outbound from your machine to Steam services
steamuser="username"
steampass='password'Username and password without Steam Guard
Account credentials
Can run unattended, with less account protection.
Steam Guard by email
Email code when Steam requires authorisation
Suitable after authorisation, while the saved login remains valid.
Set the maximum age of a backup using maxbackupdays. Any backups older than X days will be removed after a successful backup.
Set if the server should be stopped for a backup using stoponbackup. If the server is running it will be stopped while the backup is running and started again once complete. This is useful to prevent any file changes during compression that could result in a corrupt or failed backup.
With stop only if empty (stoponlyifnoplayers="on"), a backup that would stop the server while players are online is postponed. The monitor command runs it once the server is empty, and sends an alert if it has been postponed for over 24 hours.
Players can be warned before the server is stopped for a backup with Player Warnings.
Automated backups can be set using cronjobs. It is recommended that frequently you backup and your retention policy to prevent your server is carefully considered to prevent storage issues.
see cronjobs
By default backups are saved in the backup directory.
You can change this using the configuration file and the property backupdir.
Use ./gameserver details to view information about created backups.
Using the backup feature is not the only way to backup a game server. There are other methods that have more features are are more powerful than the basic LinuxGSM backup feature. Below are are few applications that can be used instead of, or with LinuxGSM backups.
rsync is one of the most common ways to backup. It is a remote sync tool that is created for sending files/directory's to another location. Particularly good for syncing to another server.
Is an incremental backup solution that allows backups to all sorts of different locations including many different cloud storage solutions like BackBlaze B2 and Amazon S3. Once configured it can be a powerful and efficient backup solution.
duplicity-backup.sh is a very useful bash wrapper to help automate duplicity.
rclone is similar to rsync however can easily sync to cloud storage solutions.
mumbleserver@game:~$ ./mumbleserver b
[ INFO ] Backup mumble-server: A total of 34M will be compressed into the following backup:
/home/mumbleserver/backups/mumble-server-2016-10-28-194346.tar.gz
Warning! mumble-server will be stopped during the backup.
[ OK ] Stopping mumble-server: Mumble Port 64738
[ OK ] Backup mumble-server: Backup created: mumble-server-2016-10-28-194346.tar.gz is 36M sizemaxbackups="4"maxbackupdays="30"stoponbackup="on"crontab -e0 5 * * * /home/username/gameserver backup > /dev/null 2>&1├── home
├── csgoserver
├── ** backup **
├── lgsm
├── log
├── serverfilesbackupdir="${lgsmdir}/backup"Backups
===============================================================================
No. of backups: 1
Latest backup:
date: Fri Jan 23 15:54:52 CET 2015
file: /home/csgoserver/backups/csgo-server-2015-01-23-155447.tar.gz
size: 1.6G
Disk Usage
===============================================================================
Disk available: 5.4G
Serverfiles: 1.6G
Backups: 6.2GBlade Symphony (required)
Counter-Strike: Global Offensive (required)
Counter-Strike: Source (required)
Counter-Strike 2 (required)
Day of Defeat: Source
Empires Mod
Garry’s Mod (required)
Insurgency
Insurgency: Sandstorm
No more Room in Hell (required)
Nuclear Dawn
Team Fortress 2
Tower Unite
Unturned
Zombie Panic! Source
GSLT creates a persistent token for a game server. This allows any users who added your server to favourites to join, even if you change your ip address. This is very useful if you change your server/hosting provider.
To fully understand the reasoning behind GSLT, we need to back up a bit to July 2015. Valve announced that running certain plugins would get your server blacklisted, meaning it could not connect to the master servers and people wouldn’t be able to connect to the server.
This created a lot of problems for game server providers, large communities, and anyone providing configurable servers to third parties, as bans were handed out by IP, meaning that an entire machine could be banned because of one malicious or uninformed user.
To address this, Valve is moving the ban to the account level instead of the IP address level, which means that the end-user is always responsible for what they run on their server. Of course, game server providers and the like still have a responsibility to educate their users on these policies, as some might mistakenly upload blacklisted plugins.
An added benefit is that people who add your server to favourite will still be able to find and connect to your server, even if you change hosting provider and/or the IP / port of your server. This is something that previously was impossible.
To generate a token follow this link.
GSLT can be registered on your server(s) by using the sv_setsteamaccount command either in game server config or from a start parameter.
start parameter
+sv_setsteamaccount [token]
game server config
sv_setsteamaccount [token]
Tower Unite has a command within its config file
SteamLoginToken=
Yes, all the tokens on your account will be blacklisted if one of your servers are found to be running a blacklisted plugin. Make sure you read up on Valve’s plugin policies before running a game server so nothing unfortunate happens to your tokens.
Depending on the game Valve will punish the account that generated the token, On CS:GO you get a global cooldown of 7 days (you cannot join any community/valve server) Most likely, it won’t be VAC banned, but Valve’s requirement that anyone creating GSLTs is not community banned, you may be community banned for running blacklisted plugins.
No. You must create a unique GSLT for each simultaneously running server.
Yes, you can add your GSLT to a new server, you just can’t run two servers with the same GSLT, at the same time.
Unfortunately, despite registering a GSLT to your server, CS:GO servers will still need a Steam WebAPI key to host maps from the Workshop.
As of yet, no official confirmation has been made that TF2 servers will also require GSLTs, but they do support them, so it’s not a wild guess that this is to come.
Don’t use the same GSLT for multiple servers. When a server starts with a specific GSLT, it will disconnect any other servers already running that same GSLT. You need to create a unique GSLT for each server.
Yes, you can have a maximum of 1000 GSLTs on your account.
Your Steam account must not be currently community-banned or locked. Your Steam account must not be limited. Your Steam account must have a qualifying registered phone. Your Steam account must own the game for which you are creating a GSLT. Your Steam account may not have more than 1000 tokens.
For further information, see this useful blog post: http://dathost.net/blog/important-information-regarding-our-csgo-servers/
Configure LinuxGSM: Fill in the API token into your LinuxGSM config as follows:
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
telegramapi="api.telegram.org"
telegramalert="on" # Enable alerts by changing "off" to "on"
telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # Replace with your bot token
telegramchatid=""
telegramthreadid=""
telegramsilentnotification="false" # Set to "true" to disable notification sounds and send alerts silently
curlcustomstring="" # Optional: For proxies, etc.Select New Group within Telegram.
Name your group.
Add your bot by searching its @Username.
Open group info.
Choose to add members.
Search and select your bot by its @Username.
Activate Your Bot: Interact with your bot in Telegram.
Form the getUpdates URL: Replace the placeholder with your bot's token in https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates.
Visit the URL: Use a web browser to access the URL.
Locate the Chat ID: In the JSON response, find the id field under the chat object.
Note: The Chat ID for private chats is a positive number and for a group, it's a negative number.
Update LinuxGSM Config: Place your Chat ID in the file.
Verify that Topics are enabled for your group by checking the group's settings.
If you don't already have a topic created. Create a new Topic by clicking the three dots in the top right corner of the group chat and selecting New Topic.
Send a message in the Topic you want to use.
Repeat Retrieving Your Telegram Chat ID to retrieve the thread ID by looking for the message_thread_id field in the message object.
Update the telegramthreadid field in the with the thread ID.
Execute a test alert with ./gameserver test-alert to verify the setup.
If you receive an alert on Telegram in the right place (group or private chat), the configuration is correct.
For specific needs such as bypassing network restrictions, you can specify custom cURL arguments in the configuration.
# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
# You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
# For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all".
telegramapi="api.telegram.org"
telegramalert="on"
telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
telegramchatid="123456789"
telegramthreadid="5"
telegramsilentnotification="false"
curlcustomstring="--socks5 ipaddr:port" # Fill in your custom cURL string
```npm update -g npm list -g gamedigPlayers: 0/8
Current Map: Outpostgamedig --type "protocol-valve" --host "1.2.3.4" --port "27015"{
"name": "LinuxGSM Server",
"map": "StationKappa",
"password": false,
"raw": {
"protocol": 17,
"folder": "StickyBots",
"game": "StickyBots",
"steamappid": 0,
"numplayers": 0,
"numbots": 0,
"listentype": "d",
"environment": "l",
"secure": 0,
"version": "0.0.6.22",
"port": 7777,
"steamid": "90122418420694019",
"tags": "BUILDID:622,OWNINGID:90122418420694019,OWNINGNAME:LinuxGSM Server,P2PADDR:90122418420694019,P2PPORT:7777,SESSIONFLAGS:171",
"gameid": "889400",
"rules": {
"BUILDID_i": "622",
"NP_i": "0",
"OWNINGID": "90122418420694019",
"OWNINGNAME": "LinuxGSM Server",
"P2PADDR": "90122418420694019",
"P2PPORT": "7777",
"SESSIONFLAGS": "171",
"SN_s": "LinuxGSM Server"
}
},
"maxplayers": 8,
"players": [],
"bots": [],
"query": {
"host": "1.2.3.4",
"address": "1.2.3.4",
"port": 27015,
"port_query": 27015,
"type": "protocol-valve",
"duration": 90,
"attempts": 1
}
}https://community.bistudio.com/wiki/Arma_3_Headless_Client
A headless Client is used to offload AI calculations from the server.
Headless Client is integrated into the game client and dedicated server executable (Windows and Linux, use -client parameter).
The server does not allow arbitrary connections from headless clients if you do not define the headless clients' IPs in the server.cfg.
Starting up a headless client and having it connect to your server is easy, Creating a mission that uses the Headless Client is not.
Create a using LinuxGSM ./linuxgsm.sh arma3server. This will become the headless client instance and rename the new instance to arma3server-hc.
Edit the config file lgsm/config-lgsm/arma3server-hc.cfg.
Change port= so the headless client does not use the same ports as the server. Arma 3 uses a range of ports from the one you set, so add 12, e.g. 2302 becomes 2314.
Update startparameters= changing it to the following. -connect must use the main server's IP and port (not ${ip} and ${port}, which are now the headless client's own settings). The headless client must load the same mods as the server, so set mods= to match.
Set the query mode to session only. A headless client does not respond to server queries, so with the default query mode monitor would treat it as down and keep restarting it.
Edit the game server config of arma3server (not the headless client) arma3server.server.cfg and add the headless client IP address to headlessClients[]=. If the headless client is on the same physical server as the ARMA 3 server then also add the IP to localClient[]=.
Navigate to your profile directory.
edit Player.Arma3Profile and add the line battleyeLicense=1;.
Start your server with ./arma3server start
Start your headless client with ./arma3server-hc start.
To restart the headless client if it crashes or stops, run ./arma3server-hc monitor from cron. See .
Only an admin can see the headless clients in the player menu on the server. The headless client will connect and automatically assume the first available headless client slot.
Arma 3 mods are managed using the or manual downloads.
LinuxGSM can download, install and update Workshop mods for you. Add the Workshop IDs to workshopmods in the and run ./arma3server workshop-update.
LinuxGSM converts the mod files to lowercase, copies their keys and adds them to -mod= automatically. The Steam account in steamuser must own Arma 3. See for details.
Firstly, you need to select the mods you want to use from the .
Here is a popular mod to get started:
Subscribe to the mod in a Steam client that owns Arma 3. Steam saves it in steamapps/workshop/content/107410/450814997, where 450814997 is the Workshop ID
Create a directory called @cba_a3 in serverfiles/mods
Copy the contents of the mod archive to the @cba_a3 directory.
Copy the contents of the @cba_a3/keys directory to the server keys directory.
Add @cba_a3 to the mods="" setting in the .
If you are adding multiple mods make sure you put a semicolon with the escape character in between each mod.
Arma 3 server requires that mods have lowercase names. Some mods do not do this and will need to have their file names converted to lowercase. Workshop mods installed with workshop-update are converted automatically.
This can be done by using the following script.
Run the script from the serverfiles/mods directory.
Start the server and check that your mods all have valid hashes.
You should see the "Community Base Addons" mod appear in your console file.
LinuxGSM supports the installation, updating, and removing of selected mods and add-ons for some games and engines. Zip add-ons are currently the only supported installations.
./gameserver mods-install
./gameserver mi
./gameserver mods-update
./gameserver mu
./gameserver mods-remove
./gameserver mr
(This list was last updated on 2020-11-19)
Metamod
AMX Mod X
Additional Game Specific AMX Mod X addons:
Counter-Strike 1.6
Day of Defeat
Team Fortress Classic
The Specialists
Metamod: Source
SourceMod
Metamod:Source 2.0
CounterStrikeSharp (requires Metamod:Source 2.0)
See for CS2-specific notes.
ACF
ACF Missiles
DarkRP
DarkRP Modification
Rust, Hurtworld, 7 Days To Die
Oxide Mod
All available mods are defined in the mods_list.sh.
Mods hosted on github use the latest archive link available. Others are scraped through a mods download mirrors in order to find the latest version.
If some mods are already installed, a list of installed mods shows up. If a user tries to install a mod that is already installed, there will be a warning that any custom files will be overwritten.
The list lgsm/mods/installed-mods.txt is used to identify which mods are installed. If a non-referenced mod is found, the updater will stop with an error.
Three update types are available
OVERWRITE will overwrite all mod files.
A list of installed mods is displayed, user has to pick one to remove.
Any file listed in lgsm/mods/modname-files.txt gets removed.
The file list gets removed, as well as the entry in installed-mods.txt.
Any as long as the archive can be found online and the installation consists of extracting an archive to the serverfiles directory.
If there is a mod you wish to see supported by LinuxGSM please raise a GitHub issue with any relevant info about the mod.
If you wish to create a pull-request yourself for this, please make sure you read the "Developer" section at the bottom right of the wiki.
Usually, editing mods_list.sh should be enough to add mod support. This script contains comments helping you to understand how to use it.
Basically: Add an array variable containing mod info, then add the array to the global array.
Long explanation: The list is based on arrays, used to define all mod properties. You need to make sure that every value is filled up and in the correct order, that mod commands are unique and that multiple choices values are ended with a semicolon (;), otherwise the last value will be ignored.
You might need to add an entry in fn_mod_tidy_files_list from mods_core.sh in order to remove lines from mod's file list so that they do not get wrongly removed with the mods-remove command. For further assistance on developing this contact UltimateByte who developed those functions and dgibbs that reworked it should be able to help.
Ports are communication endpoints for an application. A port will either listen to or transmit network traffic on specific ports.
There are port standards set by IANA for common protocols such as HTTP (port 80), SSH (port 22), SMTP (port 25), etc. Game servers tend to use standard ports depending on the game engine. For example source engine games by default use port 27015 as the port it listens on.
Port listening is what a service like a game server does in order to receive packets from incoming connections: by listening to a port, the program waits for incoming packets on a given port.
Port opening happens on a firewall, it consists of allowing traffic to a port.
Port redirection is part of NAT and happens on a router or firewall. It consists of forwarding incoming traffic on a given port to a specific local IP.
Network Address Translation (NAT) is a method of remapping an IP address into another by modifying information.
Game Servers typically have ports for the following functions.
Game port: The port that players connect to. Query port: Used by software to gather information from the server such as server name, map, and number of players. Rcon port: Some game servers have remote console port allowing remote administration of a game server. Web port: used for game servers that have web interface.
Depending upon which game server is being used, you can set game server ports within your or config file.
LinuxGSM allows you to see the ports your game server is using with the ./gameserver details command.
Default ports are set in either the or .
You can use ./gameserver details to find out where to edit port settings
To alter them you will need to edit the file using nano.
Example: for source games, you need to alter the following:
You can use any port as long as it is not already in use and it is up to you to set up port allocation. It is recommended that ports are close together and sequential i.e. 27015, 27016, 27017 to save confusion. Some server's ports by default are not sequential, however, there is nothing stopping you from changing this. For example for source engine game servers; you could set port 27015, source TV port 27016, client port 27018. The next game server instance could simply follow on from this.
Should a server have multiple dedicated IP addresses allocated, it is possible for game servers to have the same ports but bound to different IP addresses. Admins will need to set the specific IP address in the LinuxGSM config or game config.
Each type of server has a default set of ports. This is fine to use if only one server is being set up. However, if multiple servers are being used a port scheme needs to be considered. There is no requirement to stick to specific ports but it is recommended they are in a logical order.
Source Default Ports
You can allocate ports incrementally, one after the other. With each server following on from the last.
This scheme is the simplest option to avoid confusion when managing ports. Plus this is the most efficient scheme for reducing unused ports.
This method increments each type of port keeping the scheme closer to the default. It is not as efficient but keeps ports more "standard".
Then increment those ports by 1 for every new server. 25 servers are using 75 ports. After making 25 servers, if you need more it is a good idea to add +100 to this 27000 range.
You can get new IP addresses for your dedicated server, and assign each server a new IP. This scheme is quite inefficient.
If you are running several game servers it is a good idea to create a spreadsheet of the ports you have used. Allowing you to keep track of what you have already used.
Status: STARTED in ./gameserver details means LinuxGSM's tmux session exists. Use the checks below to confirm that the game has bound its ports and is accessible to players.
Ensure the game server ports are bound and listening before anything else. You can check if your server is actually listening by using ./gameserver details if a port is bound and listening then the LISTEN column will not be zero.
Running the ss command will bring up any ports that are listening. If not, the game server has not started or not correctly binding to its allocated ports.
Check that ports are not already in use by another application.
Check that you are trying to listen to an actual interface IP.
Check that the server does not crash upon start by checking console logs or try starting the server with ./gameserver debug
are a regular source of connectivity issues. When diagnosing connection issues temporarily disabling a firewall will help identify if it is the source of the problem.
For cloud-hosted servers, also check the provider's inbound firewall rules, such as AWS security groups. For Docker bridge networking, publish the required incoming ports with the correct TCP or UDP protocol.
Ensure that the router correctly redirects incoming traffic to the correct ports and local IP displayed with ./gameserver details with the correct protocol (TCP and/or UDP).
Use to check whether a supported game server responds over the Internet. Select the game and enter its public IP address or hostname and query port. For supported games, ./gameserver details provides a Query Check link with the server address already filled in. A failed query can have several causes, including server startup, an incorrect address or port, or network filtering.
Test player access by connecting with a game client from outside the server's local network. Local LISTEN entries show bound sockets; public access requires the relevant traffic to reach those sockets through every firewall and router along the path.
Replace ./gameserver with the actual script name. Every command has a short version, also listed here.

Natural Selection
PAC3
UClip
ULib
ULX
UTime
After the user selects a mod, the file gets downloaded and extracted to a temporary directory.
A list of the mod files is created at lgsm/mods/modname-files.txt. This list allows the mod to be removed if required. LinuxGSM developers have whitelisted important customisable files such as mod config files that will not be removed. If there are any important files that have been missed please raise an issue.
Files and directories then get copied to the correct destination.
LinuxGSM updates a file containing a list of installed mods lgsm/mods/installed-mods.txt.
NOUPDATE will prevent this mod from being updated. Useful for a framework that is designed to be entirely customized.
RETAIN keeps the whitelisted files and updating everything else.
As there is no easy way to check for mod versions, the update process will update every single installed mod every time the command is run.
The process is pretty similar as the installation, mod gets downloaded, extracted, files get removed. Removed files go to a temp file list, then file list list built and temp file list added to it. Finaly the mod gets copied to destination using cp -Rf.
If an admin wants to overwrite custom files, then he can either uninstall/reinstall the mod, or just install over it.








Useful port diagnostic command:
ss -tuplwn | grep RustDedicated
DESCRIPTION PORT PROTOCOL LISTEN
Game 28015 udp 1
Query 28017 udp 1
RCON 28016 tcp 1
App 28082 tcp 1# Ports
# =====================================
# Change ports by editing the parameters in:
# /home/lgsm/qlserver/serverfiles/baseq3/ql-server.cfg# Start Variables
port="27015"
sourcetvport="27020"
clientport="27005"
ip="0.0.0.0"port="27015"
sourcetvport="27020"
clientport="27005"port="27015"
sourcetvport="27016"
clientport="27017"port="27016"
sourcetvport="27021"
clientport="27006"port="27125"
sourcetvport="27150"
clientport="27100"Useful port diagnostic command:
ss -tuplwn | grep RustDedicated
DESCRIPTION PORT PROTOCOL LISTEN
Game 28015 udp 0
Query 28017 udp 0
RCON 28016 tcp 0
App 28082 tcp 0./gameserver i
./gameserver auto-install
./gameserver ai
./gameserver start
./gameserver st
./gameserver stop
./gameserver sp
./gameserver restart
./gameserver r
./gameserver details
./gameserver dt
./gameserver postdetails
./gameserver pd
./gameserver skeleton
./gameserver sk
./gameserver backup
./gameserver b
./gameserver update-lgsm
./gameserver ul
./gameserver monitor
./gameserver m
./gameserver test-alert
./gameserver ta
./gameserver update
./gameserver u
./gameserver check-update
./gameserver cu
./gameserver force-update
./gameserver fu
./gameserver validate
./gameserver v
./gameserver console
./gameserver c
./gameserver debug
./gameserver d
./ts3server change-password
./gameserver pw
./gameserver map-compressor
./gameserver mc
./rustserver full-wipe
./rustserver fw
./rustserver map-wipe
./gameserver mods-install
./gameserver mi
./gameserver mods-update
Arma 3, Barotrauma, Colony Survival, DayZ, Hurtworld, Left 4 Dead 2, Operation: Harsh Doorstop, Soldat, Squad, Squad 44, Starbound and Stationeers.
./gameserver workshop-update
./gameserver wu
./gameserver developer
./gameserver dev
Detect Dependencies
./gameserver detect-deps
./gameserver install
"chat": {
"id": 123456789,
"first_name": "Your Name",
"username": "YourUsername",
"type": "private"
}# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
telegramapi="api.telegram.org"
telegramalert="on"
telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
telegramchatid="123456789" # Fill in your chat ID
telegramthreadid=""
telegramsilentnotification="false"
curlcustomstring=""{
"update_id": 123456,
"message": {
"message_id": 123,
"from": {
"id": 12345,
"is_bot": false,
"first_name": "Sender",
"username": "SenderUsername",
"language_code": "en"
},
"chat": {
"id": -123456789,
"first_name": "Your Name",
"username": "YourUsername",
"type": "supergroup"
},
"date": 1709691014,
"message_thread_id": 11, // Use this number as your telegramthreadid
"forum_topic_created": {
"name": "LinuxGSM",
"icon_color": 12345
},
"is_topic_message": true
}
}# Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
telegramapi="api.telegram.org"
telegramalert="on"
telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
telegramchatid="123456789"
telegramthreadid="5" # Fill in your thread ID
telegramsilentnotification="false"
curlcustomstring=""startparameters="-client -connect=127.0.0.1:2302 -port=${port} -password=CHANGEME -mod=${mods}"querymode="1"headlessClients[]={"127.0.0.1"};
localClient[]={"127.0.0.1"};~cd ~/.local/share/Arma\ 3\ -\ Other\ Profilesworkshopmods="450814997"serverfiles/mods/@cba_a3cp serverfiles/mods/@cba_a3/keys/* serverfiles/keysmods="mods/@cba_a3"mods="mods/@mod1\;mods/@mod2"#!/bin/bash
depth=0
for x in $(find . -type d | sed "s/[^/]//g")
do
if [ ${depth} -lt ${#x} ]
then
let depth=${#x}
fi
done
echo "the depth is ${depth}"
for ((i=1;i<=${depth};i++))
do
for x in $(find . -maxdepth $i | grep [A-Z])
do
mv $x $(echo $x | tr 'A-Z' 'a-z')
done
done15:27:37 ============================================================================================= List of mods ===============================================================================================
15:27:37 modsReadOnly = true
15:27:37 safeModsActivated = false
15:27:37 customMods = true
15:27:37 hash = 'B44C8332DD951EC30619282DAC7A59519AA0BCB6'
15:27:37 hashShort = '185e1b29'
15:27:37 name | modDir | default | official | origin | hash | hashShort | fullPath
15:27:37 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
15:27:37 Community Base Addons v3.15.3 | @cba_a3 | false | false | GAME DIR | fa100065ad10a6ab7a5e16d53efc2b26f3df3b58 | 7f1d8e45 | /home/lgsm/arma3server/serverfiles/@cba_a3
15:27:37 Arma 3 Art of War | aow | true | true | GAME DIR | 93cf5270ce855921dcfd261c583983d4e0bb6899 | 2930da71 | /home/lgsm/arma3server/serverfiles/aow
15:27:37 Arma 3 Contact (Platform) | enoch | true | true | GAME DIR | 61e8060b8dce2727f235695e59de01089546d9ad | 2dd9b92b | /home/lgsm/arma3server/serverfiles/enoch
15:27:37 Arma 3 Tanks | tank | true | true | GAME DIR | 37296b3dd900117d055e6c13e1ce21e54cd8067b | dfc0778f | /home/lgsm/arma3server/serverfiles/tank
15:27:37 Arma 3 Tac-Ops | tacops | true | true | GAME DIR | dec763aedfdc28eab838361370a48f2411535e5a | 70a109b7 | /home/lgsm/arma3server/serverfiles/tacops
15:27:37 Arma 3 Laws of War | orange | true | true | GAME DIR | a786e1c2e7b3aec524cc1ce932039dc18da0351d | 128b066b | /home/lgsm/arma3server/serverfiles/orange
15:27:37 Arma 3 Malden | argo | true | true | GAME DIR | b9edefa0cd211d0961282ce9b69eabeb59bda780 | 1954e272 | /home/lgsm/arma3server/serverfiles/argo
15:27:37 Arma 3 Jets | jets | true | true | GAME DIR | cd6561bc9148fec23b136de7fa02bfbd71e12221 | 1f2e3b6f | /home/lgsm/arma3server/serverfiles/jets
15:27:37 Arma 3 Apex | expansion | true | true | GAME DIR | 2d573cab31befb9729503ed00c211628c73622cc | e5ad6f6c | /home/lgsm/arma3server/serverfiles/expansion
15:27:37 Arma 3 Marksmen | mark | true | true | GAME DIR | f0784723164eb212a22fa2d49e589bead97a9735 | 2d4eada7 | /home/lgsm/arma3server/serverfiles/mark
15:27:37 Arma 3 Helicopters | heli | true | true | GAME DIR | 1af5847f6b557b98763dfdad7be3c32491cee65e | 873ada67 | /home/lgsm/arma3server/serverfiles/heli
15:27:37 Arma 3 Karts | kart | true | true | GAME DIR | 5ebe4af2ae6777d560a14cf9e39d4ee3f852a75c | 3a3f5ff9 | /home/lgsm/arma3server/serverfiles/kart
15:27:37 Arma 3 Zeus | curator | true | true | GAME DIR | 351bd6e8b13a4e8f514a173bf78dd949c899e107 | b6d4451 | /home/lgsm/arma3server/serverfiles/curator
15:27:37 Arma 3 | A3 | true | true | NOT FOUND | | |
15:27:37 ==========================================================================================================================================================================================================Official Server Resources
Since March 2026, CS:GO has been available on Steam as a standalone game (App ID 4465480), separate from Counter-Strike 2 (App ID 730). From v26.3.0, csgoserver has two App ID settings:
Choose clientappid based on which players you want to connect:
To change it, set it in lgsm/config-lgsm/csgoserver/common.cfg, as it applies to all instances sharing the same serverfiles:
A server advertises one App ID, so it serves one of these client types at a time. To serve both, run two separate installs: instances that share the same serverfiles would overwrite each other's steam_appid.txt and steam.inf.
LinuxGSM writes clientappid to serverfiles/steam_appid.txt and serverfiles/csgo/steam.inf before every start, because SteamCMD updates can revert them. Set clientappid="" if you want to manage these files yourself.
Standalone CS:GO clients can only connect when the NoLobbyReservation SourceMod plugin is loaded. Install Metamod:Source, SourceMod and then NoLobbyReservation with the : run ./csgoserver mods-install three times and select metamodsource, sourcemod and then nolobbyreservation. NoLobbyReservation can only be installed after SourceMod.
NoLobbyReservation is only published as source code, so LinuxGSM compiles it with the SourceMod compiler during mods-install and mods-update.
CS:GO features various game modes, which can be played on your server. To make setting up your server a bit easier, the following table sums up the configuration required in your server's for the various game modes. If you want more detailed and up-to-date information, take a look at Valve's wiki: . Up-to-date information about mapgroups can be found in the file serverfiles/csgo/gamemodes.txt.
When adjusting the mapgroup, don't forget to also set defaultmap to a map contained in the same mapgroup.
If players are respawning in random locations on custom maps, set mp_randomspawn to 0.
If players are being banned for dying too much, such as on minigames maps, as a workaround set mp_autokick to 0. Warning, this disables AFK and Teamkilling kicks as well.
Add to the following to the config lgsm/config-lgsm/csgoserver/csgoserver.cfg :
tickrate="128"
AS well it is needed to add a few options to the game config (default in: serverfiles/csgo/cfg/csgoserver.cfg )
This will as well force the client to use the 128 tickrate
For CSGO, edit these lines in your
Official Server Resources
CS2 features various game modes, which can be played on your server. To make setting up your server a bit easier, the following table sums up the configuration required in your server's LinuxGSM config for the various game modes. If you want more detailed and up-to-date information, take a look at Valve's wiki: CS2 Game Modes.
When adjusting the mapgroup, don't forget to also set defaultmap to a map contained in the same mapgroup.
If players are respawning in random locations on custom maps, set mp_randomspawn to 0.
If players are being banned for dying too much, such as on minigames maps, as a workaround set mp_autokick to 0. Warning, this disables AFK and Teamkilling kicks as well.
it is possible to add a single or collection of workshop maps to a Counter-Strike 2 server.
First, gather the map or collection ID. To do this find the workshop map or collection you want to use on the and look at the URL; it will contain the required ID number. In the example below the ID is 3075706807.
See .
Add the ID to startparameters in the : +host_workshop_collection <id> for a collection, or +host_workshop_map <id> for a single map. The server downloads the content when it starts.
If you are using a collection you will need a . Set it as wsapikey in the LinuxGSM config.
LinuxGSM can install, update and remove the following CS2 mods using the (v26.3.0+):
Metamod:Source 2.0: plugin framework (development build, the only version that supports CS2).
CounterStrikeSharp: write server plugins in C#. Requires Metamod:Source 2.0 to be installed first.
Metamod:Source needs a Game csgo/addons/metamod search path in game/csgo/gameinfo.gi. LinuxGSM adds this line when Metamod:Source 2.0 is installed and removes it when it is uninstalled.
LinuxGSM uses the most recent version of UT3 server available for Linux.
v2.1 (3808) [Compiled: Apr 22 2009 04:27:51].
Unreal Tournament 3 Requires a few alterations from the official server download. Because of this, the LinuxGSM version of the server files includes the following.
Patch 5 (v2.1)
Configuration for Factorio is split between both the
./rustserver mw
./gameserver mu
./gameserver mods-remove
./gameserver mr
./gameserver dd
Detect Glibc
./gameserver detect-glibc
./gameserver dg
Detect ldd
./gameserver detect-ldd
./gameserver dl
Query Raw
./gameserver query-raw
./gameserver qr
Clear Modules
./gameserver clear-modules
./gameserver cm




0
mg_armsrace
Boom! Headshot!
1
2
0
6
mg_skirmish_headshots
Classic Casual
0
0
0
0
mg_casualsigma, mg_casualdelta
Classic Competitive (Default)
0
1
0
0
mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...
Classic Competitive (Short Match)
0
1
32
0
mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...
Danger Zone
6
0
0
0
mg_dz_blacksite (map: dz_blacksite), mg_dz_sirocco (map: dz_sirocco)
Deathmatch (Default)
1
2
0
0
mg_deathmatch
Deathmatch (Free For All)
1
2
32
0
mg_deathmatch
Deathmatch (Team vs Team)
1
2
4
0
mg_deathmatch
Demolition
1
1
0
0
mg_demolition
Flying Scoutsman
0
0
0
3
mg_skirmish_flyingscoutsman
Hunter-Gatherers
1
2
0
7
mg_skirmish_huntergatherers
Retakes
0
0
0
12
mg_skirmish_retakes
Stab Stab Zap
0
0
0
1
mg_skirmish_stabstabzap
Trigger Discipline
0
0
0
4
mg_skirmish_triggerdiscipline
Wingman
0
2
0
0
mg_de_prime, mg_de_blagai, mg_de_vertigo, mg_de_inferno, mg_de_overpass, mg_de_cbble, mg_de_train, mg_de_shortnuke, mg_de_shortdust, mg_de_lake
Arms Race
1
0
0
https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807./cs2server mods-install0
0
mg_armsrace
Boom! Headshot!
1
2
0
6
mg_skirmish_headshots
Classic Casual
0
0
0
0
mg_casualsigma, mg_casualdelta
Classic Competitive (Default)
0
1
0
0
mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...
Classic Competitive (Short Match)
0
1
32
0
mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...
Danger Zone
6
0
0
0
mg_dz_blacksite (map: dz_blacksite), mg_dz_sirocco (map: dz_sirocco)
Deathmatch (Default)
1
2
0
0
mg_deathmatch
Deathmatch (Free For All)
1
2
32
0
mg_deathmatch
Deathmatch (Team vs Team)
1
2
4
0
mg_deathmatch
Demolition
1
1
0
0
mg_demolition
Flying Scoutsman
0
0
0
3
mg_skirmish_flyingscoutsman
Hunter-Gatherers
1
2
0
7
mg_skirmish_huntergatherers
Retakes
0
0
0
12
mg_skirmish_retakes
Stab Stab Zap
0
0
0
1
mg_skirmish_stabstabzap
Trigger Discipline
0
0
0
4
mg_skirmish_triggerdiscipline
Wingman
0
2
0
0
mg_de_prime, mg_de_blagai, mg_de_vertigo, mg_de_inferno, mg_de_overpass, mg_de_cbble, mg_de_train, mg_de_shortnuke, mg_de_shortdust, mg_de_lake
appid
740
The App ID SteamCMD downloads the dedicated server files from. Do not change.
clientappid
4465480
Players using
clientappid
Create the GSLT for
Standalone CS:GO
4465480 (default)
4465480
Counter-Strike 2 csgo_legacy beta
730
clientappid="730"./csgoserver mods-installArms Race
1
sv_mincmdrate 128
sv_minupdaterate 128wsapikey="YOUR_STEAM_API_KEY"
wscollectionid="YOUR_COLLECTION_ID"
wsstartmap="The App ID the server advertises to players. Only clients of this App ID can connect, and your GSLT must be created for it.
730
0
Openspy Server Patch
WebAdmin 1.17
Game Port 7777 UDP handled by Parms
Query port 6500 UDP handled by parms
Web Admin 8080 TCP handled by UTWeb.ini
All servers require a unique login to allow a server to show on the OpenSpy master server list and open the query port. This login has to be created via the game client "Create Profile". You can create multiple profiles under the same email address but you must use the same password for each if you do so.
Download the OpenSpy Patch to get the server browser working.
This is a list of the valid gametypes:
Deathmatch
UTGame.UTDeathmatch
Capture the Flag
UTGameContent.UTCTFGame_Content
Warfare
If you want to run more than one mutator separate them with commas.
This is a list of the valid mutators shipped with the retail version:
Instagib
UTGame.UTMutator_Instagib
BigHead
UTGame.UTMutator_BigHead
Low Gravity
MaxPlayers=<number>
Maximum number of players on the server (overrides ini setting)
MinNetPlayers=<number>
Minimum number of players before a match starts (real players not bots)
bShouldAdvertise=[True|False]
Show the server in the server browser (default: true)
bIsLanMatch=[True|False]
Most of these can be set in the server's UTGame.ini, so there's no need to clutter up the command line.
Server names can be specified in the server's UTGame.ini
The ServerDescription field isn't in plain ascii or text as you and I know it. Instead its in UCS2 (UTF-16) which is then serialised as numeric strings.
Edit the UTGame.ini. Under the [UTGame.UTGame] section, be sure to have this:
You meant to be able to admin the game using rcon but when we tried it although adminlogin worked none of the subsequent commands did.
First off login with: AdminLogin <password>
The you can use the following command:
AdminLogin <password> - Logs you in as an admin
AdminLogout - Logs you out of admin mode
AdminRestartMap - Restarts the current map
AdminChangeMap <MapName> - Loads a different map (gametype will change too, depending on map)
Admin addbots <#> - Adds number of bots
Admin killbots - Removes all bots
AdminPlayerList - Shows PlayerID of players
Adminkick <playername> - Kicks player from current game
Adminkickban <playername> - Kicks player from current game and bans player from reconnecting (bans are stored in .ini file for later editing)
AdminForceVoiceMute <playername> - Blocks a player from sending voip to others
AdminForceVoiceUnMute <playername> - Allows a player to resume sending voip to others
AdminForceTextMute <playername> - Blocks a player from sending text to others
AdminForceTextUnMute <playername> - Allows a player to resume sending text to others
AdminPublishMapList - Overrides the server's map list for the current game type with the one on the client that used the command
When your done you can logout with: AdminLogout
?mutator=UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGravbAllowMapVoting=True
VoteDuration=45
GameSpecificMapCycles=(GameClassName="UTDeathmatch",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))
GameSpecificMapCycles=(GameClassName="UTTeamGame",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))
GameSpecificMapCycles=(GameClassName="UTCTFGame_Content",Maps=("CTF-Coret","CTF-Hydrosis","CTF-Reflection","CTF-Vertebrae","CTF-OmicronDawn","CTF-Strident"))
GameSpecificMapCycles=(GameClassName="UTVehicleCTFGame_Content",Maps=("VCTF-Containment","VCTF-Corruption","VCTF-Kargo","VCTF-Necropolis","VCTF-Sandstorm","VCTF-Suspense"))
GameSpecificMapCycles=(GameClassName="UTOnslaughtGame_Content",Maps=("WAR-Avalanche","WAR-Downtown","WAR-Dusk","WAR-FloodGate","WAR-Islander","WAR-Islander_Necris","WAR-MarketDistrict","WAR-OnyxCoast","WAR-Powersurge","WAR-Serenity","WAR-Serenity_Necris","WAR-SinkHole","WAR-TankCrossing","WAR-Torlan","WAR-Torlan_Leviathan","WAR-Torlan_Necris"))
GameSpecificMapCycles=(GameClassName="UTDuelGame",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))port, rcon and branch configuration is set using stat parameters
To use a specific version of Factorio, you can change the branch to the version you want to use :
One the branch changed, do not forget to update the server :
All other settings are located in the Factorio game server config.
Useful settings include:
If you want your server to be publicly listed on the server browser you will need to enter your profile credentials from the Factorio website. You can use either a token or password.
Specifying world generation settings is a fairly simple task when creating a new world.
The steps to do so are as follows:
Delete any existing world data
Modify map-gen-settings.json
Use the Factorio executable to generate a world with that json
Run Factorio as normal
Follow the Guide below for detailed instructions on doing the above.
Firstly, delete any existing worlds that are found in the serverfiles directory.
In the data directory, copy the example files, then and customise them to your requirements.
In map-gen-settings.json, the ore generation values can be:
Once complete you will need to generate your World. Go back to the serverfiles directory and run the Factorio binary.
I prefer the added customisation of the Resource Overhaul Mod to the built-in generation.
The easiest way that I've found to generate a world with the RSO mod (and add mods in general) is as follows:
Startup Factorio on a client and install the RSO mod
Start generation of a new world and configure mod generation settings
Grab the mod files and mod-settings.dat
Transfer them to the server
Delete or rename any previous worlds
To configure the generation, go to Play > New World > Mod Settings > Map, then adjust options accordingly. Doing so will generate a file called mod-settings.dat which stores these settings.
You can locate the mod files on your system in the path your Factorio installation saves to:
Transfer all of the mods and mod-settings.dat file to your server with a tool like Filezilla or the rsync command on Mac/Linux, or even a USB drive.
Note: DO NOT TRANSFER FILES OVER FTP
If you have SSH open on the server, you will want to use SFTP. If you're using Filezilla, setting the port to 22 will tell it to use SFTP. If you're using rsync, the command would look something like this:
You will want to drop those files in the serverfiles/mods directory. You will also need to delete the existing save so that it generates a new one with the new generation rules. (This is a great time to make backups if you have any progress you would like to save).
Navigate to the root folder of your Factorio installation, then delete the save:
Once you've done that, you're good to start the server.
## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="34197"
rconport="34198"
rconpassword="Change_Me"
# (stable|experimental)
branch="stable"## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
branch="1.1.87"./fctrserver updateserverfiles/data/fctrserver.json"name": "Name of the game as it will appear in the game listing",
"description": "Description of the game that will appear in the listing",
"tags": ["game", "tags"],
"_comment_max_players": "Maximum number of players allowed, admins can join even a full server. 0 means unlimited.",
"max_players": 0,
"game_password": "",
"_comment_autosave_interval": "Autosave interval in minutes",
"autosave_interval": 10,
"_comment_autosave_slots": "server autosave slots, it is cycled through when the server autosaves.",
"autosave_slots": 5,"_comment_credentials": "Your factorio.com login credentials. Required for games with visibility public",
"username": "",
"password": "",
"_comment_token": "Authentication token. May be used instead of 'password' above.",
"token": "",cd serverfiles
rm save1.zip # this will delete your world.
rm -r saves # this directory will only exist if you have ran the server.cd data
cp map-gen-settings.example.json map-gen-settings.json
cp map-settings.example.json map-settings.json"none" - equivalent to 0
"very-low", "very-small", "very-poor" - equivalent to 1/2
"low", "small", "poor" - equivalent to 1/sqrt(2)
"normal", "medium", "regular" - equivalent to 1
"high", "big", "good" - equivalent to sqrt(2)
"very-high", "very-big", "very-good" - equivalent to 2cd ../
./bin/x64/factorio --create ./save1.zip --map-gen-settings data/map-gen-settings.json --map-settings data/map-settings.jsonWindows (Zip file): <install directory>\mods
Windows (Installer): C:\Users\<username>\AppData\factorio\mods
Windows (Steam): C:\Users\<username>\AppData\Roaming\factorio\mods
OSX: ~/Library/"Application Support"/factorio/mods
Linux: ~/.factorio/modsrsync -a <source files> <user>@<ip>:<remote destination>cd serverfiles/
rm -rf save1.zip # this will PERMANENTLY delete your world
rm -rf saves/* # this folder will only exist if you have ran the serverPicking a distro to run a game server is a personal choice and different admins have different preferences. There is no correct answer to which distro an individual chooses. However, there are some recommended choices when using LinuxGSM.
LinuxGSM developers primarily use Ubuntu for development and attempt to support the ones listed below. While LinuxGSM developers will attempt to support other distros there is no guarantee everything will work as expected, but should an issue occur, submitting GitHub issues is welcome.
Stability and Reliability: Ubuntu is a free and open-source Linux distribution based on Debian. It is renowned for its stability and reliability, making it an excellent choice for hosting game servers. Ubuntu's LTS (Long-Term Support) releases, which are published every two years, offer an extended support lifespan, ensuring that your server remains secure and up-to-date for an extended period.




Game Developer Preference: Ubuntu has gained popularity among game developers and companies like Valve. This preference is due to Ubuntu's consistent and timely software updates, allowing game developers to work with newer libraries and tools, which is essential for developing and running modern game servers.
Large and Supportive Community: With a vast user base, Ubuntu boasts an active and helpful community. This large community ensures that you can easily find solutions to issues, access guides, and receive support when setting up or troubleshooting your game server.
User-Friendly Experience: Ubuntu is known for its user-friendly interface, making it an attractive choice for both experienced Linux users and newcomers. The distribution provides an intuitive environment, simplifying the server setup process for those who might be new to managing game servers.
Preferred Distro for LinuxGSM Development: Ubuntu is the main choice for the development of LinuxGSM itself. Using Ubuntu ensures that you have the best compatibility and the smoothest experience when running LinuxGSM for managing your game servers.
Choose LTS Releases: It is highly recommended to use Ubuntu LTS releases for hosting game servers. LTS releases offer a longer support lifespan (typically 5 years) compared to standard releases (which have a support period of 6 months). This longer support period means fewer disruptions and security risks for your game server.
Latest LTS Version: Whenever you install a game server, opt for the latest LTS release available at that time. This ensures that you have access to the latest software and updates, maximizing compatibility and security.
Optional Upgrades: If your game server is currently running on an older LTS release and is functioning correctly, upgrading to a newer LTS release is optional. However, consider upgrading at an appropriate time to stay current with the latest features and security patches.
Version
Code name
Release date
Supported until
20.04 LTS
Focal Fossa
2020-04-23
2025-04
Rock-Solid Stability: Debian is renowned for its unmatched stability and reliability. As the upstream distribution for Ubuntu, it serves as the foundation for many popular Linux distributions, including Ubuntu itself. For game servers that require a stable and consistent environment, Debian is an excellent choice.
Long Release Cycle: Debian follows a predictable release cycle, with major stable releases approximately every two years. This extended cycle ensures a robust and mature platform for hosting game servers, minimizing the need for frequent system updates and reconfigurations.
Backports Support: One of Debian's significant advantages is the availability of "backports." These are newer versions of software packages that can be installed on stable Debian releases. This feature allows you to access the latest software and libraries that might be required for running specific game servers and LinuxGSM.
Wide Package Selection: Debian boasts a vast repository of software packages, covering a broad range of applications and tools. This extensive selection ensures that you can easily find and install the necessary dependencies and server components to run your game servers smoothly.
Security Focus: Security is a top priority for Debian's development team. The distribution is known for its prompt security updates and active maintenance, making it a secure choice for hosting game servers and protecting them from potential threats.
Stable Releases: For most game server deployments, it is recommended to use Debian's stable releases. These versions have undergone extensive testing and are well-suited for production environments.
Backports for Newer Software: If your game server or LinuxGSM requires newer software versions, consider using the backports repository. This way, you can leverage the latest software while still benefiting from Debian's overall stability.
Security Updates: Regularly apply security updates to keep your Debian server secure and protected from potential vulnerabilities. Debian's robust security team ensures that security patches are promptly released and widely available.
Consider System Requirements: Before choosing Debian, ensure that your game server's software and any specific tools you intend to use are compatible with the version of Debian you plan to install. Verify system requirements to ensure optimal performance.
Version
Status
Code name
Release date
Security support until
LTS until
10
oldoldstable
LinuxGSM also works with Enterprise Linux distributions. Known for their stability and long support cycle Enterprise Linux distros are a great choice for Game Servers
Shift to CentOS Stream: CentOS Stream has become the rolling-release development version of RHEL, rather than a downstream clone of RHEL. This change means CentOS Stream might receive more frequent updates, which can introduce unpredictability and potential compatibility issues when managing game servers with LinuxGSM.
Impact on Stability: CentOS Stream's shift towards being an upstream development platform might lead to reduced stability compared to previous CentOS versions. For hosting game servers, a stable environment is crucial to ensure consistent performance and avoid unnecessary disruptions.
CentOS version
Release date
Full updates
Maintenance updates
7
2014-07-07
2020-08-06
30 June 2024
RHEL Compatibility: Rocky Linux's binary compatibility with RHEL ensures that LinuxGSM, designed to manage game servers on Linux, will run seamlessly on Rocky Linux. This compatibility guarantees a stable environment for hosting game servers and a familiar experience for users transitioning from CentOS.
Stability and Long-Term Support: Game servers require a stable and reliable operating system to ensure continuous gameplay for players. Rocky Linux's focus on stability and long-term support makes it an ideal choice for hosting game servers with LinuxGSM.
Community-Driven Development: LinuxGSM benefits from being community-driven, just like Rocky Linux. This alignment in community-focused development fosters a collaborative environment, where users of both projects can actively contribute and seek support from fellow enthusiasts.
Transparent Security Updates: Regular security updates and patches in Rocky Linux ensure that your game servers remain secure against potential threats. With LinuxGSM's support for automatic updates, maintaining server security becomes a smoother process.
Game Server Hosting: Rocky Linux's RHEL compatibility and stability make it an excellent choice for deploying and managing game servers with LinuxGSM.
Continuity from CentOS: For users previously running game servers on CentOS with LinuxGSM, transitioning to Rocky Linux ensures a familiar and stable environment.
RHEL Compatibility: AlmaLinux is direct binary compatibility with RHEL ensures that LinuxGSM will run seamlessly on AlmaLinux, providing a stable platform for hosting game servers.
Community-Driven Development: LinuxGSM benefits from being community-driven, just like Rocky Linux. This alignment in community-focused development fosters a collaborative environment, where users of both projects can actively contribute and seek support from fellow enthusiasts.
Long-Term Support and Stability: Game servers require consistent performance and long-term support to avoid disruptions. AlmaLinux's commitment to stability and long-term support aligns with the requirements of managing game servers using LinuxGSM.
Security Emphasis: AlmaLinux prioritizes security, providing timely updates and patches. When combined with LinuxGSM's capabilities for automated updates, you can maintain a secure gaming environment effortlessly.
CentOS Replacement: For users transitioning from CentOS to AlmaLinux for hosting game servers with LinuxGSM, the distribution's RHEL compatibility ensures continuity and stability.
Enterprise Game Server Deployments: AlmaLinux's enterprise-grade stability and long-term support make it well-suited for hosting game servers in professional gaming environments.
LinuxGSM uses packages that are not available by default in CentOS because of this the EPEL (Extra Packages for Enterprise Linux) repository is required to install all dependencies. EPEL is a repository managed by the Fedora project to add extra packages to RHEL/CentOS.
UTGameContent.UTOnslaughtGame_Content
Vehicle Capture the Flag
UTGameContent.UTVehicleCTFGame_Content
Team Deathmatch
UTGame.UTTeamGame
Duel
UTGame.UTDuelGame
UTGame.UTMutator_LowGrav
Super Berserk
UTGame.UTMutator_SuperBerserk
Friendly Fire
UTGame.UTMutator_FriendlyFire
No Translocator
UTGame.UTMutator_NoTranslocator
Speed Freak
UTGame.UTMutator_SpeedFreak
Handicap
UTGame.UTMutator_Handicap
No Powerups
UTGame.UTMutator_NoPowerups
Slomo
UTGame.UTMutator_Slomo
Weapon Replacement
UTGame.UTMutator_WeaponReplacement
Weapon Respawn
UTGame.UTMutator_WeaponsRespawn
Is this a LAN only game? (default: false)
bIsDedicated=[True|False]
Changes dedicated server flag (default: false, even if started as dedicated)
GamePassword=<password>
Sets a game password
AdminPassword=<password>
Sets an admin password
Port=<port>
Sets the server game port (default: 7777; can also be changed via the INI file)
QueryPort=<port>
Sets the server query port (default: 6500)
GoalScore=<number>
Sets the max frags / max caps before the server will change maps.
bUsesStats=[True|False]
Report stats or not?
TimeLimit=<number>
Sets the timelimit in minutes for each map.

22.04 LTS
Jammy Jellyfish
2022-04-21
2027-04
Buster
6 July 2019
2022
2024
11
oldstable
Bullseye
14 August 2021
12
stable
Bookworm
10 June 2023
8
2019-09-24
2021-12-31
Stream 8
2019-09-24
2024-05-31
Stream 9
2021-12-03
2027-05-31



Many Steam games support the Steam Workshop, an easy way to share community-made maps, game modes, mods, skins and other content.
On game servers, the Workshop makes community content (mainly maps, game modes and mods) available to play. For most games, players who connect download the content automatically, which removes the need for a FastDL server.
Game servers get Workshop content in one of two ways:
The game server downloads it. You add item or collection IDs to the game server config or start parameters, and the server downloads them when it starts. LinuxGSM adds the settings to its config where they are available.
LinuxGSM downloads it. Some game servers cannot download Workshop content themselves. For these, LinuxGSM downloads the content with SteamCMD, installs it and keeps it up to date with the command. See .
The Steam Workshop is made up of individual items, such as maps, game modes and mods, and collections of items. Game servers download them by their ID number. For collections, you can use an existing one or create your own.
Browse to the item or collection and look at the URL; it contains the ID number. In the example below the ID is 3075706807.
A collection is a great way to manage and group all the content you want on your game server.
Go to the collections section of your game's Workshop and select Create Collection.
Fill out the form.
Add items to the collection, publish it, then get the collection ID from the page URL. In the example below the collection ID is 157384458.
Some game servers, such as Counter-Strike 2 and Counter-Strike: Global Offensive, need a Steam Web API key (wsapikey in the LinuxGSM config) to download Workshop collections. To get a key, visit the and follow the instructions.
LinuxGSM Workshop downloads do not need an API key.
For game servers that cannot download Workshop content themselves, LinuxGSM downloads and installs it for you. This is available from v26.4.0 for Arma 3, Barotrauma, Colony Survival, DayZ, Hurtworld, Left 4 Dead 2, Operation: Harsh Doorstop, Soldat, Squad, Squad 44, Starbound and Stationeers.
Add Workshop item and/or collection IDs to workshopmods in the , separated by spaces.
Then install them with .
also keeps Workshop mods up to date, so a scheduled update covers them too.
Whether you need a Steam account that owns the game depends on the game.
Steam only downloads Arma 3, Colony Survival and DayZ Workshop items for an account that owns the game itself, even though their dedicated servers download with any account. If the account in steamuser does not own the game, the server installs and runs, but every Workshop item fails to download with Failure. Set steamuser and steampass in the LinuxGSM config, see .
For example, on Arma 3:
Collections are expanded into their items, in the collection's order. Duplicate items are only installed once.
Updates: only new or changed items are downloaded. Downloads happen while the server keeps running, and the server is only restarted if a mod was installed, updated or removed.
Arma 3 and DayZ: file names are converted to lowercase, which these games require on Linux, and each mod's .bikey files are copied into serverfiles/keys.
Common
SteamCMD can sometimes output errors when something goes wrong. Sadly, Valve has never released an official list of what the error messages mean. Because of this, a lot of guesswork has been needed to figure it out. This page will highlight what we already know and info on researching what the error might mean in the hope that you can contribute to understanding SteamCMD errors.
SteamCMD uses hexadecimal numbers to give its current "state". Every time SteamCMD does something, it changes its state. When SteamCMD fails, it will output its hexadecimal state, for example 0x202.
Seems to affect HLDS based servers. Running again often fixes the issue.
Error! App '90' state is 0x10E after update job.Reason
Not enough disk space.
Not enough disk space.
Connection issue with steam, you will need to wait for the steam servers to recover.
SteamCMD is unable to write to the disk. Normally caused by permissions issues. This issue was discovered when a directory that was linked using symlink did not have the correct permissions to allow SteamCMD to write to it.
Missing update files
Corrupt update files.
No connection to content servers.
To get more info and output see the SteamCMD logs in ~/.local/share/Steam/logsor ~/.steam/logs. The most useful log is content_log.txt that will provide more information on errors.
SteamCMD uses hex error codes such as 0x202 which can be converted into decimal 514. You can use a hex-to-decimal converter to do this. Using the table below you can work out the status messages. By doing a calculation. Find the highest number below the state 512 which is the first error. Then take the number away from the total 514-512=2 which gives you the last error. This can be done for any error
514-512-2=0
512 StateUpdateRunning , 2 StateUpdateRequired
This table is from 2015 and is probably outdated now but it's the best we currently have.
Some users may get a ulimit error (no permission/cannot open file) while SteamCMD is starting up. This error caused by a low setting of the -n parameter (number of file descriptors) of ulimit. Some servers forbid increasing ulimit values after startup (or beyond a limit set by root). This can be fixed by changing the file descriptor number ulimit:
The Steam account being used does not have a license for the required game.
The password for the branch is incorrect.
Ignore the error, do not do anything to attempt to fix it. It is a known error that has appeared ever since SteamPipe was introduced. It does not cause any issues and can be ignored.
Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.
Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.
Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.


workshopmods in the
Barotrauma
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Colony Survival
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Game server
+host_workshop_collection or +host_workshop_map in startparameters, with wsapikey set
Game server
wscollectionid, wsstartmap and wsapikey in the LinuxGSM config
Day of Infamy
Game server
subscribed_file_ids.txt in the game directory (-workshop is in the default start parameters)
DayZ
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Game server
dedicated_server_mods_setup.lua
Game server
wscollectionid in the LinuxGSM config
Hurtworld
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Insurgency
Game server
subscribed_file_ids.txt in the game directory (-workshop is in the default start parameters)
Game server
ServerSubscribedWorkshopItems in LinuxServer-KFEngine.ini
Left 4 Dead 2
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Natural Selection 2
Game server
-mods in startparameters (mods in the LinuxGSM config for NS2: Combat)
Operation: Harsh Doorstop
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Project Zomboid
Game server
WorkshopItems= and Mods= in the server .ini
Soldat
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config, then add the maps to mapslist.txt
Squad
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Squad 44
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Starbound
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Stationeers
LinuxGSM (v26.4.0+)
workshopmods in the LinuxGSM config
Unturned
Game server
WorkshopDownloadConfig.json
Anonymous
Colony Survival
Anonymous
Account must own Colony Survival
DayZ
Any Steam account (not anonymous)
Account must own DayZ
Hurtworld
Anonymous
Anonymous
Left 4 Dead 2
Anonymous
Anonymous
Operation: Harsh Doorstop
Anonymous
Anonymous
Soldat
Anonymous
Anonymous
Squad
Anonymous
Anonymous
Squad 44
Anonymous
Anonymous
Starbound
Account must own Starbound
Uses the same account
Stationeers
Anonymous
Anonymous
Colony Survival
gamedata/mods/<id>
LinuxGSM enables each mod in every world's gamedata/savegames/<world>/worldconfig.json
Hurtworld
steamapps/workshop/content/393420/<id>
LinuxGSM adds loadmod <id> to the -exec start parameters on start, in the order listed. If you set your own startparameters, keep ${workshoploadmods} inside -exec
Left 4 Dead 2
serverfiles/workshop/@<id>, linked into left4dead2/addons/<id>.vpk
The server loads every .vpk in left4dead2/addons
Operation: Harsh Doorstop
HarshDoorstop/Mods/<mod name>
The server loads every mod in this folder. Select mod maps and modes with defaultmap or startparameters
Soldat
serverfiles/workshop/@<id>, with its files linked into maps, textures and scenery-gfx
Add the maps you want to mapslist.txt. Maps are linked with a lowercase .pms extension, and existing files are never overwritten
Squad
SquadGame/Plugins/Mods/<id>
The server loads every mod in this folder
Squad 44
PostScriptum/Plugins/Mods/<id>
The server loads every mod in this folder
Starbound
serverfiles/workshop/@<id>, linked into serverfiles/mods
The server loads every .pak in serverfiles/mods
Stationeers
mods/<id>
The server enables every mod in this folder in modconfig.xml
Removal: removing an ID from workshopmods removes that mod, and its keys, links or config entries, on the next workshop-update.
Your own mods are kept: mods and config entries you add yourself are never changed or removed.
check-update reports Workshop updates without applying them.
Game server
ActiveMods= in GameUserSettings.ini (-AutoManagedMods is in the default start parameters)
https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807https://steamcommunity.com/sharedfiles/filedetails/?id=157384458workshopmods="450814997 1234567890"./gameserver workshop-updateArma 3
Any Steam account (not anonymous)
Account must own Arma 3
Barotrauma
Arma 3, DayZ
serverfiles/workshop/@<id>
LinuxGSM adds them to -mod= on start, in the order listed, after any mods you set in mods
Barotrauma
LocalMods/<id>
-mod=mods/@mymod\;workshop/@450814997\;workshop/@1234567890


LinuxGSM (v26.4.0+)
Anonymous
LinuxGSM adds each mod to <regularpackages> in config_player.xml, in the order listed
4
StateEncrypted
8
StateLocked
16
StateFilesMissing
32
StateAppRunning
64
StateFilesCorrupt
128
StateUpdateRunning
256
StateUpdateRunning
512
StateUpdateStarted
1024
StateUninstalling
2048
StateBackupRunning
4096
StateReconfiguring
65536
StateValidating
131072
StateAddingFiles
262144
StatePreallocating
524288
StateDownloading
1048576
StateStaging
2097152
StateCommitting
4194304
StateUpdateStopping
8388608
Error! App '90' state is 0x10E after update job.
Hex
0x10E
Decimal/StateFlags
270
Error! App '<appid_number>' state is 0x202 after update job.Hex
0x202
Decimal/StateFlags
514
Error! App '<appid_number>' state is 0x206 after update job.Reason
Hex
0x206
Decimal/StateFlags
518
Error! App '<appid_number>' state is 0x212 after update job.Reason
Not enough disk space
Hex
0x212
Decimal/StateFlags
Error! State is 0x402 after update job.Hex
0x402
Decimal/StateFlags
1026
Error! State is 0x602 after update job.Reason
Hex
0x602
Decimal/StateFlags
1538
Error! App '<appid_number>' state is 0x606 after update job.Reason
Disk write failure
Hex
0x606
Decimal/StateFlags
1542
Error! App '232250' state is 0x626 after update job.Reason
Missing update files
Hex
0x626
Decimal/StateFlags
Error! App '317670' state is 0x6A6 after update job.Reason
Corrupt update files
Hex
0x6a6
Decimal/StateFlags
Error! App '<appid_number>' state is is 0x2 after update job.Hex
0x2
Decimal/StateFlags
2
Error! App '<appid_number>' state is 0x6 after update job.Reason
No connection to content servers
Reason 2
Received 401 (Unauthorized) HTTP response for depot 11
Hex
0x6
Decimal/StateFlags
Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)Update state (0x5) validating, progress: 13.48 (1554089956 / 11530459441)Update state (0x11) preallocating, progress: 8.53 (983870089 / 11530459441)Update state (0x61) downloading, progress: 1.11 (127644881 / 11530459441) Update state (0x101) committing, progress: 3.43 (395043827 / 11530459441)StateUninstalled
1
StateUpdateRequired
2
./steamcmd.sh: line 17: ulimit: open files: cannot modify limit: Operation not permittedulimit -n 2048530
6
StateFullyInstalled
Different Maps require different system requirements.
TheIsland: 7GB RAM
Genesis 2: 12GB RAM
An example of GameUserSettings.ini can be found .
Below is a list of common Command-Line parameters. For a complete list see the .
Below is a list of common Configuration settings. For a complete list see the .
The following options must come under the [ServerSettings] section of GameUserSettings.ini:
The following options must come under the [SessionSettings] section of GameUserSettings.ini.
The following options must come under the [/Script/Engine.GameSession] section of GameUserSettings.ini.
The section [ModInstaller] handles each extra Steam Workshop Mods/Maps/TC IDs in the Game.ini.
The altsavedirectoryname is the location where the game save will be stored. By default, this is the current map name. However, this setting can be customised if desired.
If altsaveddirectoryname is TheIsland the save is located will be:
TheIsland
TheCenter
ScorchedEarth_P
Ragnarok
ARK server mods are managed using the , this allows the auto-install and update of mods.
Firstly, you need to select the mods you want to use from the .
Here is a simple mod to get started:
-AutoManagedMods is the required to add workshop support and is added to the start parameters by default.
Edit GameUserSettings.ini, adding the following line under [ServerSettings]. To add multiple mods use a comma delimiter e.g ActiveMods=924619115,924619652.
Next, edit or create Game.ini and add the following section, this will enable the auto-download of mods. To add multiple mods add another ModIDS= line underneath the first.
For the example mod add the following to GameUserSettings.ini other mods may require their own configuration as per their documentation.
For more config options for WBUI see this .
Start the server and the mods will be automatically downloaded by the server. To check that this has worked open the console ./arkserver console. In the console, you will see a message similar to the following.
If you join before the server or your client has fully downloaded the mod you might get a Mod Version Mismatch error. Simply, give the server more time to load the mods.
Once you have connected to the server you will be able to see that the mod has loaded by seeing the Mod Name in the game menu Esc.
The example mod can be activated by pressing F1.
The Steam Workshop has a feature that allows mods to be grouped in collections. Currently, Steam workshop collection IDs won't work directly with ARK. Instead, you need to have all the individual IDs of the mods you want to use.
The -MultiHome parameter is used to bind the server to a specific interface. By default, LinxuGSM sets this to the ${ip} variable.
If you want players who use the Epic Store to connect to the server the -PublicIPForEpic parameter. By default, LinuxGSM will set this to the ${publicip} variable.
ARK can work with LinuxGSM in the same install. However, each instance will use the same GameUserSettings.ini. To customise each server use command-line parameters as they take precedence over the configs.
A cluster allows players to transfer a survivor, items, and tames ("objects") from one ARK to another ARK. A server admin can group all their ARK servers together in a cluster. Typically a server admin will cluster servers with different maps. There are a few different ways to configure CrossARK depending upon your configuration.
The cluster ID is the global name of the cluster. Each instance that will be attached to the cluster must have the same cluster ID. Use -ClusterId=<CLUSTER NAME>to specify the cluster ID.
Each server instance must be able to access the cluster directory. The cluster directory is a shared location that allows survivor and other data to be shared between server instances.
By default the cluster directory is ShooterGame/Saved/clusters/<CLUSTER NAME>. Depending upon your configuration it may be required that instances need to be pointed to a specific shared directory. To do this use add the-ClusterDirOverride=<PATH> parameter with the directory location.
The shared directory can be any preferred location however each instance must be able to read and write to that directory.
It is possible to set up clusters between game server instances in the same installation directory, separate installation directory, or even separate physical servers as long as all instances can access the cluster directory.
Using multiple physical servers will require the use and configuration of a file-sharing or syncing software such as SAMBA, Syncthing, or rsync.
Firstly, set up .
In the below example, 2 servers will be clustered together in the same instance. For CrossARK to work each instance must have the same cluster id and share the same cluster directory.
Change the command-line parameters for your server instances by editing the instance configs.
Once both server instances have been started check that the cluster directory has been created in ShooterGame/Saved/clusters/hsqCd8MR65VFRFdPcDjw.

Aberration_P
Extinction
Valguero_P
Genesis
CrystalIsles
Gen2
LostIsland
Fjordur
PGARK
serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
serverfiles/ShooterGame/Saved/Config/LinuxServer/Game.iniSessionName
-MultiHome
Enables multihoming.
-Port
ActiveMods=ModID1,ModID2,ModID3
Value type: list of mod IDs, comma-separated with no spaces, in a single line (for example: ModID1,ModID2,ModID3)
BanListURL="http://arkdedicated.com/banlist.txt"
Value type: string with a URL Sets the global ban list. Must be enclosed in double-quotes.
RCONEnabled=True
SessionName
Specifies the Server name advertised in the Game Server Browser as well in Steam Server browser. If no name is provide, the default name will be ARK # followed by a random 6 digit number
MaxPlayers=70
Specifies the maximum number of players that can play on the server simultaneously.
ModIDS=<integer>
Specifies a single Steam Workshop Mods/Maps/TC ID to download/install/update on the server. To handle multiple IDs, multiple lines must be added with the same syntax, each one with the specific workshop ID. Requires -automanagedmods in the command line.
altsavedirectoryname=ShooterGame/Saved/TheIsland[ServerSettings]
ActiveMods=924619115[ModInstaller]
ModIDS=924619115[WBUI]
Icon=1
OpenBtn=0
HideBuff=true
HideAfter=60
TribeTab=true
OpenOnStart=true
OnlyNewPlayers=true
UseJson=false
JsonURL="https://dl.dropboxusercontent.com/s/6rhwbq95wwm5gkd/UI.json"
UpdateInterval=24Using binned.
4.5.1-0+UE4 7038 3077 404 10
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
Setting breakpad minidump AppID = 346110
Redirecting stderr to '/home/lgsm/.steam/logs/stderr.txt'
[ 0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...Failed to init SDL priority manager: SDL not found
Failed to set thread priority: per-thread setup failed
Failed to set thread priority: per-thread setup failed
OK.
Connecting anonymously to Steam Public...Loaded client id: 13529975768029855698
Listening for IPv4 broadcast on: 27036
Logged in OK
Waiting for user info...OK
Downloading item 679529026 ...
Success. Downloaded item 679529026 to "/home/lgsm/.steam/SteamApps/workshop/content/346110/679529026" (1365998905 bytes)port="7777"
queryport="27015"
rconport="27020"
defaultmap="TheIsland"${defaultmap}?SessionName=LinuxGSM-Server-1?AltSaveDirectoryName=${altsavedirectoryname}?RCONPort=${rconport} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -AutoManagedMods -Crossplay -PublicIPForEpic=${publicip} -ClusterId=hsqCd8MR65VFRFdPcDjwport="7778"
queryport="27016"
rconport="27021"
defaultmap="Ragnarok"${defaultmap}?SessionName=LinuxGSM-Server-2?AltSaveDirectoryName=${altsavedirectoryname}?RCONPort=${rconport} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -AutoManagedMods -Crossplay -PublicIPForEpic=${publicip} -ClusterId=hsqCd8MR65VFRFdPcDjw

-QueryPort
-AutoManagedMods
Steam only, automatic MOD download/installation/updating. Mod IDs are listed in Game.ini under [ModInstaller] section.
-CrossPlay
Enables crossplay (i.e.: EPIC and Steam) on dedicated server. Note: PublicIPForEpic must also be set.
-PublicIPForEpic=<IPAddress>
This is the public IP that EGS clients will attempt to connect to, if this option is missing and -MULTIHOME is specified, then EGS clients will attempt to connect to the multihome IP; note that if you're using multihome and specify a non-public IP address, then players will not be able to connect to your server using EGS. Make sure to set a public IP address (e.g.: WAN or external).
-NoBattlEye
Run server without BattleEye.
-ActiveEvent=
Enables a specified event or enables the event's colour palette on wild creatures. Only one can be specified and active at a time.
?AltSaveDirectoryName=<savedir_name>
Allows to specify a custom directory name for server world-save. Usually used to manage clusters, read more about it in the section.
-insecure
Disable Valve Anti-Cheat (VAC) system.
-MapModID=
Dedicated servers can now optionally load custom maps via ModID directly, rather than having to specify the map name, using this syntax (where the MapModID is the Steam Workshop ID of your custom map, and the GameModIds are the Id’s of the stacked mods you wish to use, in order). ActiveMods must also be set in .
?GameModIds=[,[...]]
Steam only. Specifies the order and which mods are loaded, ModIDs need to be separated with commas (,). Mod priority is in descending order left to right (the left-most ID is the top priority mod). It is suggested to use instead the ActiveMods under [ServerSettings] of GameUserSettings.ini.
f True, enables RCON, needs RCONPort=<TCP_PORT> and ServerAdminPassword=<admin_password> to work
RCONPort=27020
Specifies the optional TCP RCON Port.
ServerAdminPassword=
If specified, players must provide this password (via the in-game console) to gain access to administrator commands on the server.
ServerPassword=
If specified, players must provide this password to join the server.
serverPVE=
If True, disables and enables

Minimum RAM: 9GB, Increases depending upon map size
CPU: Dual-core 3.4GHz
Bandwidth: 10mbps upload
https://developer.valvesoftware.com/wiki/Rust_Dedicated_Server
Server RCON administration tool
A server wipe is used to reset a Rust server by deleting certain types of data about the map and players.
A map wipe will remove all the player-made buildings and resources. Resetting the map back to its original state. However, a player's blueprints will be retained.
A full wipe will remove all the player-made buildings, resources and all player's blueprints.
Using it is possible to automate your server wipes. The below example will wipe the server every Sunday night at midnight.
If the Rust server is using the Procedural Map and a seed is not set in the config when the wipe commands will set a new random seed.
Oxide is an API allowing you to run mods for your Rust server.
LinuxGSM now handles the install of Oxide for Rust, with mods-install and mods-update commands.
If a Rust update has been released, then an Oxide update will soon follow. To update Oxide, you can then run:
To install Oxide addons place them into the serverfiles/oxide/plugins directory. This will cause them to load automatically when starting the server.
If you need to edit any addon configs, they will be located in serverfiles/oxide/config.
To update an addon without restarting the server, you'll need to reload the addon with an RCON command.
RCON is the protocol used to send commands to your server. You will need a tool to use it. Here are 3 of them:
Rusty:
Rustadmin: (supports both rconweb=1 and rconweb=0)
Facepunch web tool:
To use software like Rusty, you need to alter LinuxGSM config and change rconweb="0". To use Facepunch tool, Rustadmin desktop or Rustadmin Online, you can leave it at default rconweb="1"
Note: Facepunch web tool currently don't accept domain names, you need to enter server IP.
Note: append
server.writecfgafter adding an admin, and player needs to reconnect the server in order for it to be applied.
Below is a complete list of all Rust server settings.
./rustserver map-wipe./rustserver full-wipe0 0 * * 0 /home/rustserver/rustserver map-wipe > /dev/null 2>&1seed=""./rustserver mods-install./rustserver mods-updateoxide.reload PluginNamesave ; will save the server state (useful before a stop or restart)
oxide.reload PluginName ; will reload a plugin after updating it
ownerid STEAMID64 "Nickname" "Reason" ; to add an owner
moderatorid STEAMID64 "Nickname" "Reason" ; to add a moderator
server.writecfg ; will save config changes, including new adminsaibrainsenses.humanknownplayerslosupdateinterval (0.2)
aibrainsenses.knownplayerslosupdateinterval (0.5)
aibrainsenses.updateinterval (0.5)
aithinkmanager.animalframebudgetms (2.5)
aithinkmanager.framebudgetms (2.5)
aithinkmanager.petframebudgetms (1)
autoturret.auto_turret_budget_ms How many milliseconds to spend on target scanning per frame (0.5)
baseboat.do_shore_drift (True)
baseboat.drift_speed (1)
baseboat.generate_paths (True)
basefirework.maxactivefireworks (25)
basefishingrod.forcefail (False)
basefishingrod.forcesuccess (False)
basefishingrod.immediatehook (False)
basemission.missionsenabled (True)
basenavigator.basenavmovementframeinterval How many frames between base navigation movement updates (2)
basenavigator.maxstepupdistance The max step-up height difference for pet base navigation (1.7)
basenavigator.navtypedistance (1)
basenavigator.navtypeheightoffset (0.5)
basenavigator.stucktriggerduration How long we are not moving for before trigger the stuck event (10)
basepet.movementupdatebudgetms (1)
basepet.onlyqueuebasenavmovements (True)
basepet.queuedmovementsallowed (True)
baseplayer.lifestoryframebudgetms (0.25)
baseridableanimal.decayminutes How long before a horse dies unattended (180)
baseridableanimal.dungtimescale (1)
baseridableanimal.framebudgetms (1)
basesubmarine.deepwaterdecayminutes How long before a submarine loses all its health while in deep water (120)
basesubmarine.outsidedecayminutes How long before a submarine loses all its health while outside. If it's in deep water, deepwaterdecayminutes is used (180)
basesubmarine.oxygenminutes How long a submarine can stay underwater until players start taking damage from low oxygen (10)
bear.population Population active on the server, per square km (2)
bigwheelgame.spinfrequencyseconds (45)
blackjackmachine.maxbet Maximum initial bet per round (500)
boar.population Population active on the server, per square km (5)
boombox.backtracklength (30)
boombox.serverurllist A list of radio stations that are valid on this server. Format: NAME,URL,NAME,URL,etc ()
cargoship.egress_duration_minutes (10)
cargoship.event_duration_minutes (50)
cargoship.event_enabled (True)
cargoship.loot_round_spacing_minutes (10)
cargoship.loot_rounds (3)
cassette.maxcassettefilesizemb (5)
chicken.population Population active on the server, per square km (3)
cinematicentity.hideobjects Hides cinematic light source meshes (keeps lights visible) (False)
clothlod.clothloddist distance cloth will simulate until (20)
codelock.lockoutcooldown (900)
codelock.maxfailedattempts (8)
camerarenderer.completionframebudgetms (5)
camerarenderer.enabled (True)
camerarenderer.entitymaxage (5)
camerarenderer.entitymaxdistance (100)
camerarenderer.farplane (250)
camerarenderer.height (90)
camerarenderer.layermask (1218656529)
camerarenderer.maxraysperframe (100000)
camerarenderer.maxrendersperframe (25)
camerarenderer.nearplane (0)
camerarenderer.playermaxdistance (30)
camerarenderer.playernamemaxdistance (10)
camerarenderer.renderinterval (0.05)
camerarenderer.samplesperrender (3000)
camerarenderer.verticalfov (65)
camerarenderer.width (160)
global.allowadminui Controls whether the in-game admin UI is displayed to admins (True)
ai.accuratevisiondistance (True)
ai.allowdesigning (True)
ai.animal_ignore_food If animal_ignore_food is true, animals will not sense food sources or interact with them (server optimization). (default: true) (True)
ai.frametime (5)
ai.groups (True)
ai.ignoreplayers (False)
ai.move (True)
ai.nav_carve_height The height of the carve volume. (default: 2) (2)
ai.nav_carve_min_base_size The minimum size we allow a carving volume to be. (default: 2) (2)
ai.nav_carve_min_building_blocks_to_apply_optimization The minimum number of building blocks a building needs to consist of for this optimization to be applied. (default: 25) (25)
ai.nav_carve_size_multiplier The size multiplier applied to the size of the carve volume. The smaller the value, the tighter the skirt around foundation edges, but too small and animals can attack through walls. (default: 4) (4)
ai.nav_carve_use_building_optimization If nav_carve_use_building_optimization is true, we attempt to reduce the amount of navmesh carves for a building. (default: false) (False)
ai.navthink (True)
ai.npc_alertness_drain_rate npc_alertness_drain_rate define the rate at which we drain the alertness level of an NPC when there are no enemies in sight. (Default: 0.01) (0.01)
ai.npc_alertness_to_aim_modifier This is multiplied with the current alertness (0-10) to decide how long it will take for the NPC to deliberately miss again. (default: 0.33) (0.5)
ai.npc_alertness_zero_detection_mod npc_alertness_zero_detection_mod define the threshold of visibility required to detect an enemy when alertness is zero. (Default: 0.5) (0.5)
ai.npc_cover_compromised_cooldown npc_cover_compromised_cooldown defines how long a cover point is marked as compromised before it's cleared again for selection. (default: 10) (10)
ai.npc_cover_info_tick_rate_multiplier The rate at which we gather information about available cover points. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 20) (20)
ai.npc_cover_path_vs_straight_dist_max_diff npc_cover_path_vs_straight_dist_max_diff defines what the maximum difference between straight-line distance and path distance can be when evaluating cover points. (default: 2) (2)
ai.npc_cover_use_path_distance If npc_cover_use_path_distance is set to true then npcs will look at the distance between the cover point and their target using the path between the two, rather than the straight-line distance. (True)
ai.npc_deliberate_hit_randomizer The percentage away from a maximum miss the randomizer is allowed to travel when shooting to deliberately hit the target (we don't want perfect hits with every shot). (default: 0.85f) (0.85)
ai.npc_deliberate_miss_offset_multiplier The offset with which the NPC will maximum miss the target. (default: 1.25) (1.25)
ai.npc_deliberate_miss_to_hit_alignment_time The time it takes for the NPC to deliberately miss to the time the NPC tries to hit its target. (default: 1.5) (1.5)
ai.npc_door_trigger_size npc_door_trigger_size defines the size of the trigger box on doors that opens the door as npcs walk close to it (default: 1.5) (1.5)
ai.npc_enable If npc_enable is set to false then npcs won't spawn. (default: true) (True)
ai.npc_families_no_hurt If npc_families_no_hurt is true, npcs of the same family won't be able to hurt each other. (default: true) (True)
ai.npc_gun_noise_silencer_modifier The modifier by which a silencer reduce the noise that a gun makes when shot. (Default: 0.15) (0.15)
ai.npc_htn_player_base_damage_modifier Baseline damage modifier for the new HTN Player NPCs to nerf their damage compared to the old NPCs. (default: 1.15f) (1.15)
ai.npc_htn_player_frustration_threshold npc_htn_player_frustration_threshold defines where the frustration threshold for NPCs go, where they have the opportunity to change to a more aggressive tactic. (default: 3) (3)
ai.npc_ignore_chairs If npc_ignore_chairs is true, npcs won't care about seeking out and sitting in chairs. (default: true) (True)
ai.npc_junkpile_a_spawn_chance npc_junkpile_a_spawn_chance define the chance for scientists to spawn at junkpile a. (Default: 0.1) (0.1)
ai.npc_junkpile_dist_aggro_gate npc_junkpile_dist_aggro_gate define at what range (or closer) a junkpile scientist will get aggressive. (Default: 8) (8)
ai.npc_junkpile_g_spawn_chance npc_junkpile_g_spawn_chance define the chance for scientists to spawn at junkpile g. (Default: 0.1) (0.1)
ai.npc_junkpilespawn_chance defines the chance for scientists to spawn at NPC junkpiles. (Default: 0.1) (0.07)
ai.npc_max_junkpile_count npc_max_junkpile_count define how many npcs can spawn into the world at junkpiles at the same time (does not include monuments) (Default: 30) (30)
ai.npc_max_population_military_tunnels npc_max_population_military_tunnels defines the size of the npc population at military tunnels. (default: 3) (3)
ai.npc_max_roam_multiplier This is multiplied with the max roam range stat of an NPC to determine how far from its spawn point the NPC is allowed to roam. (default: 3) (3)
ai.npc_only_hurt_active_target_in_safezone If npc_only_hurt_active_target_in_safezone is true, npcs won't any player other than their actively targeted player when in a safe zone. (default: true) (True)
ai.npc_patrol_point_cooldown npc_patrol_point_cooldown defines the cooldown time on a patrol point until it's available again (default: 5) (5)
ai.npc_reasoning_system_tick_rate_multiplier The rate at which we tick the reasoning system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 1) (1)
ai.npc_respawn_delay_max_military_tunnels npc_respawn_delay_max_military_tunnels defines the maximum delay between spawn ticks at military tunnels. (default: 1920) (1920)
ai.npc_respawn_delay_min_military_tunnels npc_respawn_delay_min_military_tunnels defines the minimum delay between spawn ticks at military tunnels. (default: 480) (480)
ai.npc_sensory_system_tick_rate_multiplier The rate at which we tick the sensory system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 5) (5)
ai.npc_spawn_on_cargo_ship Spawn NPCs on the Cargo Ship. (default: true) (True)
ai.npc_spawn_per_tick_max_military_tunnels npc_spawn_per_tick_max_military_tunnels defines how many can maximum spawn at once at military tunnels. (default: 1) (1)
ai.npc_spawn_per_tick_min_military_tunnels npc_spawn_per_tick_min_military_tunnels defineshow many will minimum spawn at once at military tunnels. (default: 1) (1)
ai.npc_speed_crouch_run npc_speed_crouch_run define the speed of an npc when in the crouched run state, and should be a number between 0 and 1. (Default: 0.25) (0.25)
ai.npc_speed_crouch_walk npc_speed_walk define the speed of an npc when in the crouched walk state, and should be a number between 0 and 1. (Default: 0.1) (0.1)
ai.npc_speed_run npc_speed_walk define the speed of an npc when in the run state, and should be a number between 0 and 1. (Default: 0.4) (0.4)
ai.npc_speed_sprint npc_speed_walk define the speed of an npc when in the sprint state, and should be a number between 0 and 1. (Default: 1.0) (1)
ai.npc_speed_walk npc_speed_walk define the speed of an npc when in the walk state, and should be a number between 0 and 1. (Default: 0.18) (0.18)
ai.npc_use_new_aim_system If npc_use_new_aim_system is true, npcs will miss on purpose on occasion, where the old system would randomize aim cone. (default: true) (True)
ai.npc_use_thrown_weapons If npc_use_thrown_weapons is true, npcs will throw grenades, etc. This is an experimental feature. (default: true) (True)
ai.npc_valid_aim_cone npc_valid_aim_cone defines how close their aim needs to be on target in order to fire. (default: 0.8) (0.8)
ai.npc_valid_mounted_aim_cone npc_valid_mounted_aim_cone defines how close their aim needs to be on target in order to fire while mounted. (default: 0.92) (0.92)
ai.npcswimming (True)
ai.ocean_patrol_path_iterations (100000)
ai.sensetime (1)
ai.setdestinationsamplenavmesh (True)
ai.sleepwake (True)
ai.spliceupdates (True)
ai.think (True)
ai.tickrate (5)
ai.usecalculatepath (True)
ai.usegrid (True)
ai.usesetdestinationfallback (True)
antihack.admincheat (True)
antihack.build_inside_check (2)
antihack.build_losradius (0.01)
antihack.build_losradius_sleepingbag (0.3)
antihack.build_terraincheck (True)
antihack.build_vehiclecheck (True)
antihack.debuglevel (1)
antihack.enforcementlevel (1)
antihack.eye_clientframes (2)
antihack.eye_forgiveness (0.5)
antihack.eye_history_forgiveness (0.1)
antihack.eye_history_penalty (100)
antihack.eye_losradius (0.18)
antihack.eye_noclip_backtracking (0.01)
antihack.eye_noclip_cutoff (0.06)
antihack.eye_noclip_margin (0.21)
antihack.eye_penalty (0)
antihack.eye_protection (4)
antihack.eye_serverframes (2)
antihack.eye_terraincheck (True)
antihack.eye_vehiclecheck (True)
antihack.flyhack_extrusion (2)
antihack.flyhack_forgiveness_horizontal (1.5)
antihack.flyhack_forgiveness_horizontal_inertia (10)
antihack.flyhack_forgiveness_vertical (1.5)
antihack.flyhack_forgiveness_vertical_inertia (10)
antihack.flyhack_margin (0.05)
antihack.flyhack_maxsteps (15)
antihack.flyhack_penalty (100)
antihack.flyhack_protection (3)
antihack.flyhack_reject (False)
antihack.flyhack_stepsize (0.1)
antihack.forceposition (True)
antihack.maxdeltatime (1)
antihack.maxdesync (1)
antihack.maxviolation (100)
antihack.melee_backtracking (0.01)
antihack.melee_clientframes (2)
antihack.melee_forgiveness (0.5)
antihack.melee_losforgiveness (0.2)
antihack.melee_penalty (0)
antihack.melee_protection (4)
antihack.melee_serverframes (2)
antihack.melee_terraincheck (True)
antihack.melee_vehiclecheck (True)
antihack.modelstate (True)
antihack.noclip_backtracking (0.01)
antihack.noclip_margin (0.09)
antihack.noclip_margin_dismount (0.22)
antihack.noclip_maxsteps (15)
antihack.noclip_penalty (0)
antihack.noclip_protection (3)
antihack.noclip_reject (True)
antihack.noclip_stepsize (0.1)
antihack.objectplacement (True)
antihack.projectile_anglechange (60)
antihack.projectile_backtracking (0.01)
antihack.projectile_clientframes (2)
antihack.projectile_damagedepth (2)
antihack.projectile_desync (1)
antihack.projectile_forgiveness (0.5)
antihack.projectile_impactspawndepth (1)
antihack.projectile_losforgiveness (0.2)
antihack.projectile_penalty (0)
antihack.projectile_positionoffset (True)
antihack.projectile_protection (6)
antihack.projectile_serverframes (2)
antihack.projectile_terraincheck (True)
antihack.projectile_trajectory (1)
antihack.projectile_vehiclecheck (True)
antihack.projectile_velocitychange (1.1)
antihack.relaxationpause (10)
antihack.relaxationrate (0.1)
antihack.reporting (False)
antihack.speedhack_forgiveness (2)
antihack.speedhack_forgiveness_inertia (10)
antihack.speedhack_penalty (0)
antihack.speedhack_protection (2)
antihack.speedhack_reject (True)
antihack.speedhack_slopespeed (10)
antihack.terrain_check_geometry (False)
antihack.terrain_kill (True)
antihack.terrain_padding (0.3)
antihack.terrain_penalty (100)
antihack.terrain_protection (1)
antihack.terrain_timeslice (64)
antihack.tickhistoryforgiveness (0.1)
antihack.tickhistorytime (0.5)
antihack.userlevel (2)
app.alarmcooldown Cooldown time before alarms can send another notification (in seconds) (30)
app.listenip (0.0.0.0)
app.maxconnections (500)
app.maxconnectionsperip (5)
app.maxmessagesize (1048576)
app.notifications Enables sending push notifications (True)
app.port (28082)
app.publicip ()
app.queuelimit Max number of queued messages - set to 0 to disable message processing (100)
app.serverid (9e6eb549-17a8-429c-9df3-aa8503591776)
app.update Disables updating entirely - emergency use only (True)
batching.verbose (0)
bradley.enabled (True)
bradley.respawndelayminutes (60)
bradley.respawndelayvariance (1)
chat.enabled (True)
chat.globalchat (True)
chat.historysize Number of messages to keep in memory for chat history (1000)
chat.localchat (False)
chat.localchatrange (100)
chat.serverlog (True)
clan.enabled Enables the clan system if set to true (must be set at boot, requires restart) (False)
clan.maxmembercount Maximum number of members each clan can have (local backend only!) (100)
construct.frameminutes (30)
craft.instant (False)
debug.callbacks (False)
debug.checkparentingtriggers (True)
debug.checktriggers (False)
debug.debugdismounts (False)
debug.disablecondition Do not damage any items (False)
debug.log (True)
decay.bracket_0_blockcount Between 0 and this value are considered bracket 0 and will cost bracket_0_costfraction per upkeep period to maintain (15)
decay.bracket_0_costfraction blocks within bracket 0 will cost this fraction per upkeep period to maintain (0.1)
decay.bracket_1_blockcount Between bracket_0_blockcount and this value are considered bracket 1 and will cost bracket_1_costfraction per upkeep period to maintain (50)
decay.bracket_1_costfraction blocks within bracket 1 will cost this fraction per upkeep period to maintain (0.15)
decay.bracket_2_blockcount Between bracket_1_blockcount and this value are considered bracket 2 and will cost bracket_2_costfraction per upkeep period to maintain (125)
decay.bracket_2_costfraction blocks within bracket 2 will cost this fraction per upkeep period to maintain (0.2)
decay.bracket_3_blockcount Between bracket_2_blockcount and this value (and beyond) are considered bracket 3 and will cost bracket_3_costfraction per upkeep period to maintain (200)
decay.bracket_3_costfraction blocks within bracket 3 will cost this fraction per upkeep period to maintain (0.333)
decay.debug (False)
decay.delay_metal How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_override When set to a value above 0 everything will decay with this delay (0)
decay.delay_stone How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_toptier How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_twig How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_wood How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.duration_metal How long should this building grade take to decay when not protected by upkeep, in hours (8)
decay.duration_override When set to a value above 0 everything will decay with this duration (0)
decay.duration_stone How long should this building grade take to decay when not protected by upkeep, in hours (5)
decay.duration_toptier How long should this building grade take to decay when not protected by upkeep, in hours (12)
decay.duration_twig How long should this building grade take to decay when not protected by upkeep, in hours (1)
decay.duration_wood How long should this building grade take to decay when not protected by upkeep, in hours (3)
decay.outside_test_range Maximum distance to test to see if a structure is outside, higher values are slower but accurate for huge buildings (50)
decay.scale (1)
decay.tick (600)
decay.upkeep Is upkeep enabled (True)
decay.upkeep_grief_protection How many minutes can the upkeep cost last after the cupboard was destroyed? default : 1440 (24 hours) (1440)
decay.upkeep_heal_scale Scale at which objects heal when upkeep conditions are met, default of 1 is same rate at which they decay (1)
decay.upkeep_inside_decay_scale Scale at which objects decay when they are inside, default of 0.1 (0.1)
decay.upkeep_period_minutes How many minutes does the upkeep cost last? default : 1440 (24 hours) (1440)
demo.recordlist ()
demo.recordlistmode Controls the behavior of recordlist, 0=whitelist, 1=blacklist (0)
demo.splitmegabytes (200)
demo.splitseconds (3600)
env.day (13)
env.month (5)
env.oceanlevel (0)
env.progresstime (True)
env.time (17.29095)
env.year (2025)
fps.limit (240)
gc.enabled (True)
gc.incremental_enabled (True)
gc.incremental_milliseconds (3)
global.asyncwarmup (False)
global.cinematicgingerbreadcorpses When enabled a player wearing a gingerbread suit will gib like the gingerbread NPC's (False)
global.developer (0)
global.disablebagdropping Disables the backpacks that appear after a corpse times out (False)
global.forceunloadbundles (True)
global.maxspraysperplayer If a player sprays more than this, the oldest spray will be destroyed. 0 will disable (40)
global.maxthreads (8)
global.perf (0)
global.preloadconcurrency (1)
global.skipassetwarmup_crashes (False)
global.sprayduration Base time (in seconds) that sprays last (10800)
global.sprayoutofauthmultiplier Multiplier applied to SprayDuration if a spray isn't in the sprayers auth (cannot go above 1f) (0.5)
global.warmupconcurrency (1)
halloween.enabled (False)
halloween.murdererpopulation Population active on the server, per square km (0)
halloween.scarecrow_beancan_vs_player_dmg_modifier Modified damage from beancan explosion vs players (Default: 0.1). (0.1)
halloween.scarecrow_body_dmg_modifier Modifier to how much damage scarecrows take to the body. (Default: 0.25) (0.25)
halloween.scarecrow_chase_stopping_distance Stopping distance for destinations set while chasing a target (Default: 0.5) (0.5)
halloween.scarecrow_throw_beancan_global_delay The delay globally on a server between each time a scarecrow throws a beancan (Default: 8 seconds). (8)
halloween.scarecrowpopulation Population active on the server, per square km (0)
halloween.scarecrows_throw_beancans Scarecrows can throw beancans (Default: true). (True)
inventory.disableattirelimitations Disables all attire limitations, so NPC clothing and invalid overlaps can be equipped (False)
net.global_network_debug Toggle printing time taken to send all trees & all global entities to client when they connect (False)
net.global_networked_bases (True)
net.limit_global_update_broadcast (default) true = only broadcast to clients with global networking enabled, false = broadcast to every client regardless (True)
net.visdebug (False)
net.visibilityradiusfaroverride (-1)
net.visibilityradiusnearoverride (-1)
nexus.clanclatbatchduration Maximum duration in seconds to batch clan chat messages to send to other servers on the nexus (1)
nexus.defaultzonecontactradius Default distance between zones to allow boat travel, if map.contactRadius isn't set in the nexus (uses normalized coordinates) (0.33)
nexus.endpoint URL endpoint to use for the Nexus API (https://api.facepunch.com/api/nexus/)
nexus.islandspawndistance How far away islands should be spawned, as a factor of the map size (1.5)
nexus.loadingtimeout Time in seconds to keep players in the loading state before going to sleep (900)
nexus.logging (True)
nexus.mapimagescale Scale of the map to render and upload to the nexus (0.5)
nexus.messagelockduration Time in seconds to allow the server to process nexus messages before re-sending (requires restart) (5)
nexus.pinginterval Time in seconds to wait between server status pings (30)
nexus.playermanifestinterval Interval in seconds to broadcast the player manifest to other servers on the nexus (30)
nexus.protectionduration Maximum time in seconds to keep transfer protection enabled on entities (300)
nexus.rpctimeoutmultiplier Multiplier for nexus RPC timeout durations in case we expect different latencies (1)
nexus.secretkey ()
nexus.timeoffset Time offset in hours from the nexus clock (0)
nexus.transferflushtime Maximum amount of time in seconds that transfers should be cached before auto-saving (60)
nexus.zonecontroller (basic)
heli.bulletaccuracy (2)
heli.bulletdamagescale (1)
heli.guns (1)
heli.lifetimeminutes (15)
physics.autosynctransforms (True)
physics.batchsynctransforms (True)
physics.bouncethreshold (2)
physics.gravity Gravity multiplier (1)
physics.groundwatchdebug (False)
physics.groundwatchdelay (0.1)
physics.groundwatchfails (1)
physics.minsteps The slowest physics steps will operate (8)
physics.sendeffects Send effects to clients when physics objects collide (True)
physics.sleepthreshold (0.02)
physics.solveriterationcount The default solver iteration count permitted for any rigid bodies (default 7). Must be positive (3)
physics.steps The amount of physics steps per second (16)
player.tickrate_cl (20)
player.tickrate_sv (16)
player.woundforever Whether the crawling state expires (False)
pool.debug (False)
pool.enabled (True)
pool.mode (2)
pool.prewarm (True)
sentry.hostileduration how long until something is considered hostile after it attacked (120)
sentry.interferenceradius radius to check for other turrets (40)
sentry.maxinterference max interference from other turrets (12)
sentry.targetall target everyone regardless of authorization (False)
server.anticheatid (xyza7891h6UjNfd0eb2HQGtaul0WhfvS)
server.anticheatkey (OWUDFZmi9VNL/7VhGVSSmCWALKTltKw8ISepa0VXs60)
server.anticheatlog (300)
server.anticheattoken (True)
server.arrowarmor (1)
server.arrowdamage (1)
server.artificialtemperaturegrowablerange (4)
server.authtimeout (60)
server.bag_quota_item_amount (True)
server.bansserverendpoint HTTP API endpoint for centralized banning (see wiki) ()
server.bansserverfailuremode Failure mode for centralized banning, set to 1 to reject players from joining if it's down (see wiki) (0)
server.bansservertimeout Timeout (in seconds) for centralized banning web server requests (5)
server.bleedingarmor (1)
server.bleedingdamage (1)
server.branch ()
server.bulletarmor (1)
server.bulletdamage (1)
server.canequipbackpacksinair Allows backpack equipping while not grounded (False)
server.ceilinglightgrowablerange (3)
server.ceilinglightheightoffset (3)
server.censorplayerlist Censors the Steam player list to make player tracking more difficult (True)
server.cinematic (False)
server.combatlogdelay (10)
server.combatlogsize (30)
server.composterupdateinterval (300)
server.compression (False)
server.conveyormovefrequency How often industrial conveyors attempt to move items (value is an interval measured in seconds). Setting to 0 will disable all movement (5)
server.corpsedespawn (300)
server.corpses (True)
server.crawlingenabled Do players go into the crawling wounded state (True)
server.crawlingmaximumhealth Maximum initial health given when a player dies and moves to crawling wounded state (12)
server.crawlingminimumhealth Minimum initial health given when a player dies and moves to crawling wounded state (7)
server.cycletime (500)
server.debrisdespawn (30)
server.defaultblueprintresearchcost How much scrap is required to research default blueprints (10)
server.description (The command-line tool for quick, simple deployment and management of Linux dedicated game servers.)
server.dropitems (True)
server.encryption (2)
server.enforcepipechecksonbuildingblockchanges Whether to check for illegal industrial pipes when changing building block states (roof bunkers) (True)
server.entitybatchsize (100)
server.entitybatchtime (1)
server.entityrate (16)
server.events (True)
server.funwaterdamagethreshold (0.8)
server.funwaterwetnessgain (0.05)
server.gamemode (vanilla)
server.headerimage (https://git.io/JYdmK)
server.hostname (LinuxGSM)
server.identity (rustserver)
server.idlekick (30)
server.idlekickadmins (0)
server.idlekickmode (1)
server.incapacitatedrecoverchance Base chance of recovery after incapacitated wounded state (0.1)
server.industrialcrafterfrequency How often industrial crafters attempt to craft items (value is an interval measured in seconds). Setting to 0 will disable all crafting (5)
server.industrialframebudgetms How long per frame to spend on industrial jobs (0.5)
server.ip (0.0.0.0)
server.ipqueriespermin (30)
server.itemdespawn (300)
server.itemdespawn_container_scale (2)
server.itemdespawn_quick (30)
server.level (Procedural Map)
server.leveltransfer (True)
server.levelurl ()
server.logoimage ()
server.max_sleeping_bags (-1)
server.maxclientinfosize (1048576)
server.maxconnectionsperip (5)
server.maxdecryptqueuebytes (524288000)
server.maxdecryptqueuelength (5000)
server.maxdecryptthreadwait (100)
server.maximummapmarkers How many markers each player can place (5)
server.maximumpings How many pings can be placed by each player (5)
server.maxitemstacksmovedpertickindustrial How many stacks a single conveyor can move in a single tick (12)
server.maxmainthreadwait (100)
server.maxpacketsize_command (100000)
server.maxpacketsize_globalentities (1000)
server.maxpacketsize_globaltrees (100)
server.maxpacketspersecond (1500)
server.maxpacketspersecond_command (100)
server.maxpacketspersecond_rpc (200)
server.maxpacketspersecond_rpc_signal (50)
server.maxpacketspersecond_tick (300)
server.maxpacketspersecond_voice (100)
server.maxpacketspersecond_world (1)
server.maxplayers (50)
server.maxreadqueuebytes (524288000)
server.maxreadqueuelength (5000)
server.maxreadthreadwait (100)
server.maxreceivetime (20)
server.maxunack (4)
server.maxwritequeuebytes (524288000)
server.maxwritequeuelength (5000)
server.maxwritethreadwait (100)
server.meleearmor (1)
server.meleedamage (1)
server.metabolismtick (1)
server.modifiertickrate (1)
server.motd ()
server.netcache (True)
server.netcachesize (0)
server.netlog (False)
server.nonplanterdeathchancepertick (0.005)
server.official (False)
server.optimalplanterqualitysaturation (0.6)
server.packetlog_enabled (False)
server.parachuterepacktime How long it takes to pick up a used parachute in seconds (8)
server.pingduration How long a ping should last (10)
server.plantlightdetection (True)
server.planttick (60)
server.planttickscale (1)
server.playerserverfall (True)
server.playertimeout (60)
server.port (28015)
server.printreportstoconsole Should F7 reports from players be printed to console (False)
server.pve (False)
server.queriespersecond (2000)
server.queryport (28017)
server.radiation (True)
server.reportsserverendpoint HTTP API endpoint for receiving F7 reports ()
server.reportsserverendpointkey If set, this key will be included with any reports sent via reportsServerEndpoint (for validation) ()
server.respawnatdeathposition If a player presses the respawn button, respawn at their death location (for trailer filming) (False)
server.respawnresetrange (50)
server.respawnwithloadout When a player respawns give them the loadout assigned to client.RespawnLoadout (created with inventory.saveloadout) (False)
server.rewounddelay (60)
server.rpclog_enabled (False)
server.salt (1113233618)
server.savebackupcount (2)
server.savecachesize (3825343)
server.saveinterval (300)
server.schematime (1800)
server.secure (True)
server.seed (1665026410)
server.showholstereditems (True)
server.sprinklereyeheightoffset (3)
server.sprinklerradius (3)
server.stability (True)
server.statbackup (False)
server.stats (False)
server.tags Comma-separated server browser tag values (see wiki) ()
server.tickrate (30)
server.updatebatch (512)
server.updatebatchspawn (1024)
server.url (https://linuxgsm.com/)
server.useminimumplantcondition (True)
server.watercontainersleavewaterbehind When transferring water, should containers keep 1 water behind. Enabling this should help performance if water IO is causing performance loss (False)
server.worldsize (3000)
server.woundedmaxfoodandwaterbonus Maximum percent chance added to base wounded/incapacitated recovery chance, based on the player's food and water level (0.25)
server.woundedrecoverchance Base chance of recovery after crawling wounded state (0.2)
server.woundingenabled Can players be wounded after recieving fatal damage (True)
spawn.max_density (1)
spawn.max_rate (1)
spawn.min_density (0.5)
spawn.min_rate (0.5)
spawn.player_base (100)
spawn.player_scale (2)
spawn.respawn_groups (True)
spawn.respawn_individuals (True)
spawn.respawn_populations (True)
spawn.tick_individuals (300)
spawn.tick_populations (60)
stability.accuracy (0.001)
stability.collapse (0.05)
stability.stabilityqueue (9)
stability.strikes (10)
stability.surroundingsqueue (3)
stability.verbose (0)
steam.server_allow_steam_nicknames (True)
time.fixeddelta (0.0625)
time.maxdelta (0.125)
time.pausewhileloading (True)
time.timescale (1)
tree.global_broadcast (False)
vehicle.boat_corpse_seconds (300)
vehicle.carwrecks Determines whether modular cars turn into wrecks when destroyed, or just immediately gib. Default: true (True)
vehicle.cinematictrains If true, trains always explode when destroyed, and hitting a barrier always destroys the train immediately. Default: false (False)
vehicle.trainskeeprunning Determines whether trains stop automatically when there's no-one on them. Default: false (False)
vehicle.vehiclesdroploot Determines whether vehicles drop storage items when destroyed. Default: true (True)
vis.attack (False)
vis.damage (False)
vis.hitboxes (False)
vis.lineofsight (False)
vis.protection (False)
vis.sense (False)
vis.triggers (False)
vis.weakspots (False)
voice.voicerangeboostamount (50)
weather.atmosphere_brightness (-1)
weather.atmosphere_contrast (-1)
weather.atmosphere_directionality (-1)
weather.atmosphere_mie (-1)
weather.atmosphere_rayleigh (-1)
weather.clear_chance (0.9)
weather.cloud_attenuation (-1)
weather.cloud_brightness (-1)
weather.cloud_coloring (-1)
weather.cloud_coverage (-1)
weather.cloud_opacity (-1)
weather.cloud_saturation (-1)
weather.cloud_scattering (-1)
weather.cloud_sharpness (-1)
weather.cloud_size (-1)
weather.dust_chance (0.03)
weather.fog (-1)
weather.fog_chance (0.03)
weather.ocean_scale (-1)
weather.ocean_time (-1)
weather.overcast_chance (0)
weather.rain (-1)
weather.rain_chance (0.08)
weather.rainbow (-1)
weather.storm_chance (0.02)
weather.thunder (-1)
weather.wetness_rain (0.4)
weather.wetness_snow (0.2)
weather.wind (-1)
world.cache (True)
world.configfile ()
world.configstring ()
xmas.enabled (False)
xmas.giftsperplayer (2)
xmas.spawnattempts (5)
xmas.spawnrange (40)
drone.altitudespeedoverride If greater than zero, overrides the drone's vertical movement speed (0)
drone.maxcontrolrange How far drones can be flown away from the controlling computer station (500)
drone.movementspeedoverride If greater than zero, overrides the drone's planar movement speed (0)
dungeonnavmesh.use_baked_terrain_mesh (True)
dynamicnavmesh.use_baked_terrain_mesh (False)
eventschedulewipeoffset.event_hours_before_wipe (24)
excavatorsignalcomputer.chargeneededforsupplies (600)
global.steamconnectiontimeout (10000)
global.steamnagleflush (False)
global.steamnagletime Nagle time, in microseconds (5000)
global.steamnetdebug Turns on varying levels of debug output for the Steam Networking. This will affect performance. (0 = off, 1 = bug, 2 = error, 3 = important, 4 = warning, 5 = message, 6 = verbose, 7 = debug, 8 = everything) (0)
global.steamnetdebug_ackrtt (4)
global.steamnetdebug_message (4)
global.steamnetdebug_p2prendezvous (4)
global.steamnetdebug_packetdecode (4)
global.steamnetdebug_packetgaps (4)
global.steamnetdebug_sdrrelaypings (4)
global.steamsendbuffer Upper limit of buffered pending bytes to be sent (524288)
global.steamsendratemax Maxminum send rate clamp, 0 is no limit (1048576)
global.steamsendratemin Minimum send rate clamp, 0 is no limit (131072)
rcon.ip (0.0.0.0)
rcon.port (28016)
rcon.print If true, rcon commands etc will be printed in the console (False)
rcon.web If set to true, use websocket rcon. If set to false use legacy, source engine rcon. (True)
analytics.analytics_header (X-API-KEY)
analytics.analytics_secret ()
analytics.high_freq_stats (True)
analytics.server_analytics_url (https://rust-api.facepunch.com/api/public/analytics/rust/server)
analytics.stats_blacklist ()
analytics.analytics_enabled (True)
frankensteinbrain.movetowardsrate (1)
frankensteinpet.decayminutes How long before a Frankenstein Pet dies un controlled and not asleep on table (180)
gamemodesoftcore.reclaim_fraction_belt (0.5)
gamemodesoftcore.reclaim_fraction_main (0.5)
gamemodesoftcore.reclaim_fraction_wear (0)
growableentity.framebudgetms (0.25)
guntrap.gun_trap_budget_ms How many milliseconds to spend on target scanning per frame (0.5)
hackablelockedcrate.decayseconds How many seconds until the crate is destroyed without any hack attempts (7200)
hackablelockedcrate.requiredhackseconds How many seconds for the crate to unlock (900)
halloweendungeon.lifetime How long each active dungeon should last before dying (600)
halloweendungeon.population Population active on the server (0)
horse.population Population active on the server, per square km (0)
hotairballoon.outsidedecayminutes How long before a HAB loses all its health while outside (180)
hotairballoon.population Population active on the server (1)
hotairballoon.serviceceiling (200)
ioentity.backtracking (8)
ioentity.debugbudget Print out what is taking so long in the IO frame budget (False)
ioentity.debugbudgetthreshold Ignore frames with a lower ms than this while debugBudget is active (2)
ioentity.framebudgetms (1)
ioentity.responsetime (0.1)
junkpilewater.framebudgetms (0.25)
megaphone.megaphonevoicerange (100)
minicopter.population Population active on the server (0)
mlrs.brokendownminutes How many minutes before the MLRS recovers from use and can be used again (10)
modularcar.outsidedecayminutes How many minutes before a ModularCar loses all its health while outside (864)
modularcar.population Population active on the server (3)
monumentnavmesh.use_baked_terrain_mesh (True)
motorrowboat.decaystartdelayminutes How long until decay begins after the boat was last used (45)
motorrowboat.deepwaterdecayminutes How long before a boat loses all its health while in deep water (120)
motorrowboat.outsidedecayminutes How long before a boat loses all its health while outside. If it's in deep water, deepwaterdecayminutes is used (180)
motorrowboat.population Population active on the server (1)
npcautoturret.sleeperhostiledelay How many seconds until a sleeping player is considered hostile (1200)
parachute.bypassrepack (False)
parachute.landinganimations (False)
petbrain.controldistance (100)
petbrain.drownindeepwater (True)
petbrain.drowntimer (15)
petbrain.idlewhenownermounted (True)
petbrain.idlewhenownerofflineordead (True)
playerhelicopter.insidedecayminutes How long before a player helicopter loses all its health while indoors (2880)
playerhelicopter.outsidedecayminutes How long before a player helicopter loses all its health while outside (480)
playerinventory.forcebirthday (False)
polarbear.population Population active on the server, per square km (1)
reclaimmanager.reclaim_expire_minutes (120)
relationshipmanager.contacts (True)
relationshipmanager.forgetafterminutes (960)
relationshipmanager.maxplayerrelationships (128)
relationshipmanager.maxteamsize (8)
relationshipmanager.mugshotupdateinterval (300)
relationshipmanager.seendistance (10)
rhib.rhibpopulation Population active on the server (0)
ridablehorse.population Population active on the server, per square km (2)
aimanager.ai_dormant If ai_dormant is true, any npc outside the range of players will render itself dormant and take up less resources, but wildlife won't simulate as well. (True)
aimanager.ai_dormant_max_wakeup_per_tick ai_dormant_max_wakeup_per_tick defines the maximum number of dormant agents we will wake up in a single tick. (default: 30) (30)
aimanager.ai_htn_animal_tick_budget ai_htn_animal_tick_budget defines the maximum amount of milliseconds ticking htn animal agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_player_junkpile_tick_budget ai_htn_player_junkpile_tick_budget defines the maximum amount of milliseconds ticking htn player junkpile agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_player_tick_budget ai_htn_player_tick_budget defines the maximum amount of milliseconds ticking htn player agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_use_agency_tick If ai_htn_use_agency_tick is true, the ai manager's agency system will tick htn agents at the ms budgets defined in ai_htn_player_tick_budget and ai_htn_animal_tick_budget. If it's false, each agent registers with the invoke system individually, with no frame-budget restrictions. (default: true) (True)
aimanager.ai_to_player_distance_wakeup_range If an agent is beyond this distance to a player, it's flagged for becoming dormant. (160)
aimanager.nav_disable If set to true the navmesh won't generate.. which means Ai that uses the navmesh won't be able to move (False)
aimanager.nav_obstacles_carve_state nav_obstacles_carve_state defines which obstacles can carve the terrain. 0 - No carving, 1 - Only player construction carves, 2 - All obstacles carve. (2)
aimanager.nav_wait If true we'll wait for the navmesh to generate before completely starting the server. This might cause your server to hitch and lag as it generates in the background. (True)
aimanager.pathfindingiterationsperframe The maximum amount of nodes processed each frame in the asynchronous pathfinding process. Increasing this value will cause the paths to be processed faster, but can cause some hiccups in frame rate. Default value is 100, a good range for tuning is between 50 and 500. (100)
aimanager.setdestination_navmesh_failsafe If set to true, npcs will attempt to place themselves on the navmesh if not on a navmesh when set destination is called. (False)
coverpointvolume.cover_point_sample_step_height cover_point_sample_step_height defines the height of the steps we do vertically for the cover point volume's cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 2.0) (2)
coverpointvolume.cover_point_sample_step_size cover_point_sample_step_size defines the size of the steps we do horizontally for the cover point volume's cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 6.0) (6)
samsite.staticrepairseconds how long until static sam sites auto repair (1200)
santasleigh.altitudeaboveterrain (50)
santasleigh.desiredaltitude (60)
scraptransporthelicopter.population Population active on the server (0)
simpleshark.disable (False)
simpleshark.forcesurfaceamount (0)
slotmachine.forcepayoutindex (-1)
snowmobile.allowpassengeronly Allow mounting as a passenger when there's no driver (False)
snowmobile.allterrain If true, snowmobile goes fast on all terrain types (False)
snowmobile.outsidedecayminutes How long before a snowmobile loses all its health while outside (1440)
stag.population Population active on the server, per square km (3)
telephonemanager.maxcalllength (120)
telephonemanager.maxconcurrentcalls (10)
traincar.decayminutes How long before a train car despawns (30)
traincar.population Population active on the server (2.3)
traincar.wagons_per_engine Ratio of wagons to train engines that spawn (2)
traincarunloadable.decayminutesafterunload How long before an unloadable train car despawns afer being unloaded (10)
traincouplingcontroller.max_couple_speed Maximum difference in velocity for train cars to couple (9)
tugboat.tugcorpseseconds (7200)
tugboat.tugdecayminutes How long before a tugboat loses all its health while outside (2160)
tugboat.tugdecaystartdelayminutes How long until decay begins after the tugboat was last used (1440)
wipetimer.days_to_add_test (0)
wipetimer.hours_to_add_test (0)
wipetimer.wipecronoverride Custom cron expression for the wipe schedule. Overrides all other convars (except wipeUnixTimestampOverride) if set. Uses Cronos as a parser: https://github.com/HangfireIO/Cronos/ ()
wipetimer.wipedayofweek 0=sun,1=mon,2=tues,3=wed,4=thur,5=fri,6=sat (4)
wipetimer.wipehourofday Which hour to wipe? 14.5 = 2:30pm (19)
wipetimer.wipetimezone The timezone to use for wipes. Defaults to the server's time zone if not set or invalid. Value should be a TZ identifier as seen here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones (Europe/London)
wipetimer.wipeunixtimestampoverride Unix timestamp (seconds) for the upcoming wipe. Overrides all other convars if set to a time in the future. (0)
wolf.population Population active on the server, per square km (2)
xmasdungeon.playerdetectrange How far we detect players from our inside/outside (30)
xmasdungeon.xmaslifetime How long each active dungeon should last before dying (1200)
xmasdungeon.xmaspopulation Population active on the server (0)
zombie.population Population active on the server, per square km (0)baseboat.seconds_between_shore_drift( )
baseboat.seconds_until_shore_drift( )
boombox.clearradiobyuser( )
bradleyapc.spawnroadbradley( )
cassette.clearcassettes( )
cassette.clearcassettesbyuser( )
commands.echo( )
commands.find( )
camerarenderermanager.pool_stats( )
global.adminui_deleteugccontent( )
global.adminui_fullrefresh( )
global.adminui_requestfireworkpattern( )
global.adminui_requestplayerlist( )
global.adminui_requestserverconvars( )
global.adminui_requestserverinfo( )
global.adminui_requestugccontent( )
global.adminui_requestugclist( )
global.authcount( ) Returns all entities that the provided player is authed to (TC's, locks, etc), supports --json
global.authradius( )
global.ban( ) ban <player> <reason> [optional duration]
global.banid( ) banid <steamid> <username> <reason> [optional duration]
global.banlist( ) List of banned users (sourceds compat)
global.banlistex( ) List of banned users - shows reasons and usernames
global.bans( ) List of banned users
global.buildinfo( ) Get information about this build
global.carstats( ) Get information about all the cars in the world
global.clearugcentitiesinrange( )
global.clearugcentity( )
global.clientperf( )
global.clientperf_frametime( )
global.deauthradius( )
global.entcount( ) Returns all entities that the provided player has placed, supports --json
global.entid( )
global.getugcinfo( )
global.injureplayer( )
global.kick( )
global.kickall( )
global.killplayer( )
global.listid( ) List of banned users, by ID (sourceds compat)
global.moderatorid( )
global.mute( )
global.mutelist( ) Print a list of currently muted players
global.ownerid( )
global.playerlist( ) Get a list of players
global.players( ) Print out currently connected clients etc
global.recoverplayer( )
global.removemoderator( )
global.removeowner( )
global.removeskipqueue( ) Removes skip queue permission from a SteamID
global.say( ) Sends a message in chat
global.serverinfo( ) Get a list of information about the server
global.skin_radius( ) skin_radius 'skin' 'radius'
global.skipqueue( )
global.skipqueueid( ) Adds skip queue permissions to a SteamID
global.sleepingusers( ) Show user info for players on server.
global.sleepingusersinrange( ) Show user info for sleeping players on server in range of the player.
global.stats( ) Print out stats of currently connected clients
global.status( ) Print out currently connected clients
global.teaminfo( )
global.unban( )
global.unmute( )
global.upgrade_radius( ) upgrade_radius 'grade' 'radius'
global.users( ) Show user info for players on server.
global.usersinrange( ) Show user info for players on server in range of the player.
global.usersinrangeofplayer( ) Show user info for players on server in range of the supplied player (eg. Jim 50)
ai.addignoreplayer( ) Add a player (or command user if no player is specified) to the AIs ignore list.
ai.brainstats( )
ai.clearignoredplayers( ) Remove all players from the AIs ignore list.
ai.killanimals( )
ai.killscientists( )
ai.printignoredplayers( ) Print a lost of all the players in the AI ignore list.
ai.removeignoreplayer( ) Remove a player (or command user if no player is specified) from the AIs ignore list.
ai.selectnpclookatserver( )
ai.sleepwakestats( )
ai.wakesleepingai( )
app.appban( )
app.appunban( )
app.connections( )
app.info( )
app.pair( )
app.regeneratetoken( )
app.resetlimiter( )
app.retry_initialize( ) Retry initializing the Rust+ companion server if it previously failed
bradley.quickrespawn( )
chat.cardgamesay( )
chat.clansay( )
chat.localsay( )
chat.say( )
chat.search( )
chat.tail( )
chat.teamsay( )
clan.info( ) Prints info about a clan given its ID
console.search( )
console.tail( )
craft.add( )
craft.cancel( )
craft.canceltask( )
craft.fasttracktask( )
data.export( )
debug.bench_io( ) Spawn lots of IO entities to lag the server
debug.breakheld( ) Break the current held object
debug.breakitem( ) Break all the items in your inventory whose name match the passed string
debug.deleteentitiesbyshortname( )
debug.drink( )
debug.eat( )
debug.enable_player_movement( )
debug.flushgroup( ) Takes you in and out of your current network group, causing you to delete and then download all entities in your PVS again
debug.heal( )
debug.hurt( )
debug.puzzlereset( ) reset all puzzles
debug.refillvitals( )
debug.renderinfo( )
debug.repair_inventory( ) Repair all items in inventory
debug.resetsleepingbagtimers( )
debug.setdamage( )
debug.setfood( )
debug.sethealth( )
debug.setradiation( )
debug.setwater( )
debug.spawnparachutetester( )
debug.stall( )
demo.record( )
demo.stop( )
entity.debug_toggle( )
entity.deleteby( ) Destroy all entities created by provided users (separate users by space)
entity.deletebytextblock( ) Destroy all entities created by users in the provided text block (can use with copied results from ent auth)
entity.find_entity( )
entity.find_group( )
entity.find_id( )
entity.find_parent( )
entity.find_radius( )
entity.find_self( )
entity.find_status( )
entity.nudge( )
entity.spawnlootfrom( )
entity.spawn( )
entity.spawngrid( )
entity.spawnitem( )
env.addtime( )
gamemode.set( )
gamemode.setteam( )
gc.alloc( )
gc.collect( )
gc.unload( )
global.breakclothing( )
global.breakitem( )
global.clearallsprays( )
global.clearallspraysbyplayer( )
global.cleardroppeditems( )
global.clearspraysatpositioninradius( )
global.clearspraysinradius( )
global.colliders( )
global.error( )
global.free( )
global.injure( )
global.kill( )
global.objects( )
global.queue( )
global.quit( )
global.recover( )
global.report( )
global.respawn( )
global.respawn_sleepingbag( )
global.respawn_sleepingbag_remove( )
global.restart( )
global.setinfo( )
global.sleep( )
global.spectate( )
global.spectateid( )
global.status_sv( )
global.subscriptions( )
global.sysinfo( )
global.sysuid( )
global.teleport( )
global.teleport2autheditem( )
global.teleport2death( )
global.teleport2marker( )
global.teleport2me( )
global.teleport2owneditem( )
global.teleportany( )
global.teleporteveryone2me( )
global.teleportlos( )
global.teleportpos( )
global.textures( )
global.version( )
harmony.load( )
harmony.unload( )
hierarchy.cd( )
hierarchy.del( )
hierarchy.ls( )
inventory.clearinventory( ) Clears the inventory of a target player. eg. inventory.clearInventory jim
inventory.copyto( ) Copies the players inventory to the player in front of them
inventory.defs( )
inventory.deployloadout( ) Deploys the given loadout to a target player. eg. inventory.deployLoadout testloadout jim
inventory.deployloadoutinrange( ) Deploys a loadout to players in a radius eg. inventory.deployLoadoutInRange testloadout 30
inventory.endloot( )
inventory.equipslot( )
inventory.equipslottarget( )
inventory.give( )
inventory.giveall( )
inventory.givearm( )
inventory.givebp( )
inventory.giveid( )
inventory.giveto( )
inventory.lighttoggle( )
inventory.listloadouts( ) Prints all saved inventory loadouts
inventory.reloaddefs( )
inventory.resetbp( )
inventory.saveloadout( ) Saves the current equipped loadout of the calling player. eg. inventory.saveLoadout loaduoutname
inventory.unlockall( )
manifest.printmanifest( )
manifest.printmanifestraw( )
memsnap.full( )
memsnap.managed( )
memsnap.native( )
nexus.broadcast_ping( )
nexus.ping( )
nexus.playeronline( )
nexus.refreshislands( )
nexus.transfer( )
nexus.uploadmap( ) Reupload the map image to the nexus. Normally happens automatically at server boot. WARNING: This will lag the server!
heli.call( )
heli.calltome( )
heli.drop( )
heli.strafe( )
heli.testpuzzle( )
player.abandonmission( )
player.cinematic_gesture( )
player.cinematic_play( )
player.cinematic_stop( )
player.copyrotation( )
player.createskull( )
player.createtrophy( )
player.dismount( )
player.fillwater( )
player.gesture_radius( )
player.gotosleep( )
player.markhostile( )
player.mount( )
player.printpresence( )
player.printstats( )
player.reloadweapons( )
player.resetstate( ) Resets the PlayerState of the given player
player.stopgesture_radius( )
player.swapseat( )
player.wakeup( )
player.wakeupall( )
pool.clear_assets( )
pool.clear_memory( )
pool.clear_prefabs( )
pool.export_prefabs( )
pool.fill_prefabs( )
pool.print_arraypool( )
pool.print_assets( )
pool.print_memory( )
pool.print_prefabs( )
profile.flush_analytics( )
profile.start( )
profile.stop( )
render.print_global_entities( ) Print off count of global building entities on the server
render.tree_entities( )
server.backup( ) Backup server folder
server.broadcastplayvideo( )
server.cheatreport( )
server.combatlog( ) Get the player combat log
server.combatlog_outgoing( ) Get the player combat log, only showing outgoing damage
server.fps( )
server.listtoolcupboards( ) Prints all the Tool Cupboards on the server
server.listvendingmachines( ) Prints all the vending machines on the server
server.netprotocol( )
server.packetlog( )
server.playerlistpos( ) Prints the position of all players on the server
server.printdecryptqueue( )
server.printeyes( ) Print the current player eyes.
server.printpos( ) Print the current player position.
server.printreadqueue( )
server.printrot( ) Print the current player rotation.
server.printwritequeue( )
server.readcfg( )
server.resetserveremoji( ) Rescans the serveremoji folder, note that clients will need to reconnect to get the latest emoji
server.rpclog( )
server.save( ) Force save the current game
server.sendnetworkupdate( ) Send network update for all players
server.setshowholstereditems( ) Show holstered items on player bodies
server.snapshot( ) This sends a snapshot of all the entities in the client's pvs. This is mostly redundant, but we request this when the client starts recording a demo.. so they get all the information.
server.start( ) Starts a server
server.stop( ) Stops a server
server.writecfg( ) Writes config files
spawn.cargoshipevent( )
spawn.fill_groups( )
spawn.fill_individuals( )
spawn.fill_populations( )
spawn.report( )
spawn.scalars( )
stability.refresh_stability( )
supply.call( )
supply.drop( )
system.cpu_affinity( )
system.cpu_priority( )
vehicle.autohover( )
vehicle.boatdriftinfo( ) Print out boat drift status for all boats
vehicle.fixcars( )
vehicle.killboats( )
vehicle.killcars( )
vehicle.killdrones( )
vehicle.killminis( )
vehicle.killscraphelis( )
vehicle.killtrains( )
vehicle.stop_all_trains( )
vehicle.swapseats( )
voice.togglevoicerangeboost( ) Enabled/disables voice range boost for a player eg. ToggleVoiceRangeBoost sam 1
weather.load( )
weather.report( )
weather.reset( )
workshop.print_approved_skins( )
world.monuments( )
world.renderlabs( ) Renders a PNG of the current map's underwater labs, for a specific floor
world.rendermap( ) Renders a high resolution PNG of the current map
world.rendertunnels( ) Renders a PNG of the current map's tunnel network
xmas.refill( )
cui.cui_test( )
cui.cui_test_update( )
cui.endtest( )
global.dump( )
global.steamrelayinit( )
global.steamstatus( )
analytics.pending_analytics( )
growableentity.growall( )
meta.add( ) add <convar> <amount> - adds amount to convar
note.update( )
relationshipmanager.acceptinvite( )
relationshipmanager.addtoteam( )
relationshipmanager.fakeinvite( )
relationshipmanager.kickmember( )
relationshipmanager.leaveteam( )
relationshipmanager.promote( )
relationshipmanager.rejectinvite( )
relationshipmanager.sendinvite( )
relationshipmanager.sleeptoggle( )
relationshipmanager.trycreateteam( )
relationshipmanager.wipe_all_contacts( )
relationshipmanager.wipecontacts( )
ridablehorse.sethorsebreed( )
santasleigh.drop( )
telephonemanager.printallphones( )
wipetimer.printtimezones( )
wipetimer.printwipe( )
ziplinelaunchpoint.report( )

