Last active
November 28, 2025 09:03
-
-
Save ponfertato/85fc964664423eae1ac0a7ee91d53db6 to your computer and use it in GitHub Desktop.
Единый скрипт-обёртка для запуска любых Steam-игр под Linux с поддержкой Gamescope, Gamemode, Source/Unreal/Unity Engine флагов и кастомных параметров.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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[@]}" |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Инструкция по использованию steamscope.sh
Установка скрипта
Использование в Steam
Основные параметры запуска
Параметры по категориям
Производительность:
--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):
Deep Rock Galactic (Unreal Engine):
7 Days to Die (Unity):
Советы
--gamemodeи--fsr--gamescope, затем--gamemode--mangohudработает без других параметров и поможет оценить производительностьСкрипт автоматически определит ваше оборудование и применит базовые оптимизации. Все дополнительные функции (gamemode, mangohud, gamescope, fsr) по умолчанию отключены и активируются только при явном указании соответствующих флагов.