.. ARU (c) 2018 - 2021, Pavel Priluckiy, Vasiliy Stelmachenok and contributors

   ARU is licensed under a
   Creative Commons Attribution-ShareAlike 4.0 International License.

   You should have received a copy of the license along with this
   work. If not, see <https://creativecommons.org/licenses/by-sa/4.0/>.

""""""""""""""""""""
Wine / Linux Gaming
""""""""""""""""""""

.. contents:: Содержание:
  :depth: 3

.. role:: bash(code)
  :language: shell

====================
Что такое Wine?
====================

Wine - слой совместимости для запуска Windows-приложений (в том числе игр) из под Linux (Unix-подобных систем).
Благодаря нему вы по факту сможете поиграть в большинство игр из вашей библиотеки Steam/GOG/Epic Games Store.
Исключением разве что являются игры с встроенными анти-чит системами, хотя благодаря усилиям Valve, в ближайшем будущем, вероятно, это уже не будет являться такой большой проблемой.
Конечно, все не так гладко как хотелось бы, ведь для запуска и обеспечения работоспособности многих программ/игр придется ещё изрядно повозиться с его настройкой,
однако сама такая возможность в принципе является незаменимой для Linux пользователей, в частности геймеров.

============
Сборки Wine
============

Существуют различные сборки Wine.
Подобный зоопарк появился ввиду накопления большого количества различных патчей (сторонних изменений)
которые по какой-то причине не могут быть приняты в основную ветку разработки (далее upstream) Wine.
Кроме того, стоит понимать что обычный Wine не очень хорошо справляется с запуском игрушек из коробки,
поэтому в том числе и появились такие вещи как Proton от компании Valve,
являющийся по сути тем же Wine, но с упором именно на игровую составляющую.

На текущий момент есть две официальных сборки Wine которые поддерживаются непосредственно разработчиками:
Это обычный wine и wine-staging, содержащий те изменение которые пока не могут быть внесены в upstream.
Но существуют также много альтернативных сборок основаных на Wine-staging с упором именно на игры, о них написано далее.

----------------------------------------------
Установка wine-staging вместе с зависимостями
----------------------------------------------

Перед установкой обязательно включите multilib репозиторий в */etc/pacman.conf*! 32-библиотеки необходимы для запуска 32-битных приложений Windows.::

  sudo pacman -S wine-staging winetricks wine-mono giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal v4l-utils lib32-v4l-utils libpulse lib32-libpulse libgpg-error lib32-libgpg-error alsa-plugins lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo lib32-libjpeg-turbo sqlite lib32-sqlite libxcomposite lib32-libxcomposite libxinerama lib32-libgcrypt libgcrypt lib32-libxinerama ncurses lib32-ncurses opencl-icd-loader lib32-opencl-icd-loader libxslt lib32-libxslt libva lib32-libva gtk3 lib32-gtk3 gst-plugins-base-libs lib32-gst-plugins-base-libs vulkan-icd-loader lib32-vulkan-icd-loader

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

Использование Wine на деле является довольно простым. Чтобы запустить любое Windows-приложение достаточно использовать простую команду:::

  wine программа.exe

.. attention:: НИКОГДА НЕ ЗАПУСКАЕТЕ WINE ИЗ ПОД SUDO/ROOT!

Немного иной командой запускаются MSI установщики:::

  wine msiexec /i программа.msi

При использовании Wine важным понятием является префикс (его также называют бутылкой).
Префикс, это как бы файловая система Windows в миниатюре, а по совместительству это рабочая директория, где будут устанавливаться/работать все Windows программы которые вы будете запускать из под Wine.
Стоит понимать, что программы запускаемые через Wine по прежнем будут думать что они работают в Windows, хотя на самом деле это не так.
Поэтому Wine и понадобилось воссоздать файловую структуру каталогов Windows внутри Linux (Unix).
Префикс по умолчанию - это скрытая директория *~/.wine* в папке вашего пользователя.
Если вы её откроете то увидите следующее:

