11#! /bin/bash
22# Generate environment variables for docker-compose (same settings as start-container.sh)
3- # Usage: source <(./compose-env.sh --gpu nvidia --all)
4- # ./compose-env.sh --env-file .env --gpu intel
3+ # Usage: source <(./compose-env.sh --encoder nvidia --gpu all)
4+ # ./compose-env.sh --env-file .env --encoder intel
55
66set -e
77
@@ -10,10 +10,11 @@ show_usage() {
1010Usage: compose-env.sh [options]
1111
1212Options (same as start-container.sh):
13- -g, --gpu <type> GPU vendor: none (default), nvidia, nvidia-wsl, intel, amd
14- Note: --gpu nvidia requires --all or --num
15- --all Use all GPUs (required for nvidia/nvidia-wsl, optional for intel/amd)
16- --num <list> Comma-separated NVIDIA GPU indices (only with --gpu nvidia)
13+ -e, --encoder <type> Encoder: software, nvidia, nvidia-wsl, intel, amd (required)
14+ -g, --gpu <value> Docker --gpus value (optional): all or device=0,1
15+ --all Shortcut for --gpu all
16+ --num <list> Shortcut for --gpu device=<list>
17+ --dri-node <path> DRI render node for VA-API (e.g. /dev/dri/renderD129)
1718 -u, --ubuntu <ver> Ubuntu version: 22.04 or 24.04 (default: 24.04)
1819 -r, --resolution <res> Resolution in WIDTHxHEIGHT format (default: 1920x1080)
1920 -d, --dpi <dpi> DPI setting (default: 96)
3738PROJECT_ROOT=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
3839
3940# Defaults (matching start-container.sh)
40- GPU_VENDOR=" ${GPU_VENDOR:- none} "
41+ ENCODER=" ${ENCODER:- } "
42+ GPU_VENDOR=" ${GPU_VENDOR:- } "
4143GPU_ALL=" ${GPU_ALL:- false} "
4244GPU_NUMS=" ${GPU_NUMS:- } "
45+ DOCKER_GPUS=" ${DOCKER_GPUS:- } "
46+ DRI_NODE=" ${DRI_NODE:- } "
4347UBUNTU_VERSION=" ${UBUNTU_VERSION:- 24.04} "
4448RESOLUTION=" ${RESOLUTION:- 1920x1080} "
4549DPI=" ${DPI:- 96} "
@@ -52,20 +56,20 @@ ARCH_OVERRIDE=""
5256# Option parsing
5357while [[ $# -gt 0 ]]; do
5458 case $1 in
59+ -e|--encoder)
60+ if [ -z " ${2:- } " ]; then
61+ echo " Error: --encoder requires an argument" >&2
62+ exit 1
63+ fi
64+ ENCODER=" ${2} "
65+ shift 2
66+ ;;
5567 -g|--gpu)
5668 if [ -z " ${2:- } " ]; then
5769 echo " Error: --gpu requires an argument" >&2
5870 exit 1
5971 fi
60- case " ${2} " in
61- nvidia|nvidia-wsl|intel|amd|none)
62- GPU_VENDOR=" ${2} "
63- ;;
64- * )
65- echo " Error: Unknown GPU vendor: ${2} " >&2
66- exit 1
67- ;;
68- esac
72+ DOCKER_GPUS=" ${2} "
6973 shift 2
7074 ;;
7175 --all)
@@ -80,6 +84,14 @@ while [[ $# -gt 0 ]]; do
8084 GPU_NUMS=" ${2} "
8185 shift 2
8286 ;;
87+ --dri-node)
88+ if [ -z " ${2:- } " ]; then
89+ echo " Error: --dri-node requires a path (e.g. /dev/dri/renderD129)" >&2
90+ exit 1
91+ fi
92+ DRI_NODE=" ${2} "
93+ shift 2
94+ ;;
8395 -u|--ubuntu)
8496 if [ -z " ${2:- } " ]; then
8597 echo " Error: --ubuntu requires a version (22.04 or 24.04)" >&2
@@ -155,9 +167,37 @@ if [[ ! $RESOLUTION =~ ^[0-9]+x[0-9]+$ ]]; then
155167 exit 1
156168fi
157169
158- if [[ " ${GPU_VENDOR} " == " nvidia" ]]; then
159- if [[ " ${GPU_ALL} " != " true" ]] && [[ -z " ${GPU_NUMS} " ]]; then
160- echo " Error: --gpu nvidia requires --all or --num" >&2
170+ if [ -z " ${ENCODER} " ]; then
171+ echo " Error: --encoder is required" >&2
172+ exit 1
173+ fi
174+
175+ ENCODER=$( echo " ${ENCODER} " | tr ' [:upper:]' ' [:lower:]' )
176+ case " ${ENCODER} " in
177+ software|none|cpu)
178+ ENCODER=" software"
179+ ;;
180+ nvidia|nvidia-wsl|intel|amd)
181+ ;;
182+ * )
183+ echo " Error: Unknown encoder: ${ENCODER} " >&2
184+ exit 1
185+ ;;
186+ esac
187+
188+ GPU_VENDOR=" ${ENCODER} "
189+
190+ if [ -z " ${DOCKER_GPUS} " ]; then
191+ if [ " ${GPU_ALL} " = " true" ]; then
192+ DOCKER_GPUS=" all"
193+ elif [ -n " ${GPU_NUMS} " ]; then
194+ DOCKER_GPUS=" device=${GPU_NUMS} "
195+ fi
196+ fi
197+
198+ if [ -n " ${DOCKER_GPUS} " ]; then
199+ if [[ " ${DOCKER_GPUS} " != " all" && ! " ${DOCKER_GPUS} " =~ ^device= [0-9,]+$ ]]; then
200+ echo " Error: --gpu value must be 'all' or 'device=0,1'." >&2
161201 exit 1
162202 fi
163203fi
@@ -254,10 +294,10 @@ case "${GPU_VENDOR}" in
254294 nvidia)
255295 ENABLE_NVIDIA=" true"
256296 DISABLE_ZINK=" true"
257- if [ " ${GPU_ALL } " = " true " ]; then
297+ if [ " ${DOCKER_GPUS } " = " all " ]; then
258298 NVIDIA_VISIBLE_DEVICES=" all"
259- else
260- NVIDIA_VISIBLE_DEVICES=" ${GPU_NUMS } "
299+ elif [[ " ${DOCKER_GPUS} " =~ ^device = ]] ; then
300+ NVIDIA_VISIBLE_DEVICES=" ${DOCKER_GPUS # device= } "
261301 fi
262302 if [ -d " /dev/dri" ]; then
263303 GPU_DEVICES=" /dev/dri:/dev/dri:rwm"
@@ -269,10 +309,10 @@ case "${GPU_VENDOR}" in
269309 DISABLE_ZINK=" true"
270310 XDG_RUNTIME_DIR=" /mnt/wslg/runtime-dir"
271311 LD_LIBRARY_PATH=" /usr/lib/wsl/lib"
272- if [ " ${GPU_ALL } " = " true " ]; then
312+ if [ " ${DOCKER_GPUS } " = " all " ]; then
273313 NVIDIA_VISIBLE_DEVICES=" all"
274- else
275- NVIDIA_VISIBLE_DEVICES=" ${GPU_NUMS } "
314+ elif [[ " ${DOCKER_GPUS} " =~ ^device = ]] ; then
315+ NVIDIA_VISIBLE_DEVICES=" ${DOCKER_GPUS # device= } "
276316 fi
277317 ;;
278318 intel)
@@ -282,6 +322,10 @@ case "${GPU_VENDOR}" in
282322 else
283323 echo " Warning: /dev/dri not found, Intel VA-API not available." >&2
284324 fi
325+ # Pass DRI_NODE if specified
326+ if [ -n " ${DRI_NODE} " ]; then
327+ echo " Using specified DRI node: ${DRI_NODE} " >&2
328+ fi
285329 ;;
286330 amd)
287331 LIBVA_DRIVER_NAME=" ${LIBVA_DRIVER_NAME:- radeonsi} "
@@ -293,8 +337,12 @@ case "${GPU_VENDOR}" in
293337 if [ -e " /dev/kfd" ]; then
294338 GPU_DEVICES=" ${GPU_DEVICES: +${GPU_DEVICES} ,} /dev/kfd:/dev/kfd:rwm"
295339 fi
340+ # Pass DRI_NODE if specified
341+ if [ -n " ${DRI_NODE} " ]; then
342+ echo " Using specified DRI node: ${DRI_NODE} " >&2
343+ fi
296344 ;;
297- none |" " )
345+ software |" " )
298346 ENABLE_NVIDIA=" false"
299347 ;;
300348esac
@@ -320,7 +368,7 @@ ENV_VARS=(
320368 IMAGE_BASE IMAGE_TAG IMAGE_VERSION IMAGE_ARCH UBUNTU_VERSION
321369 HOST_PORT_SSL HOST_PORT_HTTP HOST_IP
322370 WIDTH HEIGHT DPI SCALE_FACTOR FORCE_DEVICE_SCALE_FACTOR CHROMIUM_FLAGS SHM_SIZE RESOLUTION TIMEZONE
323- GPU_VENDOR GPU_ALL GPU_NUMS
371+ ENCODER GPU_VENDOR GPU_ALL GPU_NUMS DOCKER_GPUS DRI_NODE
324372 ENABLE_NVIDIA LIBVA_DRIVER_NAME NVIDIA_VISIBLE_DEVICES GPU_DEVICES
325373 WSL_ENVIRONMENT DISABLE_ZINK XDG_RUNTIME_DIR LD_LIBRARY_PATH
326374 SSL_DIR SSL_CERT_PATH SSL_KEY_PATH
0 commit comments