Skip to content

Instantly share code, notes, and snippets.

@ponfertato
Last active November 28, 2025 09:03
Show Gist options
  • Select an option

  • Save ponfertato/85fc964664423eae1ac0a7ee91d53db6 to your computer and use it in GitHub Desktop.

Select an option

Save ponfertato/85fc964664423eae1ac0a7ee91d53db6 to your computer and use it in GitHub Desktop.
Единый скрипт-обёртка для запуска любых Steam-игр под Linux с поддержкой Gamescope, Gamemode, Source/Unreal/Unity Engine флагов и кастомных параметров.
#!/usr/bin/env bash
# Steam games launcher: --engine=source|unreal|unity, --gamemode, --mangohud, --fsr, --dxvk, --gamescope, --resolution=<width>x<height>
export HOST_LC_ALL="ru_RU.UTF-8"
export LANG="ru_RU.UTF-8"
export LC_ALL="ru_RU.UTF-8"
export STEAM_COMPAT_CLIENT_INSTALL_PATH="$HOME/.steam/steam"
export MESA_NO_ERROR="1"
export WLR_NO_HARDWARE_CURSORS="1"
export PROTON_NO_ESYNC="1"
export PROTON_NO_FSYNC="1"
export PROTON_NO_D9VK="1"
STEAM_PREFIX="$HOME/Документы/Игры/Prefixes/Steam"
GS_WM=1920
GS_HM=1080
if command -v xrandr &>/dev/null; then
read -r RESOLUTION < <(xrandr --current | awk '/\*/ {print $1; exit}')
IFS='x' read -r GS_W GS_H <<<"$RESOLUTION"
fi
[[ -z "$GS_W" || -z "$GS_H" ]] && {
GS_W=1366
GS_H=768
}
USE_AMD=false
USE_NVIDIA=false
if command -v lspci &>/dev/null; then
GPU_INFO=$(lspci -k 2>/dev/null | awk '/VGA|3D/,/Kernel driver/ {if (/Kernel driver in use/) print $NF}' | tail -1 || true)
[[ "$GPU_INFO" == *"amdgpu"* || "$GPU_INFO" == *"radeon"* ]] && USE_AMD=true
[[ "$GPU_INFO" == *"nvidia"* ]] && USE_NVIDIA=true
fi
USE_GAMEMODERUN=false
USE_MANGOHUD=false
USE_FSR=false
FORCE_GAMESCOPE=false
GS_FLAGS=(-W "$GS_WM" -H "$GS_HM" --adaptive-sync)
SOURCE_FLAGS=(-w "$GS_W" -h "$GS_H" -high -threads "$(nproc)" +mat_vsync 0 +fps_max 0 +exec autoexec.cfg)
UNREAL_FLAGS=("-dx12" "-nomansky" "-notexturestreaming" "-nomovie")
UNITY_FLAGS=("-screen-width" "$GS_W" "-screen-height" "$GS_H" "-nolog" "-batchmode")
DXVK_EXPORTS=("DXVK_ASYNC=1")
VKD3D_EXPORTS=()
if $USE_AMD; then
DXVK_EXPORTS+=(
"RADV_PERFTEST=aco"
"AMD_DEBUG=nodcc"
)
VKD3D_EXPORTS+=("VKD3D_CONFIG=dxr11,upload_hvv")
FSR_VKD3D_CONFIG="fsr3"
elif $USE_NVIDIA; then
DXVK_EXPORTS+=(
"PROTON_ENABLE_NVAPI=1"
"__NV_PRIME_RENDER_OFFLOAD=1"
"__GLX_VENDOR_LIBRARY_NAME=nvidia"
)
VKD3D_EXPORTS+=("VKD3D_CONFIG=dxr11")
FSR_VKD3D_CONFIG="fsr"
else
FSR_VKD3D_CONFIG="fsr"
fi
export STEAM_COMPAT_DATA_PATH="$STEAM_PREFIX"
ENGINE=""
POSITIONAL=()
DXVK_REQUESTED=false
found_game=0
while [[ $# -gt 0 ]]; do
if [[ $found_game -eq 0 ]]; then
case $1 in
--engine=*)
ENGINE="${1#*=}"
shift
;;
--engine)
ENGINE="$2"
shift 2
;;
--gamemode)
USE_GAMEMODERUN=true
shift
;;
--no-gamemode)
USE_GAMEMODERUN=false
shift
;;
--mangohud)
USE_MANGOHUD=true
shift
;;
--no-mangohud)
USE_MANGOHUD=false
shift
;;
--fsr)
USE_FSR=true
shift
;;
--no-fsr)
USE_FSR=false
shift
;;
--dxvk)
DXVK_REQUESTED=true
shift
;;
--gamescope)
FORCE_GAMESCOPE=true
shift
;;
--no-gamescope)
FORCE_GAMESCOPE=false
shift
;;
--resolution=*)
RES="${1#*=}"
GS_W="${RES%x*}"
GS_H="${RES#*x}"
shift
;;
--)
shift
POSITIONAL+=("$@")
break
;;
*)
if [[ "$1" == *"%command%"* || "$1" == */* || "$1" != -* ]]; then
found_game=1
POSITIONAL+=("$@")
break
else
POSITIONAL+=("$1")
shift
fi
;;
esac
else
POSITIONAL+=("$1")
shift
fi
done
set -- "${POSITIONAL[@]}"
insert_after_executable() {
local -n _arr=$1
local -n _flags=$2
local new=()
local inserted=false
for a in "${_arr[@]}"; do
new+=("$a")
if ! $inserted && [[ "$a" == *"%command%"* || "$a" == */* ]]; then
case "$a" in
*steam-launch-wrapper* | *reaper* | *steam-runtime* | *proton* | *compatibilitytools.d* | *steamapps/common/SteamLinuxRuntime*) ;;
*)
new+=("${_flags[@]}")
inserted=true
;;
esac
fi
done
if ! $inserted; then
new+=("${_flags[@]}")
fi
_arr=("${new[@]}")
}
case "${ENGINE,,}" in
source | source1 | source2)
insert_after_executable POSITIONAL SOURCE_FLAGS
;;
unreal | ue3 | ue4 | ue5)
insert_after_executable POSITIONAL UNREAL_FLAGS
export UE5_ALLOW_LINUX_DEBUGGING="1"
;;
unity)
insert_after_executable POSITIONAL UNITY_FLAGS
export UNITY_DISABLE_DEBUGGER="1"
;;
"") ;;
*)
echo "Warning: Unknown engine: $ENGINE" >&2
;;
esac
check_dependency() {
if $1 && ! command -v "$2" &>/dev/null; then
echo "Error: '$2' not found. Please install it." >&2
return 1
fi
return 0
}
check_dependency "$USE_GAMEMODERUN" "gamemoderun"
check_dependency "$USE_MANGOHUD" "mangohud"
check_dependency "$FORCE_GAMESCOPE" "gamescope"
if $DXVK_REQUESTED; then
for kv in "${DXVK_EXPORTS[@]}"; do export "$kv"; done
for kv in "${VKD3D_EXPORTS[@]}"; do export "$kv"; done
if $USE_FSR; then
export VKD3D_CONFIG="${VKD3D_CONFIG:+$VKD3D_CONFIG,}$FSR_VKD3D_CONFIG"
[[ "$USE_AMD" == true ]] && export DXVK_FILTER_DEVICE_NAME="AMD"
fi
fi
FINAL_CMD=("$@")
if $FORCE_GAMESCOPE; then
FINAL_CMD=(gamescope "${GS_FLAGS[@]}" -- "${FINAL_CMD[@]}")
fi
if $USE_MANGOHUD; then
export MANGOHUD_DLSYM="1"
FINAL_CMD=(mangohud "${FINAL_CMD[@]}")
fi
if $USE_GAMEMODERUN; then
FINAL_CMD=(gamemoderun "${FINAL_CMD[@]}")
fi
exec "${FINAL_CMD[@]}"
@ponfertato
Copy link
Author

