#!/bin/bash ### Application Configuration SCRIPT_NAME="teams-wrapper-two" LOCAL_COMPUTER_USERNAME=$(whoami) # config IMAGE_NAME="docker.io/stifstof/teams-desktop:latest" CONTAINER_NAME="teams-two" CONFIG_PATH="${HOME}/.config/MicrosoftTwo" ########## Script # Container runtime (docker or podman) CONTAINER_ENGINE="${CONTAINER_ENGINE}" # Local .env if [ -f "/home/$LOCAL_COMPUTER_USERNAME/Documents/git/TeamsInDocker/.env" ]; then # Load Environment Variables export $(cat /home/$LOCAL_COMPUTER_USERNAME/Documents/git/TeamsInDocker/.env | grep -v '#' | awk '/=/ {print $1}') # For instance, will be example_kaggle_key echo $CONTAINER_ENGINE fi if [ -z "$CONTAINER_ENGINE" ] then echo "\$CONTAINER_ENGINE is empty. Defaulting to docker" CONTAINER_ENGINE="docker" fi PATH=/home/cn/Documents/git/TeamsInDocker/bin:/usr/sbin:/usr/bin:/sbin:/bin TEAMS_DESKTOP_USER=${LOCAL_COMPUTER_USERNAME} XSOCK=/home/$TEAMS_DESKTOP_USER/X/teamsTwo/.X11-unix XAUTH=/home/$TEAMS_DESKTOP_USER/X/teamsTwo/."${CONTAINER_ENGINE}".xauth # do we need to use sudo to start docker containers? if [ "$CONTAINER_ENGINE" == "docker" ]; then (id -Gn | grep -q $CONTAINER_ENGINE) || SUDO=sudo fi USER_UID=$(id -u) USER_GID=$(id -g) DOWNLOAD_DIR=$(xdg-user-dir DOWNLOAD) if [ -z "${DOWNLOAD_DIR}" ]; then DOWNLOAD_DIR="${HOME}/Downloads" fi list_commands() { echo "" echo "Launch teams using:" echo " teams-wrapper teams" echo "" exit 1 } cleanup_stopped_teams_desktop_instances() { echo "Cleaning up stopped teams instances..." for c in $(${SUDO} ${CONTAINER_ENGINE} ps -a -q); do image="$(${SUDO} ${CONTAINER_ENGINE} inspect -f {{.Name}} ${c})" if [ "${image}" == "${CONTAINER_NAME}" ]; then running=$(${SUDO} ${CONTAINER_ENGINE} inspect -f {{.State.Running}} ${c}) if [ "${running}" != "true" ]; then ${SUDO} ${CONTAINER_ENGINE} rm "${c}" >/dev/null fi if [ "${running}" == "true" ]; then ${SUDO} ${CONTAINER_ENGINE} kill "${c}" >/dev/null ${SUDO} ${CONTAINER_ENGINE} rm "${c}" >/dev/null fi fi done } prepare_extra_arguments() { if [ "$CONTAINER_ENGINE" == "docker" ]; then TEAMS_EXTRA_CONTAINER_ARGUMENTS+="--privileged" fi } prepare_container_env_parameters() { ENV_VARS+=" --env=USER_UID=${USER_UID}" ENV_VARS+=" --env=USER_GID=${USER_GID}" ENV_VARS+=" --env=DISPLAY=unix$DISPLAY" ENV_VARS+=" --env=XAUTHORITY=${XAUTH}" ENV_VARS+=" --env=TZ=$(date +%Z)" ENV_VARS+=" --env=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/dbus/system_bus_socket" } create_x_folder() { mkdir "/home/$TEAMS_DESKTOP_USER/X/teamsTwo/" touch ${XAUTH} touch ${XSOCK} } prepare_container_volume_parameters() { if [ -d "/home/$TEAMS_DESKTOP_USER/X/teamsTwo/" ]; then rm -rf "/home/$TEAMS_DESKTOP_USER/X/teamsTwo/" fi create_x_folder xauth nlist :0 | sed -e 's/^..../ffff/' | xauth -f ${XAUTH} nmerge - VOLUMES+=" --volume=${CONFIG_PATH}:/home/${TEAMS_DESKTOP_USER}/.config/Microsoft/" VOLUMES+=" --volume=${XSOCK}:${XSOCK}" VOLUMES+=" --volume=${XAUTH}:${XAUTH}" VOLUMES+=" --volume=/run/user/${USER_UID}/pulse:/run/pulse" VOLUMES+=" --volume=/run/user/${USER_UID}/bus:/run/dbus/system_bus_socket" if [ -d "${HOME}/tmp" ]; then VOLUMES+=" --volume=${HOME}/tmp:/home/${TEAMS_DESKTOP_USER}/tmp" fi } prepare_container_device_parameters() { # enumerate video devices for webcam support VIDEO_DEVICES= for device in /dev/video*; do if [ -c $device ]; then VIDEO_DEVICES="${VIDEO_DEVICES} --device $device:$device" fi done } prog=$(basename $0) exec=$(which $prog) if [[ ${prog} == ${SCRIPT_NAME} ]]; then case ${1} in teams) prog=${1} shift ;; * | help) list_commands exit 1 ;; esac elif [[ -n ${exec} ]]; then # launch host binary if it exists exec ${exec} $@ fi cleanup_stopped_teams_desktop_instances prepare_container_env_parameters prepare_container_volume_parameters prepare_container_device_parameters prepare_extra_arguments echo "Starting ${prog}..." set -o xtrace ${SUDO} ${CONTAINER_ENGINE} run -d \ --name ${CONTAINER_NAME} \ --network host \ --memory=4g \ --shm-size=4g \ --device /dev/dri \ --device /dev/snd \ ${TEAMS_EXTRA_CONTAINER_ARGUMENTS} \ ${ENV_VARS} \ ${VIDEO_DEVICES} \ ${VOLUMES} \ ${IMAGE_NAME} ${prog} $@ >/dev/null