Refactor Dockerfile and run script for improved GPU handling and environment variable management
This commit is contained in:
@@ -1,22 +1,62 @@
|
||||
#!/bin/bash
|
||||
# Run the Webots container with X11 forwarding.
|
||||
#
|
||||
# Usage:
|
||||
# ./run.sh — interactive shell
|
||||
# ./run.sh ros2 launch iiwa_bringup webots_spawn.launch.py ...
|
||||
# ./run.sh [--gpu nvidia|mesa|software] [CMD...]
|
||||
#
|
||||
# Examples:
|
||||
# ./run.sh — software rendering (llvmpipe), по умолчанию
|
||||
# ./run.sh --gpu mesa — Intel/AMD GPU через DRI (ноутбук без NVIDIA)
|
||||
# ./run.sh --gpu nvidia — NVIDIA GPU rendering
|
||||
# ./run.sh --gpu nvidia ros2 launch ... — NVIDIA GPU rendering + команда
|
||||
|
||||
set -e
|
||||
|
||||
IMAGE="${WEBOTS_IMAGE:-evilfisru/lwc:webots-jazzy}"
|
||||
GPU_MODE="software"
|
||||
|
||||
# Parse --gpu flag
|
||||
if [[ "${1}" == "--gpu" ]]; then
|
||||
GPU_MODE="${2:?--gpu requires an argument: nvidia|mesa|software}"
|
||||
shift 2
|
||||
fi
|
||||
|
||||
# Allow local Docker processes to connect to the X server
|
||||
xhost +local:docker > /dev/null
|
||||
|
||||
case "${GPU_MODE}" in
|
||||
nvidia)
|
||||
RENDER_FLAGS=(
|
||||
--gpus all
|
||||
-e NVIDIA_VISIBLE_DEVICES=all
|
||||
-e NVIDIA_DRIVER_CAPABILITIES=graphics,utility,compute
|
||||
)
|
||||
;;
|
||||
mesa)
|
||||
# Intel/AMD integrated/discrete — Mesa через DRI, без NVIDIA toolkit
|
||||
RENDER_FLAGS=(
|
||||
--device /dev/dri
|
||||
)
|
||||
;;
|
||||
software)
|
||||
RENDER_FLAGS=(
|
||||
-e LIBGL_ALWAYS_SOFTWARE=1
|
||||
-e GALLIUM_DRIVER=llvmpipe
|
||||
)
|
||||
;;
|
||||
*)
|
||||
echo "Unknown --gpu value: '${GPU_MODE}'. Use 'nvidia', 'mesa' or 'software'." >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
docker run -it --rm \
|
||||
--name ros-webots \
|
||||
--network host \
|
||||
-e USER=root \
|
||||
-e DISPLAY="${DISPLAY}" \
|
||||
-e QT_X11_NO_MITSHM=1 \
|
||||
-e LIBGL_ALWAYS_SOFTWARE=1 \
|
||||
-e GALLIUM_DRIVER=llvmpipe \
|
||||
"${RENDER_FLAGS[@]}" \
|
||||
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
|
||||
"${IMAGE}" \
|
||||
"$@"
|
||||
|
||||
Reference in New Issue
Block a user