Инструкция по использованию steamscope.sh

Установка скрипта

  1. Сохраните скрипт в удобное место, например в папку Steam:
    mkdir -p $HOME/.steam/steam/
    curl -o $HOME/.steam/steam/steamscope.sh https://gist.githubusercontent.com/ponfertato/85fc964664423eae1ac0a7ee91d53db6/raw/932c27e62d2fc38bcb725f2ecc43e0caa626abeb/steamscope.sh
    chmod +x $HOME/.steam/steam/steamscope.sh

Использование в Steam

  1. Правой кнопкой на игре → Свойства...
  2. В поле Параметры запуска добавьте:
    $HOME/.steam/steam/steamscope.sh %command%
    

Основные параметры запуска

# Минимальный запуск (только игра)
$HOME/.steam/steam/steamscope.sh %command%

# Полная оптимизация для AMD GPU
$HOME/.steam/steam/steamscope.sh --gamemode --mangohud --fsr --gamescope %command%

# Для Nvidia GPU (без FSR)
$HOME/.steam/steam/steamscope.sh --gamemode --mangohud --dxvk --gamescope %command%

# Для конкретного движка
$HOME/.steam/steam/steamscope.sh --engine=source --gamemode --mangohud %command%

Параметры по категориям

Производительность:

  • --gamemode - включает игровой режим для максимальной производительности
  • --fsr - улучшает FPS на AMD GPU через масштабирование изображения
  • --dxvk - конвертирует DirectX в Vulkan для лучшей совместимости

Мониторинг:

  • --mangohud - показывает FPS, загрузку CPU/GPU и температуру в игре

Режим работы:

  • --gamescope - запускает игру в отдельной сессии Wayland для изоляции от системы
  • --resolution=1280x720 - задает кастомное разрешение для запуска

Движки:

  • --engine=source - для Counter-Strike 2, Team Fortress 2, Garry’s Mod
  • --engine=unreal - для Risk of Rain 2, Deep Rock Galactic
  • --engine=unity - для 7 Days to Die

Примеры для популярных игр

Counter-Strike 2 (Source Engine):

$HOME/.steam/steam/steamscope.sh --engine=source --gamemode --mangohud --fsr --gamescope %command%

Deep Rock Galactic (Unreal Engine):

$HOME/.steam/steam/steamscope.sh --engine=unreal --gamemode --dxvk --mangohud %command%

7 Days to Die (Unity):

$HOME/.steam/steam/steamscope.sh --engine=unity --gamemode --fsr %command%

Советы

  1. Начинайте с минимальной конфигурации - добавляйте параметры по одному, чтобы найти оптимальные настройки
  2. Для AMD процессоров особенно полезны --gamemode и --fsr
  3. Если игра падает - сначала отключите --gamescope, затем --gamemode
  4. Разрешение по умолчанию - скрипт автоматически определит ваше нативное разрешение
  5. Мониторинг без оптимизации - --mangohud работает без других параметров и поможет оценить производительность

Скрипт автоматически определит ваше оборудование и применит базовые оптимизации. Все дополнительные функции (gamemode, mangohud, gamescope, fsr) по умолчанию отключены и активируются только при явном указании соответствующих флагов.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment