diff --git a/build/linux/Dockerfile b/build/linux/Dockerfile
index feccd14..4b3c99d 100644
--- a/build/linux/Dockerfile
+++ b/build/linux/Dockerfile
@@ -1,19 +1,113 @@
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu20.04
-WORKDIR /app
-ARG DEBIAN_FRONTEND=noninteractive
+
ARG NV_VER
-RUN apt update
-RUN apt -y install libgl1-mesa-glx libegl1-mesa libxrandr2 libxrandr2 libxss1 libxcursor1 libxcomposite1 libasound2 libxi6 libxtst6 curl ffmpeg git nano gnupg2 libsm6 wget unzip libxcb-icccm4 libxkbcommon-x11-0 libxcb-keysyms1 libxcb-icccm4 libxcb-render0 libxcb-render-util0 libxcb-image0
-RUN apt install -y python3 python3-pip
+ARG LIVE_GID="100"
+ARG LIVE_UID="1000"
+ARG LIVE_USER="live"
+
+USER root
+
+ENV DEBIAN_FRONTEND=noninteractive
+ENV NVIDIA_VISIBLE_DEVICES=all
+ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility
+ENV DEEPFACELIVE_PATH=/usr/local/deepfacelive
+ENV DEEPFACELIVE_DATA=/usr/local/deepfacelive_data
+
+
+RUN apt-get update --fix-missing
+RUN apt-get -y install --no-install-recommends \
+ libgl1-mesa-glx \
+ libegl1-mesa \
+ libxrandr2 \
+ libxrandr2 \
+ libxss1 \
+ libxcursor1 \
+ libxcomposite1 \
+ libasound2 \
+ libxi6 \
+ libxtst6 \
+ locales \
+ sudo \
+ curl \
+ ffmpeg \
+ git \
+# nano \
+ gnupg2 \
+ libsm6 \
+ wget \
+ unzip \
+ libxcb-icccm4 \
+ libxkbcommon-x11-0 \
+ libxcb-keysyms1 \
+ libxcb-icccm4 \
+ libxcb-render0 \
+ libxcb-render-util0 \
+ libxcb-image0 \
+ libnvidia-compute-${NV_VER}
+
+RUN apt-get install -y --no-install-recommends \
+ python3 \
+ python3-distutils \
+ python3-pyqt5
+
RUN ln -s /usr/bin/python3 /usr/bin/python
-RUN git clone https://github.com/iperov/DeepFaceLive.git
+RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
+ && locale-gen
-RUN python -m pip install --upgrade pip
-RUN python -m pip install onnxruntime-gpu==1.12.1 numpy==1.21.6 h5py numexpr protobuf==3.20.1 opencv-python==4.7.0.68 opencv-contrib-python==4.7.0.68 pyqt6==6.4.0 onnx==1.13.0 torch==1.10.0 torchvision==0.11.1
+ENV LIVE_GID=${LIVE_GID} \
+ LIVE_UID=${LIVE_UID} \
+ LIVE_USER=${LIVE_USER} \
+ HOME=/home/${LIVE_USER} \
+ LANG=en_US.UTF-8 \
+ LANGUAGE=en_US.UTF-8 \
+ LC_ALL=en_US.UTF-8 \
+ SHELL=/bin/bash
-RUN apt install -y libnvidia-compute-$NV_VER
+RUN echo "auth requisite pam_deny.so" >> /etc/pam.d/su \
+ && sed -i.bak -e 's/^%admin/#%admin/' /etc/sudoers \
+ && sed -i.bak -e 's/^%sudo/#%sudo/' /etc/sudoers \
+ && useradd -m -s /bin/bash -N -u ${LIVE_UID} ${LIVE_USER} \
+ && chmod g+w /etc/passwd
-WORKDIR /app/DeepFaceLive
-COPY example.sh example.sh
-CMD ./example.sh
+RUN mkdir -p ${DEEPFACELIVE_PATH} \
+ && chown ${LIVE_UID}:${LIVE_GID} ${DEEPFACELIVE_PATH} \
+ && mkdir -p ${DEEPFACELIVE_DATA} \
+ && chown ${LIVE_UID}:${LIVE_GID} ${DEEPFACELIVE_DATA}
+
+# Switch to user "live"
+USER ${LIVE_UID}
+WORKDIR ${HOME}
+
+ENV PATH=${HOME}/.local/bin:$PATH
+
+RUN python -c "from urllib.request import urlopen; \
+ exec(urlopen('https://bootstrap.pypa.io/get-pip.py').read())"
+
+RUN python -m pip install \
+ onnxruntime-gpu==1.10 \
+ numpy==1.20 \
+ h5py \
+ numexpr \
+ protobuf==3.20.2 \
+ opencv-python==4.7.0.68 \
+ opencv-contrib-python==4.7.0.68 \
+ pyqt6==6.4.0 \
+ onnx==1.13.0 \
+ torch==1.10.0 \
+ torchvision==0.11.1
+
+RUN git clone https://github.com/iperov/DeepFaceLive.git ${DEEPFACELIVE_PATH}
+
+RUN ln -s ${DEEPFACELIVE_PATH} ${HOME}/deepfacelive \
+ && ln -s ${DEEPFACELIVE_DATA} ${HOME}/deepfacelive_data
+
+USER root
+
+RUN apt-get --purge -y remove wget curl git \
+ && apt-get --purge -y autoremove \
+ && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
+
+USER $LIVE_UID
+WORKDIR ${HOME}
+CMD [ "python", "/usr/local/deepfacelive/main.py", "run", "DeepFaceLive", "--userdata-dir", "/usr/local/deepfacelive_data" ]
diff --git a/build/linux/README.md b/build/linux/README.md
index ff368cb..a2c9c17 100644
--- a/build/linux/README.md
+++ b/build/linux/README.md
@@ -2,19 +2,31 @@
### Requirements
-* nvidia-driver-470 (current)
-* cuda 11.4 (current)
+* nvidia-driver>=470
+* cuda>=11.4
### Setup
-
+1. Open console and clone git repo
```
-git clone DeepFaceLive
+git clone https://github.com/iperov/DeepFaceLive.git
cd DeepFaceLive/build/linux/
-# start.sh builds and runs container with proper options, then example.sh will start DeepFaceLive with example options
-./start.sh
-
-Usage of ./start.sh
-# -d specify a folder for DeepFaceLive data (videos, models, etc)
--d /home/user/DeepFaceLive_data
-# -c will pass through existing video devices such as /dev/video0 and /dev/video1, etc
```
+1. `start.sh` builds and run container with proper options
+2. Usage of `./start.sh`
+-d specify a folder for DeepFaceLive data (videos, models, etc)
+`-d /home/userJohn/DeepFaceLive_data`
+**if data folder not specified - used data in build/linux/data
+***create data folder in build/linux if launch first time and no matter where to place
+-c will pass through existing video devices(webcam, fake webcam and other) such as /dev/video0 and /dev/video1, etc
+`-c /dev/video0`
+If no autodetect you video driver run in host(not have locate, modinfo)
+`nvidia-smi | grep Driver`
+and see output:
+
+```
+NVIDIA-SMI 525.89.02 Driver Version: 525.89.02 CUDA Version: 12.0
+```
+
+ -r bruild and run with you driver version from nvidia-smi like this
+ `./start.sh -r 525 -d /home/userJohn/DeepFaceLive_data -c /dev/video0`
+## ***DO NOT RUN `./start.sh ` from root(sudo)!
diff --git a/build/linux/start.sh b/build/linux/start.sh
index 5eaf218..379ef84 100755
--- a/build/linux/start.sh
+++ b/build/linux/start.sh
@@ -6,7 +6,7 @@ NV_VER=$(modinfo $NV_LIB | grep ^version |awk '{print $2}'|awk -F '.' '{print $1
DATA_FOLDER=$(pwd)/data/
declare CAM0 CAM1 CAM2 CAM3
printf "\n"
-while getopts 'cd:h' opt; do
+while getopts 'cdr:h' opt; do
case "$opt" in
c)
printf "Starting with camera devices\n"
@@ -20,9 +20,14 @@ while getopts 'cd:h' opt; do
DATA_FOLDER="$OPTARG"
printf "Starting with data folder: %s\n" "$DATA_FOLDER"
;;
+ r)
+ NV_VER="$OPTARG"
+ printf "Build with Nvidia Driver version: %s\n" "$NV_VER"
+ ;;
?|h)
printf "Usage:\n$(basename $0) [-d] /path/to/your/data/folder\n"
+ printf "$(basename $0) [-r] Build with you driver version from nvidia-smi\n"
exit 1
;;
esac
@@ -33,4 +38,4 @@ printf "\n"
# Warning xhost + is overly permissive and will reduce system security. Edit as desired
docker build . -t deepfacelive --build-arg NV_VER=$NV_VER
xhost +
-docker run --ipc host --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $DATA_FOLDER:/data/ $CAM0 $CAM1 $CAM2 $CAM3 --rm -it deepfacelive
+docker run --ipc host --gpus all -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix -v $DATA_FOLDER:/usr/local/deepfacelive_data/ $CAM0 $CAM1 $CAM2 $CAM3 --rm -it deepfacelive