gaming-mode-enter 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. #!/usr/bin/env bash
  2. set -u
  3. SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
  4. LOG_FILE="${SCRIPT_DIR}/gaming-mode.log"
  5. log() {
  6. printf '[%s] [ENTER] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >> "${LOG_FILE}"
  7. }
  8. # Récupère l'environnement réel de la session XFCE.
  9. import_xfce_environment() {
  10. local session_pid
  11. local entry
  12. session_pid="$(pgrep -u "$(id -u)" -x xfce4-session | head -n 1 || true)"
  13. if [[ -n "${session_pid}" && -r "/proc/${session_pid}/environ" ]]; then
  14. while IFS= read -r -d '' entry; do
  15. case "${entry}" in
  16. DISPLAY=*|XAUTHORITY=*|DBUS_SESSION_BUS_ADDRESS=*|XDG_RUNTIME_DIR=*)
  17. export "${entry}"
  18. ;;
  19. esac
  20. done < "/proc/${session_pid}/environ"
  21. fi
  22. }
  23. import_xfce_environment
  24. # Fallback correspondant à notre stack actuelle.
  25. export DISPLAY="${DISPLAY:-:20}"
  26. STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/sunshine-gaming-mode"
  27. STATE_FILE="${STATE_DIR}/xfce-state"
  28. mkdir -p "${STATE_DIR}"
  29. log "Entering gaming mode on DISPLAY=${DISPLAY}"
  30. desktop_was_running=0
  31. panel_was_running=0
  32. if pgrep -u "$(id -u)" -x xfdesktop >/dev/null 2>&1; then
  33. desktop_was_running=1
  34. log "Stopping xfdesktop"
  35. xfdesktop --quit >/dev/null 2>&1 || true
  36. fi
  37. if pgrep -u "$(id -u)" -x xfce4-panel >/dev/null 2>&1; then
  38. panel_was_running=1
  39. log "Stopping xfce4-panel"
  40. xfce4-panel --quit >/dev/null 2>&1 || true
  41. fi
  42. # Laisse un fond propre pendant le lancement du jeu.
  43. if command -v xsetroot >/dev/null 2>&1; then
  44. xsetroot -solid black >/dev/null 2>&1 || true
  45. fi
  46. cat > "${STATE_FILE}" <<EOF
  47. desktop=${desktop_was_running}
  48. panel=${panel_was_running}
  49. EOF
  50. log "Gaming mode enabled"
  51. # Ne jamais empêcher Sunshine de lancer le jeu.
  52. exit 0