5.8 KiB
Linux build and launch
The simulation builds and runs on Debian 13 x86_64 with its original Unity 2018.1.6f1 editor. UNet, the legacy .NET runtime, the scene, and the traffic algorithms are retained. The source recovery is described in Recovery/README.md.
Run over SSH
On the server:
./run-linux.sh --vnc
On your local computer, open a second SSH connection with a tunnel:
ssh -L 5901:127.0.0.1:5901 your-server
Connect a VNC viewer to 127.0.0.1:5901. The VNC service listens only on
localhost; access it through the SSH tunnel. The launcher starts a virtual
1280×800 display, both Python services, the simulation server, and its graphical
client. It requires xvfb, xauth, and x11vnc. Close the client or press
Ctrl-C in the launcher terminal to stop all its processes.
Other modes:
./run-linux.sh --server # Python services and headless simulation server
./run-linux.sh --demo # Server plus graphical client on the current desktop
Python 3 and Bash are required. The launcher uses local HTTP ports 8080/8081 and
UNet port 7777; it refuses to start if an existing service occupies those ports.
Traffic lights start in the original off state (uncontrolled intersections).
The simulation does not automatically cycle them; the original HTTP API can
control them. Logs are written under Builds/linux/.
A separate graphical Linux client can connect to an already running server:
Builds/linux/Simulation.x86_64 --connect SERVER_ADDRESS \
-screen-width 1280 -screen-height 800 -screen-fullscreen 0 -force-glcore
Without --connect, the player opens the original connection menu. --server
starts the server automatically; --traffic-url and --event-url can select
other HTTP services. Keep server and client in separate processes, as the
original simulation uses delayed client interpolation.
Build
./build-linux.sh
Output: Builds/linux/Simulation.x86_64 and Builds/linux/Simulation_Data/.
Distribute both together. The build log is Builds/linux/build.log.
The script uses Xvfb when no display is available and places temporary import
files in Builds/linux/tmp by default to avoid filling a small /tmp tmpfs.
Override the editor or temporary directory when needed:
UNITY_EDITOR=/path/to/2018.1.6f1/Editor/Unity TMPDIR=/large/tmp ./build-linux.sh
The build includes Assets/Scenes/Main.unity. The original build settings
incorrectly named the nonexistent SampleScene.unity.
Installed toolchain
/opt/unity/2018.1.6f1/Editor/Unity, including Linux player support.- Blender 2.79b at
/opt/blender-2.79b-linux-glibc219-x86_64/blender, also available asblenderon PATH for importing the original.blendmodels. - GTK 2, libsoup 2.4, GLU, and GConf 2 compatibility libraries. GConf came from
Debian's
libgconf-2-4_3.2.6-8_amd64.debandgconf2-common_3.2.6-8_all.deb, as Debian 13 no longer includes it. - Xvfb, xauth, and x11vnc for SSH access. Mesa llvmpipe successfully rendered the client without a physical GPU. This software rendering can be slower than a desktop GPU. The machine has no audio device, so Unity reports audio fallback messages and runs without sound.
Downloads: Unity 2018.1.6f1, Blender 2.79b, Debian GConf packages. Recovery-only tools (ILSpy, UnityPy, OpenEXR, and .NET SDK) are not needed to build or run the restored source.
Activation on this machine
Unity Personal was activated using the signed-in account. The modern
entitlement alone was insufficient for this editor; Unity's official Licensing
Client successfully issued the compatible legacy license with --activate-ulf.
The editor now reads ~/.local/share/unity3d/Unity/Unity_lic.ulf.
No additional sign-in is needed for builds on this machine while that license
remains valid. Licenses and credentials are outside the repository and build.
./unity-ssh.sh opens a private D-Bus session with a dedicated keyring in
~/.local/share/unity-ssh/keyrings. It preserves the desktop keyring. Use the
same local keyring password when reopening it; this is separate from your Unity
account password. The helper checks that credentials can be stored before
opening its shell. Run ./unity-ssh.sh --check to check the keyring alone.
For an account sign-in or modern Personal activation, run inside that shell:
unity auth login
unity license activate --personal --accept-eula
unity license status
The login command prints a browser URL usable on another computer. The activation command accepts the Personal terms. Those commands alone may still require the legacy ULF compatibility step for Unity 2018. See the official Unity CLI documentation.
Verification
Verified on this host:
- Linux player and editor C# compilation using the genuine Unity 2018 libraries.
- A complete Linux standalone build, followed by server and graphical client
startup through
run-linux.sh --vnc. - Client connection, car spawning, completed trips, and traffic counts sent to the original Python backend.
- HTTP traffic-light changes, queuing at red lights, and resumed traffic.
- A local event displayed by the client's notification UI.
- Rendered town, pedestrians, cars, post-processing, and recovered lighting.
- No missing-script warnings or managed runtime exceptions during the successful server/client test. Old vendor API deprecation and model import warnings remain.
- Launcher shutdown cleans up the services, players, VNC server, and virtual display it started.
Local screenshots and test captures are under Builds/linux/; generated output
and the preserved old Library cache are ignored by Git.