bootstrap.sh 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #!/bin/bash
  2. set -e
  3. trap "echo TRAPed signal" HUP INT QUIT KILL TERM
  4. echo "user:$VNCPASS" | sudo chpasswd
  5. sudo ln -snf "/usr/share/zoneinfo/$TZ" /etc/localtime && echo "$TZ" | sudo tee /etc/timezone > /dev/null
  6. sudo /etc/init.d/dbus start
  7. # Install NVIDIA drivers, including X graphic drivers by omitting --x-{prefix,module-path,library-path,sysconfig-path}
  8. if ! command -v nvidia-xconfig &> /dev/null; then
  9. export DRIVER_VERSION=$(head -n1 </proc/driver/nvidia/version | awk '{print $8}')
  10. BASE_URL=https://download.nvidia.com/XFree86/Linux-x86_64
  11. cd /tmp
  12. curl -fsSL -O $BASE_URL/$DRIVER_VERSION/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run
  13. sudo sh NVIDIA-Linux-x86_64-$DRIVER_VERSION.run -x
  14. cd NVIDIA-Linux-x86_64-$DRIVER_VERSION
  15. sudo ./nvidia-installer --silent \
  16. --no-kernel-module \
  17. --install-compat32-libs \
  18. --no-nouveau-check \
  19. --no-nvidia-modprobe \
  20. --no-rpms \
  21. --no-backup \
  22. --no-check-for-alternate-installs \
  23. --no-libglx-indirect \
  24. --no-install-libglvnd
  25. sudo rm -rf /tmp/NVIDIA*
  26. cd ~
  27. fi
  28. if grep -Fxq "allowed_users=console" /etc/X11/Xwrapper.config; then
  29. sudo sed -i "s/allowed_users=console/allowed_users=anybody/;$ a needs_root_rights=yes" /etc/X11/Xwrapper.config
  30. fi
  31. if [ -f "/etc/X11/xorg.conf" ]; then
  32. sudo rm /etc/X11/xorg.conf
  33. fi
  34. if [ "$NVIDIA_VISIBLE_DEVICES" == "all" ]; then
  35. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  36. elif [ -z "$NVIDIA_VISIBLE_DEVICES" ]; then
  37. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  38. else
  39. export GPU_SELECT=$(sudo nvidia-smi --id=$(echo "$NVIDIA_VISIBLE_DEVICES" | cut -d ',' -f1) --query-gpu=uuid --format=csv | sed -n 2p)
  40. if [ -z "$GPU_SELECT" ]; then
  41. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  42. fi
  43. fi
  44. if [ -z "$GPU_SELECT" ]; then
  45. echo "No NVIDIA GPUs detected. Exiting."
  46. exit 1
  47. fi
  48. HEX_ID=$(sudo nvidia-smi --query-gpu=pci.bus_id --id="$GPU_SELECT" --format=csv | sed -n 2p)
  49. IFS=":." ARR_ID=($HEX_ID)
  50. unset IFS
  51. BUS_ID=PCI:$((16#${ARR_ID[1]})):$((16#${ARR_ID[2]})):$((16#${ARR_ID[3]}))
  52. export MODELINE=$(cvt -r ${SIZEW} ${SIZEH} | sed -n 2p)
  53. 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"
  54. sudo sed -i '/Driver\s\+"nvidia"/a\ Option "ModeValidation" "NoMaxPClkCheck, NoEdidMaxPClkCheck, NoMaxSizeCheck, NoHorizSyncCheck, NoVertRefreshCheck, NoVirtualSizeCheck, NoExtendedGpuCapabilitiesCheck, NoTotalSizeCheck, NoDualLinkDVICheck, NoDisplayPortBandwidthCheck, AllowNon3DVisionModes, AllowNonHDMI3DModes, AllowNonEdidModes, NoEdidHDMI2Check, AllowDpInterlaced"\n Option "DPI" "96 x 96"' /etc/X11/xorg.conf
  55. sudo sed -i '/Section\s\+"Monitor"/a\ '"$MODELINE" /etc/X11/xorg.conf
  56. shopt -s extglob
  57. for TTY in $(ls -1 /dev/tty+([0-9]) | sort -rV); do
  58. if [ -w "$TTY" ]; then
  59. Xorg vt"$(echo "$TTY" | grep -Eo '[0-9]+$')" -sharevts :0 &
  60. break
  61. fi
  62. done
  63. sleep 1
  64. if [ "x$SHARED" == "xTRUE" ]; then
  65. export SHARESTRING="-shared"
  66. fi
  67. x11vnc -display ":0" -passwd "$VNCPASS" -forever -repeat -xkb -xrandr "resize" -rfbport 5900 "$SHARESTRING" &
  68. sleep 1
  69. /opt/noVNC/utils/launch.sh --vnc localhost:5900 --listen 5901 &
  70. sleep 1
  71. export DISPLAY=:0
  72. UUID_CUT=$(sudo nvidia-smi --query-gpu=uuid --id="$GPU_SELECT" --format=csv | sed -n 2p | cut -c 5-)
  73. if vulkaninfo | grep "$UUID_CUT" | grep -q ^; then
  74. VK=0
  75. while true; do
  76. if ENABLE_DEVICE_CHOOSER_LAYER=1 VULKAN_DEVICE_INDEX=$VK vulkaninfo | grep "$UUID_CUT" | grep -q ^; then
  77. export ENABLE_DEVICE_CHOOSER_LAYER=1
  78. export VULKAN_DEVICE_INDEX="$VK"
  79. break
  80. fi
  81. VK=$((VK + 1))
  82. done
  83. else
  84. echo "Vulkan is not available for the current GPU."
  85. fi
  86. mate-session &
  87. pulseaudio --start
  88. echo "Session Running. Press [Return] to exit."
  89. read