DCS World Dedicated Server on Linux via Wine

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • DCS World Dedicated Server on Linux via Wine

      DCS World Dedicated Server on Linux via Wine


      Voraussetzung:

      Hardware:
      Der Server sollte die Mindestanforderungen für DCS World erfüllen, außer die Grafikkarte, die muss nicht so Leistungsfähig sein.
      Es reicht also die bei vielen Angebotenen enthaltenen CPU Graphik.

      Software:
      Ein aktuelles Linux Betriebssystem (64bit Version), mit dem man sich auskennt.
      Getestet wurde das ganze unter Ubuntu Server 18.04.
      Für die Grafikkarte sollten aktuelle Mesa Treiber ab Version 18 oder höher vorhanden sein.

      Skill:
      Ein wenig Erfahrung mit Linux als Betriebssystem und DCS World als Anwendung.


      Dieses HowTo wurde auf einem "alten" Server bei Hetzner (hetzner.de/) getestet.
      Der Server ist mit folgender Hardware ausgestattet:
      CPU: Intel i7 920 mit 2,67 GHz
      RAM: 8 GiB DDR3
      HD: 750 GiB
      GPU: ATI HD 2400 Pro mit 128 MB VRAM (das ist eine absolute Lowend GPU aus der R600 Serie von 2007, aber es gibt gute Linux Treiber dafür)

      Als Betriebssystem wird Ubuntu 18.04.2 benutzt, der Rest ist wie weiter unten beschrieben.

      DCS nutzt auf einen leeren Server mit der Mission „Border Patrol 1.1“ 55% CPU und 42% RAM.




      Vorbereitung:

      Software Installation auf dem Server:

      Das Betriebssystem und alle Programmpakete müssen in der 64bit Version installiert sein/werden.

      Folgende Paketen sollte Installiert sein/werden:

      - SSH Server
      - Wine 4.0 oder neuer (gerne auch Staging)
      - winetricks (aktuelle Version)
      - zenity, als Oberfläche für winetricks
      - xvfb, für die spätere Ausführung ohne Darstellung der Fenster.
      - nohub, oder screen um Programme von der Konsole zu entkoppeln.

      Beachtet die nötigen Abhängigkeiten aller Programme, das können eine menge Pakete sein.


      Software auf einem Lokalen Windows PC:

      Zur Installation des Server benötigen wir leider einige Anwendungen auf dem Windows PC.

      - SSH Client, zB. PuTTY
      - ein X-Server für Windows, z.B. VcXsrv oder Xming

      Macht Euch bitte selbständig mit diesen Anwendungen vertraut und liest die entsprechenden Dokumentationen.


      oder Software auf einem Lokalen Linux PC:

      Es wird ein Linux PC mit Desktopsystem und X-Windows benötigt, alles andere sollte schon dabei sein (z.B. SSH).


      Installation:

      Von Eurem Lokalen-PC aus startet Ihr eine SSH Verbindung zum zukünftigen DCS Server, dabei müsst Ihr das X-Forwarding aktivieren (Doku dazu lesen).

      Falls noch nicht passiert, installiert Ihr die oben erwähnten Pakete (Wine, winetricks, zenity, xvfb, ...).

      Es muss ein nicht privilegierter Benutzer angelegt werde, in dessen Kontext der DCS Server läuft.
      Dazu bitte die Betriebssystemaufrufe nutzen, z.B. adduser <Benutzername> (Debian/Ubuntu)

      Nun muss in den Kontext des neuen Benutzers gewechselt werden, z.b. su -l <Benutzername>

      Am besten ist es, wenn ein eigenes Wine-Prefix für den Server angelegt wird.
      Dazu muss nur das folgende angegeben werden: WINEPREFIX=~/wine/DCSWorld
      Das erzeugt in dem Home Verzeichnis des Benutzers ein Ordner wine und darin einen Ordner DCSWorld. Hier werden später alle Daten gespeichert und DCS World installiert.

      Wichtig ist auch, das als Architektur für Wine ein 64bit System angegeben wird.
      Dazu muss das folgende angegeben werden: WINEARCH="win64"

      Diese beiden Angaben müssen immer vor jeden Wine Aufruf angegeben werden.


      Vor der eigentlichen Installation muss noch die Windows Version festgelegt werden.
      Das startet das Programm „winecfg“ und stellt dort auf dem Ersten Tab die Windows Version ein, am auf Windows 10.
      WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld winecfg

      Anschließend müssen noch die "Visual C++ 2015 libraries" und die "Windows Fonts" installiert werden, ansonsten stürzt später DCS World ab.
      Dazu wird das Programm winetrick benötigt.
      WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld winetricks vcrun2015 allfonts

      Gegebenenfalls meckert winetricks über fehlende Programmpakete, dann müssen diese vorher noch Installiert werden.

      Anschließend ladet den aktuellen DCS World Installer herunter, in diesem Fall den Open BETA Installer: wget https://updates.digitalcombatsimulator.com/installers/DCS_World_OpenBeta_web.exe ~/wine/.

      Danach kann der Installer über wine gestartet werden: WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld wine ~/wine/DCS_World_OpenBeta_web.exe

      Nach der Installation kann DCS World als Server gestartet werden, dazu muss nur die DCS.exe mit den entsprechenden Parameter gestartet werden (--server --norender).

      WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld wine ~/wine/DCSWorld/drive_c/Program\ Files/Eagle\ Dynamics/DCS\ World\ OpenBeta/bin/DCS.exe --server --norender

      Beim ersten Start erscheint der DCS Login Dialog, hier müsst ihr Euren DCS World Login angeben und die beiden Haken bei "Save password" und "Auto login" setzen und euch anschließend einloggen.

      Nun sollte sich der DCS World Splash Screen öffnen.

      Zum Administrieren des Servers müsst ihr das ED eigene WebGUI unter digitalcombatsimulator.com/en/personal/server/ nutzen, meldet Euch hier mit den selben DCS World Account Daten an.
      Ihr solltet den Server in der Liste "My serves" sehen.

      Zur Weiteren Bearbeitung und Administration sollte der Server vorerst beendet werden.
      Dazu macht Ihr am besten eine zweite SSH Verbindung zu dem Server auf und last euch die ProzessID von DCS World ausgeben: ps aux | grep -i dcs
      Dann könnt Ihr ein einfach den DCS Prozess beenden: kill <ProcessID>
      Dies ist immer die Möglichkeit DCS World zu beenden.

      Ihr müsst den Ordner „Missions“ für die Multiplayer Missionen noch erzeugen, dazu wechselt Ihr in den entsprechenden Ordner in dem wine Verzeichnis, z.B.: cd ~/wine/DCSWorld/drive_c/users/<Benutzername>/Saved Games/DCS.openbeta
      Dort muss der Ordner "Missions" erzeugt werden: mkdir Missions
      In diesem Ordner werden die Multiplayer Missionen gespeichert, denn hier sucht DCS World standardmäßig nach den Missionen.


      Nun wechselt Ihr am besten in den wine Ordner unter eurem Benutzer: cd ~/wine

      Hier erzeugt Ihr ein kleines BashScript zum starten des Servers.
      Das Script kann wie folgt heißen "startDCSWorldServer.sh" und muss das folgende enthalten:
      WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld wine ~/wine/DCSWorld/drive_c/Program\ Files/Eagle\ Dynamics/DCS\ World\ OpenBeta/bin/DCS.exe --server --norender

      Das Script muss nur noch ausführbar gemacht werden: chmod +x startDCSWorldServer.sh

      Mit den folgenden Befehlen wird nun der DCS World Dedicated Server gestartet:
      nohup xvfb-run -a -e ~/xvfb.log ~/wine/startDCSWorldServer.sh &

      nohup : schiebt die Programme in den Hintergrund, so das man sich einfach von der Konsole abmelden kann.
      xvfb-run -a -e ~/xvfb.log : startet das Programm auf einen Virtuellen X-Server, damit der DCS World Splashscreen nicht angezeigt wird. Der Parameter -a sorgt dafür, das xvfb automatisch einen freien Display Server wählt, der Parameter -e ~/xvfb.log gibt an das gegebenenfalls Logausgaben in die Datei gespeichert werden.
      ~/wine/startDCSWorldServer.sh : startet den eigentlichen DCS World Server.
      & : das Kaufmännische Und ist wichtig und darf nicht vergessen werden, es entkoppelt die Programme von der Konsole

      Ich muss nach dem Start des Servers die Mission über die ED Server Admin Seite starten.
    • Hinweis zum Namen des Admin Users:
      Derzeit heißt der User immer "player" und lässt sich nicht über die Weboberfläche oder einer normalen Konfigurationsdatei ändern.
      Aber Ihr könnt das wie folgt doch tun.

      Dazu müsst Ihr in den DCS World Installationsordner wechseln und dort in den Ordner "MissionEditor".
      Hier macht Ihr von der Datei "dedicatedServerGUI.lua" eine Sicherheitskopie.
      Anschließend öffnet Ihr die Datei "dedicatedServerGUI.lua" und geht zur Zeile 65.
      Hier müsst Ihr vor der Zeile "local res = net.start_server(s)" eine neue Zeile einfügen und dort das folgende eintragen: net.set_name("<Admin Name>")
      Das ganze wird natürlich erst nach einem Neustart des Servers wirksam und Ihr müsst es nach jedem Update wiederholen.


      Hinweis zum Updaten der DCS World Installation:
      Um DCS World upzudaten müsst Ihr Euch per SSH an dem Server anmelden, vergesst dabei nicht das X-Forwarding zu aktivieren. Ihr müsst euch als der unprivilegierte Benutzer anmeldet, oder in dessen Kontext wechselt.
      Nun beendet Ihr die laufende Instanz von DCS World (siehe oben).
      Zum Starten des Updates müsst Ihr nur folgendes in der Konsole eingeben.

      WINEARCH="win64" WINEPREFIX=~/wine/DCSWorld wine ~/wine/DCSWorld/drive_c/Program\ Files/Eagle\ Dynamics/DCS\ World\ OpenBeta/bin/DCS_updater.exe update

      Nach dem Durchlauf des Updates könnt Ihr den Server wie oben beschrieben wieder starten.


      Hinweis zu den Server Einstellungen:
      In der Datei ~/wine/DCSWorld/drive_c/users/<Benutzername>/Saved Games/DCS.openbeta/Config/serverSettings.lua lassen sich ein paar Einstellungen machen, die derzeit nicht über das WebGUI zugänglich sind (z.B. description oder maxPlayers größer als 20):

      Source Code

      1. cfg =
      2. {
      3. ["uri"] = "startServer",
      4. ["current"] = 3,
      5. ["isPublic"] = true,
      6. ["description"] = "This server runs under Linux. Please test this server to check if everything works and if performance problems can occur.",
      7. ["require_pure_textures"] = false,
      8. ["listShuffle"] = false,
      9. ["missionList"] =
      10. {
      11. [1] = "C:\\users\\<Benutzername>\\Saved Games\\DCS.openbeta\\Missions\\Border Patrol 1.1.miz",
      12. }, -- end of ["missionList"]
      13. ["advanced"] =
      14. {
      15. ["allow_change_tailno"] = true,
      16. ["disable_events"] = false,
      17. ["allow_ownship_export"] = true,
      18. ["allow_object_export"] = true,
      19. ["pause_on_load"] = false,
      20. ["allow_sensor_export"] = true,
      21. ["event_Takeoff"] = false,
      22. ["pause_without_clients"] = false,
      23. ["client_outbound_limit"] = 0,
      24. ["client_inbound_limit"] = 0,
      25. ["event_Role"] = true,
      26. ["allow_change_skin"] = true,
      27. ["event_Connect"] = true,
      28. ["event_Ejecting"] = true,
      29. ["event_Kill"] = true,
      30. ["event_Crash"] = true,
      31. ["resume_mode"] = 1,
      32. ["maxPing"] = 0,
      33. }, -- end of ["advanced"]
      34. ["require_pure_models"] = false,
      35. ["require_pure_clients"] = false,
      36. ["name"] = "DCS World Dedicated Server on Linux",
      37. ["port"] = 10308,
      38. ["password"] = "",
      39. ["listLoop"] = false,
      40. ["bind_address"] = "",
      41. ["maxPlayers"] = "100",
      42. } -- end of cfg
      Display All