gaming-mode-leave 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #!/usr/bin/env bash
  2. set -u
  3. LOG_DIR="${XDG_STATE_HOME:-${HOME}/.local/state}/sunshine"
  4. LOG_FILE="${LOG_DIR}/gaming-mode.log"
  5. mkdir -p "${LOG_DIR}"
  6. log() {
  7. printf '[%s] [LEAVE] %s\n' "$(date '+%Y-%m-%d %H:%M:%S')" "$*" >> "${LOG_FILE}"
  8. }
  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. export DISPLAY="${DISPLAY:-:20}"
  25. STATE_DIR="${XDG_RUNTIME_DIR:-/tmp}/sunshine-gaming-mode"
  26. STATE_FILE="${STATE_DIR}/xfce-state"
  27. desktop_was_running=1
  28. panel_was_running=1
  29. if [[ -f "${STATE_FILE}" ]]; then
  30. source "${STATE_FILE}"
  31. fi
  32. log "Leaving gaming mode on DISPLAY=${DISPLAY}"
  33. if [[ "${desktop_was_running}" == "1" ]] &&
  34. ! pgrep -u "$(id -u)" -x xfdesktop >/dev/null 2>&1; then
  35. log "Starting xfdesktop"
  36. nohup xfdesktop --disable-wm-check \
  37. >> "${LOG_FILE}" 2>&1 &
  38. fi
  39. if [[ "${panel_was_running}" == "1" ]] &&
  40. ! pgrep -u "$(id -u)" -x xfce4-panel >/dev/null 2>&1; then
  41. log "Starting xfce4-panel"
  42. nohup xfce4-panel \
  43. >> "${LOG_FILE}" 2>&1 &
  44. fi
  45. rm -f "${STATE_FILE}"
  46. log "XFCE desktop restored"
  47. exit 0