diff --git a/docker/Makefile b/docker/Makefile index 271ac50ab1..dc7b7f8db8 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -8,6 +8,7 @@ help: @echo " 1. make pull - pull all pprz images" @echo " 1. make clean - remove all pprz images" @echo " 2. make bash - run bash on pprz-dev" + @echo " 2. make bash_usb - run bash and enable USB" @echo " 2. make paparazzi - run paparazzi center on pprz-dev" @echo "" @@ -26,5 +27,9 @@ clean: bash: @bash run.sh -i -t flixr/pprz-dev bash +bash_usb: + @ENABLE_USB=1 bash ./run.sh -i -t flixr/pprz-dev bash + + paparazzi: @bash run.sh -i -t flixr/pprz-dev ./paparazzi diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index da9f03b7af..754989b83d 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -11,10 +11,11 @@ ENV PULSE_SERVER /run/pulse/native # add basic user ENV USERNAME pprz +ENV USERGROUPS sudo,dialout RUN useradd -m $USERNAME && \ echo "$USERNAME:$USERNAME" | chpasswd && \ usermod --shell /bin/bash $USERNAME && \ - usermod -aG sudo $USERNAME && \ + usermod -aG $USERGROUPS $USERNAME && \ echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers.d/$USERNAME && \ chmod 0440 /etc/sudoers.d/$USERNAME && \ usermod --uid 1000 $USERNAME && \ diff --git a/docker/run.sh b/docker/run.sh index a44418c1d1..92c2f8d02a 100755 --- a/docker/run.sh +++ b/docker/run.sh @@ -4,10 +4,10 @@ # if no arguments given, start with interactive terminal if test $# -lt 1; then - args="-t -i flixr/pprz-dev /sbin/my_init -- bash" + args="-t -i flixr/pprz-dev /sbin/my_init -- bash" else - # Use this script with derived images, and pass your 'docker run' args - args="$@" + # Use this script with derived images, and pass your 'docker run' args + args="$@" fi if [ -z "$PAPARAZZI_HOME" ]; then @@ -26,19 +26,31 @@ XAUTH=/tmp/.docker.xauth touch $XAUTH xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge - +# options to grant access to the Xserver +X_WINDOW_OPTS="--volume=$XSOCK:$XSOCK --volume=$XAUTH:$XAUTH --env=XAUTHORITY=${XAUTH} --env=DISPLAY=${DISPLAY}" + +# pass audio to pulseaudio server on host +PULSE_AUDIO_OPTS="--volume=/run/user/${USER_UID}/pulse:/run/pulse" + +# give the container access to USB, WARNING runs it as priviliged container! +# use it if ENABLE_USB variable is non-empty/zero +if [ -n "$ENABLE_USB" ]; then + echo "INFO: running as priviliged container to enable USB access!" + USB_OPTS="--privileged --volume=/dev/bus/usb:/dev/bus/usb" +fi + +# share the paparazzi directory and set it as working directory +SHARE_PAPARAZZI_HOME_OPTS="--volume=$PAPARAZZI_HOME:$PPRZ_HOME_CONTAINER \ + --env=PAPARAZZI_HOME=$PPRZ_HOME_CONTAINER \ + --env=PAPARAZZI_SRC=$PPRZ_HOME_CONTAINER \ + -w $PPRZ_HOME_CONTAINER" + docker run \ - --rm \ - --volume=/run/user/${USER_UID}/pulse:/run/pulse \ - --volume=$XSOCK:$XSOCK \ - --volume=$XAUTH:$XAUTH \ - --env="XAUTHORITY=${XAUTH}" \ - --env="DISPLAY=${DISPLAY}" \ - --volume=$PAPARAZZI_HOME:$PPRZ_HOME_CONTAINER \ - --env="PAPARAZZI_HOME=$PPRZ_HOME_CONTAINER" \ - --env="PAPARAZZI_SRC=$PPRZ_HOME_CONTAINER" \ - -u pprz \ - -w $PPRZ_HOME_CONTAINER \ - $args + ${X_WINDOW_OPTS} \ + ${PULSE_AUDIO_OPTS} \ + ${USB_OPTS} \ + ${SHARE_PAPARAZZI_HOME_OPTS} \ + --rm $args # cleanup XAUTHORITY file again rm -f $XAUTH