.. image:: https://raw.githubusercontent.com/ventureoo/ARU/main/archive/ARU/images/image3.png

Как мы видим, в префиксе находятся файлы с расширением .reg (файлы реестра Windows), директории *dosdevices* и *drive_c*.
Файлы реестра используются Wine для, собственно, воссоздания работы реестра Windows в Linux.
Его также будут использовать программы которые запускаемые через Wine.
Директория *dosdevices* содержит символические ссылки на примонтированные устройства (разделы) в вашей системе Linux.
Это понадобилось для того чтобы представить их в виде MS-DOS томов, ибо Windows приложения опять таки не знают что они работают под Linux, и им нужны привычные им диски D, E и т.д.
Один из таких "виртуальных дисков" располагается в другом каталоге - *drive_c* (диск C:).
Если вы его откроете то увидите "замечательную" структуру каталогов Windows:

.. image:: https://raw.githubusercontent.com/ventureoo/ARU/main/archive/ARU/images/image8.png

Собственно именно сюда и будут устанавливаться все Windows программы и работать они как правило тоже будут именно там.

Вы можете переназначить префикс по умолчанию через переменную окружения *WINEPREFIX*,
тем самым указав Wine использовать другую директорию для его расположения вместо *~/.wine*. Например:::

  WINEPREFIX=~/Games wine game.exe # Если директории не было, он её создаст.

Понятное дело, что при смене префикса через WINEPREFIX не переносится его содержимое,
т.е. программы установленные в одном префиксе не будут скопированы в новый.
Но если вам нужно просто сменить название префикса с сохранением его содержимого,
то просто переименуете название директории, а затем переназначьте переменную, например:::

  mv ~/old_wineprefix ~/new_wineprefix
  WINEPREFIX=~/.new_wineprefix wine приложение.exe

Префиксы также бывают 32-битные и 64 битные в соответствии с разрядностью систем Windows (по умолчанию создаются 64 битные).
Указать разрядность префикса можно через переменную *WINEARCH*.
Для запуска старых видеоигр мы рекомендуем использовать 32-битный префикс во избежание проблем в будущем:::

  WINEPREFIX=~/.wine32 WINEARCH=win32 wine oldgame.exe

Если вы уже создали 64-битные префикс, то переназначить его разрядность через переменную *WINEARCH* не получиться. Создайте новый и перенесите нужную вам программу.

Проверить разрядность уже существующего префикса можно командой (можно также проверить по наличию директории *"Program Files (x86)"* внутри префикса):::

  grep '#arch' ~/.wine/system.reg # Где ‘.wine’ - название префикса

==============================
Альтернативные сборки Wine
==============================

По умолчанию обычные сборки Wine недостаточно хорошо заточены для комфортного гейминга ввиду их универсальности,
т.к. это все таки свободная реализация WinAPI в Linux и она не обязана использоваться только для запуска игр из под Windows в Linux.
Вообщем, Wine вещь довольно универсальная и не заточена только под что-то одно.
Но  существуют также альтернативные сборки Wine, с большим количеством различных патчей и улучшений, нацеленных в основном как раз на игры.

`WINE-TKG <https://github.com/Frogging-Family/wine-tkg-git>`_ - это, наверное, лучшая сборка Wine для опытных пользователей которые хотят улучшить свой опыт гейминга под линуксом.
Преимуществом данной сборки перед другими является огромное количество вложенных в неё патчей из разных источников (В том числе, портированных из Proton).
Поэтому мы настоятельно рекомендуем её к установке если вы хотите получить не только больше производительности, но и совместимости с различными Windows играми.

Установку wine-tkg можно выполнить двумя способами:

I. Установить из его PKGBUILD как мы это делал ранее с другими программами.

II. Собрать его полностью вручную из исходников.

Мы выберем первый вариант установки, т.к. он самый простой и надежный.

Второй вариант вы можете осуществить по желанию, особенно если у вас дистрибутив отличный от Arch Linux.

