Update gamescope-session/usr/share/gamescope-session-plus/gamescope-session-plus

This commit is contained in:
ferreo 2025-01-05 15:31:10 +01:00
parent 47155dfee3
commit 9bebb2c6b5

View File

@ -1,21 +1,14 @@
#!/bin/bash
set -x
SYS_ID="$(cat /sys/devices/virtual/dmi/id/product_name)"
declare -r CLIENT=$1
declare -r CLIENT_CONFIG_DIR_USR=/usr/share/gamescope-session-plus/sessions.d
declare -r CLIENT_CONFIG_DIR_ETC=/etc/gamescope-session-plus/sessions.d
declare -r CLIENT_CONFIG_DIR_LOCAL="${XDG_CONFIG_HOME:-$HOME/.config}/gamescope-session-plus/sessions.d"
# Reset power-profiles-daemon/TuneD to balanced if the current profile is power save, this allows desktop control without greatly harming gaming performance.
if command -v tuned-adm > /dev/null; then
if grep -qz "powersave" <<< "$(tuned-adm active)"; then
tuned-adm profile balanced
fi
elif command -v powerprofilesctl > /dev/null; then
if grep -qz "power-saver" <<< "$(powerprofilesctl get)"; then
powerprofilesctl set balanced
fi
fi
# default empty session recovery function
short_session_recover() {
:
@ -26,8 +19,24 @@ post_gamescope_start() {
:
}
# default empty function to run after client exits
post_client_shutdown() {
:
}
get_gamescope_binary() {
if [ -n "$GAMESCOPE_BIN" ]; then
echo $GAMESCOPE_BIN
elif /usr/libexec/gamescope-sdl-workaround && command -v /usr/bin/gamescope-legacy > /dev/null; then
# GPUs that require the SDL backend
echo "/usr/bin/gamescope-legacy"
else
echo "/usr/bin/gamescope"
fi
}
gamescope_has_option() {
if (gamescope --help 2>&1 | grep -e "$1" > /dev/null); then
if ($(get_gamescope_binary) --help 2>&1 | grep -e "$1" > /dev/null); then
return 0
fi
@ -40,6 +49,15 @@ gamescope_has_option() {
export INTEL_DEBUG=norbc
export mesa_glthread=true
# This should be used by default by gamescope. Cannot hurt to force it anyway.
# Reported better framelimiting with this enabled
if /usr/libexec/gamescope-sdl-workaround; then
# Skip on legacy hardware
export ENABLE_GAMESCOPE_WSI=0
else
export ENABLE_GAMESCOPE_WSI=1
fi
# Force Qt applications to run under xwayland
export QT_QPA_PLATFORM=xcb
@ -72,6 +90,11 @@ touch "$GAMESCOPE_PATCHED_EDID_FILE"
# and Gamescope will use for now.
export GAMESCOPE_NV12_COLORSPACE=k_EStreamColorspace_BT601
# Workaround older versions of vkd3d-proton setting this
# too low (desc.BufferCount), resulting in symptoms that are potentially like
# swapchain starvation.
export VKD3D_SWAPCHAIN_LATENCY_FRAMES=3
# Initially write no_display to our config file
# so we don't get mangoapp showing up before Steam initializes
# on OOBE and stuff.
@ -95,14 +118,6 @@ export GAMESCOPE_LIMITER_FILE=$(mktemp /tmp/gamescope-limiter.XXXXXXXX)
# Temporary crutch until dummy plane interactions / etc are figured out
export GAMESCOPE_DISABLE_ASYNC_FLIPS=1
# Make Qt apps use the styling and behaviour of the desktop session
# This fixes some missing icons and unreadable text with Qt desktop apps in gamescope
if [[ ${BASE_IMAGE_NAME} == 'silverblue' ]]; then
export QT_QPA_PLATFORM_THEME=gtk2
else
export QT_QPA_PLATFORM_THEME=kde
fi
ulimit -n 524288
# Source device quirks if exists
@ -191,21 +206,11 @@ if [ -z "$GAMESCOPECMD" ]; then
ADAPTIVE_SYNC_OPTION="--adaptive-sync"
fi
FORCE_COMPOSITION_OPTION=""
if [ -n "$FORCE_COMPOSITION" ]; then
FORCE_COMPOSITION_OPTION="--force-composition"
fi
PANEL_TYPE_OPTION=""
if [ -n "$PANEL_TYPE" ] && gamescope_has_option "--force-panel-type"; then
PANEL_TYPE_OPTION="--force-panel-type $PANEL_TYPE"
fi
BYPASS_STEAM_RESOLUTION_OPTION=""
if [ ! -n "$DONT_BYPASS_RESOLUTION" ] && gamescope_has_option "--bypass-steam-resolution"; then
BYPASS_STEAM_RESOLUTION_OPTION="--bypass-steam-resolution"
fi
CUSTOM_REFRESH_RATES_OPTION=""
if [ -n "$CUSTOM_REFRESH_RATES" ] && gamescope_has_option "--custom-refresh-rates"; then
CUSTOM_REFRESH_RATES_OPTION="--custom-refresh-rates $CUSTOM_REFRESH_RATES"
@ -217,36 +222,28 @@ if [ -z "$GAMESCOPECMD" ]; then
BACKEND_OPTION="--backend $BACKEND"
fi
DISABLE_TOUCH_CLICK_OPTION=""
if [ -n "$DISABLE_TOUCH_CLICK" ] && gamescope_has_option "--disable-touch-click"; then
DISABLE_TOUCH_CLICK_OPTION="--disable-touch-click"
fi
HDR_OPTIONS=""
if [ "$ENABLE_GAMESCOPE_HDR" == "1" ] && [ "$ENABLE_GAMESCOPE_WSI" == "1" ] && gamescope_has_option "--hdr-enabled" && gamescope_has_option "--hdr-itm-enable"; then
HDR_OPTIONS="--hdr-enabled --hdr-itm-enable"
export ENABLE_HDR_WSI=1
export DXVK_HDR=1
fi
MURA_OPTION=""
if [ -n "$MURA" ] && gamescope_has_option "--mura-map"; then
MURA_OPTION="--mura-map $MURA"
fi
if [ -n "$GAMESCOPE_HDR_NITS" ] && gamescope_has_option "--hdr-itm-sdr-nits" && gamescope_has_option "--hdr-sdr-content-nits"; then
HDR_OPTIONS="$HDR_OPTIONS --hdr-itm-sdr-nits $GAMESCOPE_HDR_NITS --hdr-sdr-content-nits $GAMESCOPE_HDR_NITS"
fi
TOUCH_GESTURES_OPTION=""
if [ -n "$TOUCH_GESTURES" ] && gamescope_has_option "--touch-gestures"; then
TOUCH_GESTURES_OPTION="--touch-gestures"
fi
GAMESCOPECMD="/usr/bin/gamescope \
GAMESCOPECMD="$(get_gamescope_binary) \
$CURSOR \
$RESOLUTION \
$INTERNAL_RESOLUTION \
$DRM_MODE_OPTION \
$ORIENTATION_OPTION \
$DRM_MODE_OPTION \
$ADAPTIVE_SYNC_OPTION \
$FORCE_COMPOSITION_OPTION \
$PANEL_TYPE_OPTION \
$BYPASS_STEAM_RESOLUTION_OPTION \
$CUSTOM_REFRESH_RATES_OPTION \
$BACKEND_OPTION \
$DISABLE_TOUCH_CLICK_OPTION \
$MURA_OPTION \
$TOUCH_GESTURES_OPTION \
$HDR_OPTIONS \
--prefer-output $OUTPUT_CONNECTOR \
--xwayland-count $XWAYLAND_COUNT \
--default-touch-mode $TOUCH_MODE \
@ -266,7 +263,7 @@ fi
# Attempt to fallback to a desktop session if something goes wrong too many times
short_session_tracker_file="/tmp/chimeraos-short-session-tracker"
short_session_duration=60
short_session_count_before_reset=3
short_session_count_before_reset=5
SECONDS=0
short_session_count=$(wc <"$short_session_tracker_file" -l)
@ -281,30 +278,18 @@ if [[ "$short_session_count" -ge "$short_session_count_before_reset" ]]; then
exit 1
fi
# Log rotate the last session
if [ -f "${HOME}"/.${CLIENT}-stdout.log ]; then
cp "${HOME}"/.${CLIENT}-stdout.log "${HOME}"/.${CLIENT}-stdout.log.old
fi
if [ -f "${HOME}"/.gamescope-stdout.log ]; then
cp "${HOME}"/.gamescope-stdout.log "${HOME}"/.gamescope-stdout.log.old
fi
if [ -f "${HOME}"/.gamescope-cmd.log ]; then
cp "${HOME}"/.gamescope-cmd.log "${HOME}"/.gamescope-cmd.log.old
fi
# Start gamescope compositor, log it's output and background it
echo $GAMESCOPECMD >"${HOME}"/.gamescope-cmd.log
$GAMESCOPECMD >"${HOME}"/.gamescope-stdout.log 2>&1 &
# Start gamescope compositor and background it
$GAMESCOPECMD &
gamescope_pid="$!"
if read -r -t 15 response_x_display response_wl_display <> "$socket"; then
if read -r -t 3 response_x_display response_wl_display <>"$socket"; then
export DISPLAY="$response_x_display"
export GAMESCOPE_WAYLAND_DISPLAY="$response_wl_display"
# We're done!
else
echo "gamescope failed" >>"$short_session_tracker_file"
kill -9 "$gamescope_pid"
wait
wait -n "$gamescope_pid"
exit 1
# Systemd or Session manager will have to restart session
fi
@ -320,18 +305,16 @@ fi
# If we have mangoapp binary start it
if command -v mangoapp >/dev/null; then
(while true; do
mangoapp >"${HOME}"/.mangoapp-stdout.log 2>&1
mangoapp
done) &
fi
# Start discover-overlay if discord is installed
if command -v discover-overlay > /dev/null && grep -q "com.discordapp.Discord" <<< $(/usr/bin/flatpak list --app --columns=application); then
env DISPLAY=:0 discover-overlay 2>&1 &
fi
# If the Sunshine service is enabled, restart it
if systemctl is-enabled --user sunshine.service; then
systemctl restart --user sunshine.service 2>&1 &
# Handle Galileo Mura Correction
# This is applied here and not in device-quirks because it must be called after gamescope has started.
if [[ ":Galileo:" =~ ":$SYS_ID:" ]]; then
if command -v galileo-mura-setup > /dev/null; then
galileo-mura-setup &
fi
fi
# For compatibility with older user configuration overrides
@ -340,7 +323,7 @@ if [ -n "$STEAMCMD" ]; then
fi
# Start client application
$CLIENTCMD >"${HOME}/.${CLIENT}-stdout.log" 2>&1
$CLIENTCMD
if [[ "$SECONDS" -lt "$short_session_duration" ]]; then
echo "${CLIENT} failed" >>"$short_session_tracker_file"
@ -348,6 +331,8 @@ else
rm "$short_session_tracker_file"
fi
post_client_shutdown
# When the client exits, kill gamescope nicely
kill $gamescope_pid
@ -390,4 +375,4 @@ for job in $(jobs -p); do
ps -p "$job" >&2
fi
kill -9 "$job"
done
done