Run the latest packaged Linux release of UAVLab-SLU/DRV-Unreal in Docker,
publish its Pixel Streaming player to the host, and display the DRV main menu
when the simulation is idle.
This checkpoint changes the repository runtime to target a native Linux NVIDIA desktop. Native Linux validation is in progress.
The host and container GPU prerequisites now pass on the Linux desktop:
nvidia-modprobe was installed because the loaded kernel driver had not
created /dev/nvidia*; host nvidia-smi now succeeds.docker group and the Docker CLI context was
changed from desktop-linux to the native default engine. A new login may
be required before new shells inherit the group.nvidia/cuda:12.8.0-base-ubuntu24.04 sees the same GPU and driver through
--gpus all.http://localhost:8888.Native Linux runtime validation now passes for release v2.1.0:
Linux.zip was selected and staged under sim/release.v2.1.0; the GitHub token was used only by the
host-side downloader and is not part of the sim build context.vulkaninfo --summary identifies the physical RTX 3090 Ti and
NVIDIA driver 580.173.02.DefaultStreamer and a browser player.City park map changed the Unreal menu
highlight, confirming that the Pixel Streaming data channel carries input.The runtime image needed both the GLVND EGL loader (libegl1) and an NVIDIA EGL
vendor manifest. Without them, NVIDIA’s Vulkan ICD found
libGLX_nvidia.so.0 but returned ERROR_INCOMPATIBLE_DRIVER while repeatedly
failing to open libEGL.so.1.
AirSim RPC remains unverified at the idle main menu. Docker publishes host TCP
41451, but netstat inside the Unreal container shows no listener before a map
is loaded. Do not count the Docker proxy accepting a host TCP connection as an
RPC pass; validate an actual AirSim request after choosing a map.
Attempting that validation with Simple map exposed a packaged-release crash.
Immediately after the AirSim vehicle-choice dialog closed with the quadrotor
selection, Unreal logged r.CustomDepth = "3", caught signal 11, and exited
with code 139. The container was not OOM-killed. The shipping build emitted no
usable Unreal log or stack; its crash directory contained only
CrashReportClient.ini. Restarting the same container restored the healthy
main-menu streamer. Publish a new Linux package containing the prepared SM5
and no-hardware-ray-tracing settings, then repeat the map-load and AirSim RPC
validation before marking criterion 8 complete.
Repository-side compatibility changes are prepared but not yet included in a
published package: the sibling DRV-Unreal checkout explicitly targets Vulkan
SM5 on Linux and disables hardware ray tracing in Config/DefaultEngine.ini.
latest release endpoint.Linux.zip preferred when more
than one asset matches.sim/release.DRV.sh, Blocks.sh, or SADE_drone_rep.sh.ws://signalling:8888.AIRSIM_SETTINGS_DIR.DRONELUME_CONFIG_DIR, defaulting to
config/dronelume on the host. The launch script creates this directory and
the container entrypoint links its InitDSL.json into the active packaged
project’s Config directory before Unreal starts.Primary files:
download_sim_release.shdownload_sim_release.ps1sim/Dockerfilesim/docker-entrypoint.shdocker-compose.yamldev.shdev.ps1sim/README.mdThe image was built successfully on Docker Desktop with a local DRV 2.1.1
Linux package. The signalling player loaded at http://localhost:8888, but the
Unreal streamer exited with code 139 before connecting.
Docker Desktop exposed /dev/dxg, not native /dev/nvidia* graphics devices.
Mesa Dozen 26.1.7 could enumerate the RTX 4080 and reported approximately 15 GB
of device-local memory. Full vulkaninfo completed successfully.
An Unreal debugger trace found the actual failure during Vulkan RHI startup:
D3D12: Removing Device.
LowLevelFatalError [VulkanMemory.cpp:926]
Out of Local Memory, Requested1024.00KB MemTypeIndex=0
The stack reached FScreenRectangleVertexBuffer::InitRHI and failed on its
first 1 MB Vulkan allocation. The reported memory error was secondary to the
Direct3D 12 device removal.
These launch variations produced the same failure:
-FeatureLevelES31Mesa llvmpipe was also tested as a software Vulkan fallback. It enumerated as a conformant CPU Vulkan device, but the packaged application exited before initializing Unreal rendering.
Conclusion: packaging settings do not provide native Vulkan passthrough to a Linux container on Docker Desktop. Continue on native Linux.
The current Linux package selection is appropriate for the native Linux test:
The Unreal project configuration was found to enable hardware ray tracing while the Linux package targets SM5. Epic requires SM6 for Lumen hardware ray tracing. Before publishing the next Linux release, commit an explicit Linux RHI section and disable hardware ray tracing for the compatibility build:
[/Script/LinuxTargetPlatform.LinuxTargetSettings]
-TargetedRHIs=SF_VULKAN_SM5
+TargetedRHIs=SF_VULKAN_SM5
[/Script/Engine.RendererSettings]
r.RayTracing=False
r.Lumen.HardwareRayTracing=False
r.RayTracing.Shadows=False
r.RayTracing.Skylight=False
r.RayTracing.UseTextureLod=False
r.Vulkan.RayTracing=False
Do not enable SM6 for the first container validation. Do not use ES3.1 as the primary build. ES3.1 selects the mobile rendering path and would require a separate compatibility review for Cesium, AirSim camera materials, and the DRV menu.
Install the current NVIDIA Linux driver, Docker Engine, Docker Compose v2, and NVIDIA Container Toolkit. Configure Docker according to NVIDIA’s installation guide, then restart Docker.
nvidia-smi
docker run --rm --gpus all nvidia/cuda:12.8.0-base-ubuntu24.04 nvidia-smi
Both commands must identify the same physical NVIDIA GPU.
./dev.sh token
The token is stored in ignored .env. For the private repository, authorize
organization SSO and grant release read access.
./download_sim_release.sh latest
cat sim/release/.release-tag
cat sim/release/.release-asset
find sim/release -maxdepth 3 -type f \
\( -name DRV.sh -o -name Blocks.sh -o -name SADE_drone_rep.sh \)
export DRV_RELEASE_TAG="$(<sim/release/.release-tag)"
docker compose build drv-unreal
docker run --rm --gpus all \
--entrypoint vulkaninfo \
droneworld/drv-unreal:linux --summary
Required result:
./dev.sh simulator
In a second terminal:
docker compose ps
docker compose logs -f signalling drv-unreal
Open http://localhost:8888 on the Linux host.
The workflow is complete only when:
Capture these diagnostics before changing the image:
nvidia-smi
docker info
docker compose version
docker compose config
docker compose ps -a
docker compose logs --no-color signalling drv-unreal
docker run --rm --gpus all \
--entrypoint vulkaninfo \
droneworld/drv-unreal:linux --summary
Check the packaged Unreal log under its Saved/Logs directory. If the shipping
build does not emit a log, retain -StdOut -FullStdOutLogOutput and run the
binary under gdb with SYS_PTRACE and an unconfined seccomp profile.
Do not respond to Vulkan initialization errors by adding -nullrhi. That can
allow simulation logic to run without rendering, but it cannot satisfy Pixel
Streaming because there are no frames to encode.