**I. Установка**::

  git clone https://github.com/Frogging-Family/wine-tkg-git.git
  cd wine-tkg-git/wine-tkg-git

По аналогии с linux-tkg, wine-tkg предоставляет возможность предварительно настроить себя перед установкой
на применение различных патчей и твиков через редактирование файла *customization.cfg*:::

  nano customization.cfg

Здесь нас интересует не так много настроек.
По сути можете оставлять все значения по умолчанию, кроме следующих параметров:

:bash:`_use_esync="true"` - Включает поддержку esync что оптимизирует работу wineserver.
Активируется через переменную окружения *WINEESYNC=1*.

:bash:`_use_fsync="true"` - Включает поддержку fsync, альтернативу esync которую можно задействовать через переменную окружения *WINEFSYNC=1*.
Оба параметра обязательны к включению для повышения производительности.

:bash:`fsync_futex2="true"` - Включает поддержку futex2 для fsync.
Включать по желанию.
Хотя и новый механизм ядра futex2 значительно повышает производительность в играх, пока что он нестабилен и может ломать работоспособность некоторых игр.
И кроме того он требует специальное ядро собранное с его поддержкой (К примеру, linux-tkg).

Подробное сравнение Esync и Fsync можно посмотреть в данном видео.

https://www.youtube.com/watch?v=-nlNJguG5_0&t=18s

:bash:`_launch_with_dedicated_gpu="false"` - Активирует запуск приложений через дискретный графический процессор на ноутбуках с PRIME.
Работает только с открытыми драйверами (Mesa), поэтому выбирайте сами нужно оно вам или нет.

:bash:`_plasma_systray_fix="true"` - Исправляет отображение запускаемых Wine-приложений в трее KDE Plasma.
Включаете/отключайте в зависимости от того используете ли вы данное окружение.

:bash:`_update_vulkan="true"` - Включает свежие обновления библиотеки winevulkan. Обязательно оставляйте включенным.

:bash:`_FS_bypass_compositor="true"` - Задействует обход композитора приложениями запускаемыми через Wine.
Очень полезная и нужная опция для исправления проблем задержек и заиканий в играх,
в случае когда системный композитор пытается лишний раз осуществить композитинг над окном с игрой запущенной через Wine.
Обязательно включаем.

:bash:`_proton_fs_hack="true"` - Включает еще один очень нужный патч.
Вносит исправление  с помощью которого изменяя разрешение игры в полноэкранном режиме у вас не будет изменяться разрешение вашего рабочего стола. Включаем.

:bash:`_msvcrt_nativebuiltin="true"` - Осуществляет нативную сборку mscvrt.dll. Лишним точно не будет, поэтому включаем.

:bash:`_win10_default="false"` - Устанавливает в качестве версии по умолчанию Windows 10 в Wine.
Не рекомендуется к включению в виду того, что это может задействовать vkd3d в некоторых играх работающих на DirectX 12,
что однако ведет к ухудшению производительности по сравнению с DXVK при возможности запустить игру с DirectX 11.

:bash:`_protonify="true"` - Задействует множественные заплатки и патчи для Wine портированные из Proton.
По нашему мнению это маст хев, т.к. они содержат в себе множественные исправления для различных игр и оптимизаций к ним.
Настоятельно рекомендуется к включению.

.. attention:: По умолчанию wine-tkg не использует нативные флаги которые вы указывали ранее в */etc/makepkg.conf*.
   Их нужно указать вручную отредактировав *wine-tkg-profiles/advanced-customization.cfg*::

    nano wine-tkg-profiles/advanced-customization.cfg # Отредактируйте строчки ниже

    _GCC_FLAGS="-O2 -ftree-vectorize -march=native"

    _CROSS_FLAGS="-O2 -ftree-vectorize -march=native"

На этом все, остальные настройки оставьте по умолчанию.

Теперь можно перейти к самой сборке и установке wine-tkg: :bash:`makepkg -sric`

**II. Ручная установка**

Подробно описывать ручную сборку здесь мы не будем.
Поэтому лучше всего посмотрите видео версию, где это наглядно показано (7 минута 23 секунда):

https://www.youtube.com/watch?v=W1e6_3dPlHk

======================
wine-tkg-userpatches
======================

Это  дополнение к wine-tkg.
По сути это коллекция пользовательских патчей для улучшения производительности и совместности.
Среди них: улучшения работы с памятью, интерфейсом GDI, улучшение качества отклика клавиатуры через системные вызовы Futex,
повышение приоритета процессов Wine по умолчанию, и другие низкоуровневые изменения от сторонних разработчиков.

**Установка**::

  git clone https://github.com/openglfreak/wine-tkg-userpatches
  cd ~/wine-tkg-git/wine-tkg-git

  nano wine-tkg-profiles/advanced-customization.cfg # Отредактируйте строчку ниже
  
  _EXT_CONFIG_PATH="~/wine-tkg-userpatches/wine-tkg.cfg"

Пересоберите wine-tkg по инструкции выше.

Никакой дополнительной настройки (редактирования *customization.cfg*) при этом не требуется.

=====================================
Сборка DXVK с асинхронным патчем
=====================================

Мы рекомендуем собирать `dxvk-mingw <https://github.com/loathingKernel/PKGBUILDs/tree/master/public/dxvk-mingw>`_ из github для лучшей производительности и активации асинхронного патча,
что ускорит процесс компиляции шейдеров во время игры и сделает ваш игровой процесс плавнее.

**Установка:**::

  git clone https://github.com/loathingKernel/PKGBUILDs
  cd PKGBUILDS/public/dxvk-mingw
  mv PKGBUILD.testing PKGBUILD
  makepkg -sric # Сборка и установка

Применить асинхронную компиляцию шейдеров можно через переменную окружения *DXVK_ASYNC=1*.
**Не используйте его в играх с анти-чит системами!**

.. attention:: После установки пакета DXVK не задействуется сразу, его ещё нужно установить по отдельности в каждый префикс Wine
   (это не относиться к играм запускаемым через Lutris/Proton, в них DXVK включён по умолчанию):::

     WINEPREFIX=~/prefix setup_dxvk install # Где "prefix" - это ваш префикс Wine

====================================
Полезные ссылки по теме Wine и DXVK
====================================

**Видео на настройке Бинарной версии Wine.**

https://www.youtube.com/watch?v=NKI3dtK7mRI (Устаревшее видео).

**Скачать готовые сборки Wine и DXVK**

https://mega.nz/folder/pNsTiQyA#2vur9shHbXvLnhdQTpd3AQ

https://mega.nz/folder/IJdEgIrT#wXcbgymIDP2mesJ8kE99Qg

https://github.com/Kron4ek/Wine-Builds

https://mirror.cachyos.org/?search=wine

**Почитать, что это такое**

https://www.newalive.net/234-sborki-dxvk-i-d9vk.html

https://www.newalive.net/231-wine-tk-glitch.html

===============================
Установка Lutris и дополнений.
===============================

:bash:`sudo pacman -S lutris` # Комбайн, где содержатся все удобные настройки.

Необходим для удобного управления настройками Wine.

:bash:`sudo pacman -S gamemode lib32-gamemode` # Утилита для максимальной выжимки системы во время игры.

Можно активировать в Lutris или вручную перед запуском игры

**Пример работы с Lutris**

https://www.youtube.com/watch?v=ybe0MzJDUvw

=========================================
AMD FidelityFX Super Resolution в Wine
=========================================

