bootstrap.sh 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #!/bin/bash
  2. # Install NVIDIA drivers, including X graphic drivers by omitting --x-{prefix,module-path,library-path,sysconfig-path}
  3. export DRIVER_VERSION=$(head -n1 </proc/driver/nvidia/version | awk '{ print $8 }')
  4. BASE_URL=https://us.download.nvidia.com/XFree86/Linux-x86_64
  5. cd /tmp
  6. curl -fSsl -O $BASE_URL/$DRIVER_VERSION/NVIDIA-Linux-x86_64-$DRIVER_VERSION.run
  7. sudo sh NVIDIA-Linux-x86_64-$DRIVER_VERSION.run -x
  8. cd NVIDIA-Linux-x86_64-$DRIVER_VERSION
  9. sudo ./nvidia-installer --silent \
  10. --no-kernel-module \
  11. --install-compat32-libs \
  12. --no-nouveau-check \
  13. --no-nvidia-modprobe \
  14. --no-rpms \
  15. --no-backup \
  16. --no-check-for-alternate-installs \
  17. --no-libglx-indirect \
  18. --no-install-libglvnd
  19. sudo rm -rf /tmp/NVIDIA*
  20. cd ~
  21. set -e
  22. trap "echo TRAPed signal" HUP INT QUIT KILL TERM
  23. echo "user:$VNCPASS" | sudo chpasswd
  24. sudo sed -i "s/allowed_users=console/allowed_users=anybody/;$ a needs_root_rights=yes" /etc/X11/Xwrapper.config
  25. # If NVIDIA_VISIBLE_DEVICES is empty or all set GPU_SELECT to first GPU visible
  26. if [ "$NVIDIA_VISIBLE_DEVICES" == "all" ]; then
  27. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  28. elif [ -z "$NVIDIA_VISIBLE_DEVICES" ]; then
  29. export GPU_SELECT=$(sudo nvidia-smi --query-gpu=uuid --format=csv | sed -n 2p)
  30. # Else set GPU_SELECT to first GPU in NVIDIA_VISIBLE_DEVICES
  31. else
  32. export GPU_SELECT=$(sudo nvidia-smi --id=$(echo "$NVIDIA_VISIBLE_DEVICES" | cut -d ',' -f1) --query-gpu=uuid --format=csv | sed -n 2p)
  33. fi
  34. if ! sudo nvidia-smi --id="$GPU_SELECT" -q | grep -q "Tesla"; then
  35. DISPLAYSTRING="--use-display-device=None"
  36. fi
  37. HEX_ID=$(sudo nvidia-smi --query-gpu=pci.bus_id --id="$GPU_SELECT" --format=csv | sed -n 2p)
  38. IFS=":." ARR_ID=($HEX_ID)
  39. unset IFS
  40. BUS_ID=PCI:$((16#${ARR_ID[1]})):$((16#${ARR_ID[2]})):$((16#${ARR_ID[3]}))
  41. sudo nvidia-xconfig --virtual="${SIZEW}x${SIZEH}" --depth="$CDEPTH" --mode="${SIZEW}x${SIZEH}" --allow-empty-initial-configuration --no-use-edid-dpi --busid="$BUS_ID" --only-one-x-screen "$DISPLAYSTRING"
  42. if [ "x$SHARED" == "xTRUE" ]; then
  43. export SHARESTRING="-shared"
  44. fi
  45. shopt -s extglob
  46. for TTY in /dev/tty+([0-9]); do
  47. if [ -w "$TTY" ]; then
  48. Xorg :0 &
  49. break
  50. fi
  51. done
  52. sleep 1
  53. x11vnc -display :0 -passwd "$VNCPASS" -forever -xkb -rfbport 5900 "$SHARESTRING" &
  54. sleep 1
  55. /opt/noVNC/utils/launch.sh --vnc localhost:5900 --listen 5901 &
  56. sleep 1
  57. export DISPLAY=:0
  58. UUID_CUT=$(sudo nvidia-smi --query-gpu=uuid --id="$GPU_SELECT" --format=csv | sed -n 2p | cut -c 5-)
  59. if vulkaninfo | grep "$UUID_CUT" | grep -q ^; then
  60. VK=0
  61. while true; do
  62. if ENABLE_DEVICE_CHOOSER_LAYER=1 VULKAN_DEVICE_INDEX=$VK vulkaninfo | grep "$UUID_CUT" | grep -q ^; then
  63. export ENABLE_DEVICE_CHOOSER_LAYER=1
  64. export VULKAN_DEVICE_INDEX="$VK"
  65. break
  66. fi
  67. VK=$((VK + 1))
  68. done
  69. else
  70. echo "Vulkan is not available for the current GPU."
  71. fi
  72. mate-session &
  73. pulseaudio --start
  74. echo "Session Running. Press [Return] to exit."
  75. read