Refactor Dockerfile and run script for improved GPU handling and environment variable management
This commit is contained in:
@@ -5,8 +5,6 @@ ARG BUILD_TYPE=release
|
|||||||
|
|
||||||
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||||
ENV WEBOTS_HOME=/usr/local/webots
|
ENV WEBOTS_HOME=/usr/local/webots
|
||||||
ENV LIBGL_ALWAYS_SOFTWARE=1
|
|
||||||
ENV GALLIUM_DRIVER=llvmpipe
|
|
||||||
|
|
||||||
# X11 utilities and Mesa software renderer
|
# X11 utilities and Mesa software renderer
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||||
|
|||||||
@@ -1,22 +1,62 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# Run the Webots container with X11 forwarding.
|
# Run the Webots container with X11 forwarding.
|
||||||
|
#
|
||||||
# Usage:
|
# Usage:
|
||||||
# ./run.sh — interactive shell
|
# ./run.sh [--gpu nvidia|mesa|software] [CMD...]
|
||||||
# ./run.sh ros2 launch iiwa_bringup webots_spawn.launch.py ...
|
#
|
||||||
|
# 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}"
|
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
|
# Allow local Docker processes to connect to the X server
|
||||||
xhost +local:docker > /dev/null
|
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 \
|
docker run -it --rm \
|
||||||
--name ros-webots \
|
--name ros-webots \
|
||||||
--network host \
|
--network host \
|
||||||
-e USER=root \
|
-e USER=root \
|
||||||
-e DISPLAY="${DISPLAY}" \
|
-e DISPLAY="${DISPLAY}" \
|
||||||
-e QT_X11_NO_MITSHM=1 \
|
-e QT_X11_NO_MITSHM=1 \
|
||||||
-e LIBGL_ALWAYS_SOFTWARE=1 \
|
"${RENDER_FLAGS[@]}" \
|
||||||
-e GALLIUM_DRIVER=llvmpipe \
|
|
||||||
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
|
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
|
||||||
"${IMAGE}" \
|
"${IMAGE}" \
|
||||||
"$@"
|
"$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user