Возможно, вы слышали о волшебной технологии DLSS от Nvidia, которая позволяет поднять FPS почти в два раза и при этом не потратить ни копейки на новое оборудование.
Вот и компания AMD совсем недавно представила похожую технологию, которая получила помпезное название AMD FidelityFX Super Resolution или сокращенно FSR.
Новая технология масштабирования картинки от AMD не требует наличия дорого́й карты или каких-то аппаратных блоков ускорения,
что в отличие от DLSS, должно позволить использовать технологию везде и совершенно бесплатно.
А благодаря чудесным патчам от энтузиастов для Wine мы можем применть эту волшебную технологию для любой Windows-игры.

**I. Установка**

Чтобы установить патч от энтузиастов придется немного помудрить с нашим wine-tkg.

Его установка описывалась выше, но чтобы задействовать сторонний патч на FSR в Wine нужно отредактировать одну строку в *customization.cfg*:::

  nano customization.cfg

  # Найдите строчку _community_patches="" и добавьте в неё следующее:

  _community_patches="amd_fsr_fshack.mypatch"

  # Обязательно оставьте при этом включенными данные параметры:
  _protonify, _msvcrt_nativebuiltin, _proton_fs_hack, _proton_rawinput.
  Без них ничего работать не будет.

И пересоберите ваш wine-tkg: :bash:`makepkg -sric`

**II. Установка**

Если вам кажется первый способ немного муторным, то вы можете просто использовать уже готовые сборки с FSR патчем в Lutris:

.. image:: images/linux-gaming-1.png

И затем выбрать её для нужной вам игры:

.. image:: images/linux-gaming-2.png

**III. Установка**

FSR патч также по умолчанию задействован в Proton-GE-Custom.
Про его установку вы можете прочитать ниже в соответствующем разделе.

**Как использовать**

Несмотря на то, что мы выполнили установку патченной версии Wine одним из выше описанных способов,
технлогию FSR ещё нужно активировать.

Сделать это можно руками, через переменные окружения *WINE_FULLSCREEN_FSR=1* или в Lutris:

.. image:: images/linux-gaming-3.png

Важно помнить, что эта технология работает **только в полноэкранном режиме игры**.

Регулировать резкость итогового изображения можно через переменную окружения *WINE_FULLSCREEN_FSR_STRENGTH=N*,
где N - это уровень резкости изображения от 0 до 5. Чем выше значение, тем меньше резкость.
По умолчанию установлено значение *"2"*, мы рекомендуем использовать значение *"3"*.

**Видеоверсия и демонстрация работы технологии**

https://www.youtube.com/watch?v=YNhwAazJODU

===================
Proton-GE-Custom
===================

Proton-GE-Custom это форк проекта Proton для запуска Windows-игр с дополнительным патчами и оптимизациями не вошедшими в основную ветку Proton,
а также улучшение совместимости с некоторыми играми (например, Warframe).
Позволяет играть во многие проекты которые не заводятся с обычным Wine или Proton.

**I. Установка (бинарная версия):**::

  git clone https://aur.archlinux.org/proton-ge-custom-bin
  cd proton-ge-custom-bin
  makepkg -sric

**II. Установка (компиляция, имеет много зависимостей):**::

  git clone https://aur.archlinux.org/proton-ge-custom
  cd proton-ge-custom
  makepkg -sric

Дабы использовать Proton-GE в качестве альтернативы обычному Proton,
после установки Proton-GE-Custom вам нужно перезапустить Steam и зайти в Свойства нужной вам игры, прожать в:
*Совместность -> Принудительно использовать определенный инструмент совместности Steam Play -> Proton-6.XX-GE-1*. Готово, теперь можно запустить игру.

-----------------------------------------
Использование Proton-GE-Custom в Lutris
-----------------------------------------

Немногие понимают, что Proton по сути является тем же Wine, хоть и с плюшками.
Так вот, зная этот факт, мы можем сказать Lutris использовать Proton в качестве кастомного Wine. Делается это очень просто:::

  ln -s /usr/share/steam/compatibilitytools.d/proton-ge-custom/files ~/.local/share/lutris/runners/wine/wine-proton-ge

Затем просто выберите пункт в выборе версии Wine на *"wine-proton-ge"* в Lutris для нужной вам игры.
