sunshine-entrypoint.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #!/bin/bash
  2. set -euo pipefail
  3. echo "=============================================================="
  4. echo " Sunshine Gaming Desktop"
  5. echo "=============================================================="
  6. echo
  7. echo "Starting existing desktop stack..."
  8. # On conserve temporairement tout le mécanisme Selkies existant :
  9. # Xorg NVIDIA, XFCE, PipeWire, WirePlumber, D-Bus, etc.
  10. /usr/bin/supervisord -c /etc/supervisord.conf &
  11. SUPERVISOR_PID=$!
  12. cleanup() {
  13. echo "Stopping supervisor..."
  14. kill "${SUPERVISOR_PID}" 2>/dev/null || true
  15. wait "${SUPERVISOR_PID}" 2>/dev/null || true
  16. }
  17. trap cleanup EXIT TERM INT
  18. echo
  19. echo "Waiting for Xorg on ${DISPLAY}..."
  20. for i in $(seq 1 60); do
  21. if xdpyinfo -display "${DISPLAY}" >/dev/null 2>&1; then
  22. echo "Xorg is ready."
  23. break
  24. fi
  25. if ! kill -0 "${SUPERVISOR_PID}" 2>/dev/null; then
  26. echo "ERROR: supervisord exited before Xorg became available."
  27. exit 1
  28. fi
  29. if [ "${i}" -eq 60 ]; then
  30. echo "ERROR: Xorg did not become ready."
  31. exit 1
  32. fi
  33. sleep 1
  34. done
  35. echo
  36. echo "GPU:"
  37. nvidia-smi --query-gpu=name,driver_version --format=csv,noheader || true
  38. echo
  39. echo "Display:"
  40. xdpyinfo -display "${DISPLAY}" \
  41. | grep -E 'dimensions:|resolution:' \
  42. || true
  43. mkdir -p "${HOME}/.config/sunshine"
  44. cat > "${HOME}/.config/sunshine/sunshine.conf" <<'EOF'
  45. system_tray = disabled
  46. capture = nvfbc
  47. encoder = nvenc
  48. EOF
  49. echo "Sunshine configuration:"
  50. cat "${HOME}/.config/sunshine/sunshine.conf"
  51. echo "Triggering input hotplug..."
  52. udevadm trigger --subsystem-match=input
  53. echo
  54. echo "Starting Sunshine..."
  55. /usr/bin/sunshine &
  56. SUNSHINE_PID=$!
  57. echo "Waiting for Sunshine virtual input devices..."
  58. for i in $(seq 1 30); do
  59. if grep -q 'Name="Mouse passthrough"' /proc/bus/input/devices; then
  60. echo "Sunshine virtual input devices detected."
  61. break
  62. fi
  63. if ! kill -0 "${SUNSHINE_PID}" 2>/dev/null; then
  64. echo "ERROR: Sunshine exited."
  65. wait "${SUNSHINE_PID}"
  66. exit $?
  67. fi
  68. sleep 1
  69. done
  70. echo "Triggering input hotplug..."
  71. udevadm trigger --subsystem-match=input
  72. wait "${SUNSHINE_PID}"