63 lines
1.7 KiB
Bash
Executable File
63 lines
1.7 KiB
Bash
Executable File
#!/bin/bash
|
|
# Run the Webots container with X11 forwarding.
|
|
#
|
|
# Usage:
|
|
# ./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 \
|
|
"${RENDER_FLAGS[@]}" \
|
|
-v /tmp/.X11-unix:/tmp/.X11-unix:rw \
|
|
"${IMAGE}" \
|
|
"$@"
|