entrypoint.sh 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #!/bin/bash -e
  2. trap "echo TRAPed signal" HUP INT QUIT KILL TERM
  3. sudo chown user:user /home/user
  4. echo "user:$PASSWD" | sudo chpasswd
  5. sudo rm -rf /tmp/.X*
  6. sudo ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" | sudo tee /etc/timezone > /dev/null
  7. export LD_LIBRARY_PATH="/usr/lib/libreoffice/program:${LD_LIBRARY_PATH}"
  8. sudo ln -snf /dev/ptmx /dev/tty7
  9. sudo /etc/init.d/dbus start
  10. source /opt/gstreamer/gst-env
  11. # Install NVIDIA drivers, including X graphic drivers by omitting --x-{prefix,module-path,library-path,sysconfig-path}
  12. if ! command -v nvidia-xconfig &> /dev/null; then
  13. export DRIVER_VERSION=$(head -n1 </proc/driver/nvidia/version | awk '{print $8}')
  14. cd /tmp
  15. if [ ! -f "/tmp/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run" ]; then
  16. curl -fsL -O "https://us.download.nvidia.com/XFree86/Linux-x86_64/$DRIVER_VERSION/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run" || curl -fsL -O "https://us.download.nvidia.com/tesla/$DRIVER_VERSION/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run" || { echo "Failed NVIDIA GPU driver download. Exiting."; exit 1; }
  17. fi
  18. sudo sh "NVIDIA-Linux-x86_64-$DRIVER_VERSION.run" -x
  19. cd "NVIDIA-Linux-x86_64-$DRIVER_VERSION"
  20. sudo ./nvidia-installer --silent \
  21. --no-kernel-module \
  22. --install-compat32-libs \
  23. --no-nouveau-check \
  24. --no-nvidia-modprobe \
  25. --no-rpms \
  26. --no-backup \
  27. --no-check-for-alternate-installs \
  28. --no-libglx-indirect \
  29. --no-install-libglvnd
  30. sudo rm -rf /tmp/NVIDIA* && cd ~
  31. fi
  32. if grep -Fxq "allowed_users=console" /etc/X11/Xwrapper.config; then
  33. sudo sed -i "s/allowed_users=console/allowed_users=anybody/;$ a needs_root_rights=yes" /etc/X11/Xwrapper.config
  34. fi
  35. if [ -f "/etc/X11/xorg.conf" ]; then
  36. sudo rm "/etc/X11/xorg.conf"
  37. fi
  38. if [ "$NVIDIA_VISIBLE_DEVICES" == "all" ]; then
  39. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  40. elif [ -z "$NVIDIA_VISIBLE_DEVICES" ]; then
  41. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  42. else
  43. export GPU_SELECT=$(sudo nvidia-smi --id=$(echo "$NVIDIA_VISIBLE_DEVICES" | cut -d ',' -f1) --query-gpu=uuid --format=csv | sed -n 2p)
  44. if [ -z "$GPU_SELECT" ]; then
  45. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  46. fi
  47. fi
  48. if [ -z "$GPU_SELECT" ]; then
  49. echo "No NVIDIA GPUs detected. Exiting."
  50. exit 1
  51. fi
  52. HEX_ID=$(sudo nvidia-smi --query-gpu=pci.bus_id --id="$GPU_SELECT" --format=csv | sed -n 2p)
  53. IFS=":." ARR_ID=($HEX_ID)
  54. unset IFS
  55. BUS_ID=PCI:$((16#${ARR_ID[1]})):$((16#${ARR_ID[2]})):$((16#${ARR_ID[3]}))
  56. export MODELINE=$(cvt -r "${SIZEW}" "${SIZEH}" "${REFRESH}" | sed -n 2p)
  57. sudo nvidia-xconfig --virtual="${SIZEW}x${SIZEH}" --depth="$CDEPTH" --mode=$(echo "$MODELINE" | awk '{print $2}' | tr -d '"') --allow-empty-initial-configuration --no-probe-all-gpus --busid="$BUS_ID" --only-one-x-screen --connected-monitor="$VIDEO_PORT"
  58. sudo sed -i '/Driver\s\+"nvidia"/a\ Option "ModeValidation" "NoMaxPClkCheck, NoEdidMaxPClkCheck, NoMaxSizeCheck, NoHorizSyncCheck, NoVertRefreshCheck, NoVirtualSizeCheck, NoExtendedGpuCapabilitiesCheck, NoTotalSizeCheck, NoDualLinkDVICheck, NoDisplayPortBandwidthCheck, AllowNon3DVisionModes, AllowNonHDMI3DModes, AllowNonEdidModes, NoEdidHDMI2Check, AllowDpInterlaced"' /etc/X11/xorg.conf
  59. sudo sed -i '/Section\s\+"Monitor"/a\ '"$MODELINE" /etc/X11/xorg.conf
  60. export DISPLAY=":0"
  61. export __GL_SYNC_TO_VBLANK="0"
  62. Xorg vt7 -novtswitch -sharevts -dpi "${DPI}" +extension "MIT-SHM" "${DISPLAY}" &
  63. # Wait for X11 to start
  64. echo "Waiting for X socket"
  65. until [ -S "/tmp/.X11-unix/X${DISPLAY/:/}" ]; do sleep 1; done
  66. echo "X socket is ready"
  67. if [ "$NOVNC_ENABLE" = "true" ]; then
  68. if [ -n "$NOVNC_VIEWPASS" ]; then export NOVNC_VIEWONLY="-viewpasswd ${NOVNC_VIEWPASS}"; else unset NOVNC_VIEWONLY; fi
  69. sudo x11vnc -display "${DISPLAY}" -passwd "${BASIC_AUTH_PASSWORD:-$PASSWD}" -shared -forever -repeat -xkb -xrandr "resize" -rfbport 5900 ${NOVNC_VIEWONLY} &
  70. /opt/noVNC/utils/novnc_proxy --vnc localhost:5900 --listen 8080 --heartbeat 10 &
  71. fi
  72. # Add custom processes below this section or within `supervisord.conf`
  73. mate-session &
  74. echo "Session Running. Press [Return] to exit."
  75. read