Commit c9be94cc authored by Mikhail Tergoev's avatar Mikhail Tergoev

Scripts version 2252

parent fa0e61a8
<div align="center"> <div align="center">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortProton_PKGBUILD/main/portproton.svg" width="64"> <img src="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/data_from_portwine/img/gui/port_proton.svg" width="64">
<h1 align="center">PortProton</h1> <h1 align="center">PortProton</h1>
<p align="center">Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей. <p align="center">Проект, призванный сделать запуск Windows-игр в Linux простым и удобным как для начинающих, так и для опытных пользователей.
Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.</p> Проект стремится сделать запуск игр (и другого программного обеспечения) максимально простым, но в то же время предоставляет гибкие настройки для опытных пользователей.</p>
...@@ -55,8 +55,8 @@ epm play portproton ...@@ -55,8 +55,8 @@ epm play portproton
exit exit
``` ```
* **Ubuntu 20.04** (Kubuntu, Xubuntu, Lubuntu, и т.д.), **Linux Mint 20.x** : * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** :
[portproton_1.0-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.0-2_amd64/portproton_1.0-2_amd64.deb) [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb)
* **Arch Linux** и производные (Manjaro, Garuda, и т.д.) : * **Arch Linux** и производные (Manjaro, Garuda, и т.д.) :
[AUR](https://aur.archlinux.org/packages/portproton) [AUR](https://aur.archlinux.org/packages/portproton)
...@@ -70,7 +70,7 @@ exit ...@@ -70,7 +70,7 @@ exit
sudo urpmi portproton sudo urpmi portproton
``` ```
* **Fedora 37+** and **Nobara**: * **Fedora 38+** and **Nobara**:
```sh ```sh
sudo dnf copr enable boria138/portproton sudo dnf copr enable boria138/portproton
...@@ -82,22 +82,8 @@ sudo dnf install portproton ...@@ -82,22 +82,8 @@ sudo dnf install portproton
**ВНИМАНИЕ** : при универсальном способе установки PortProton зависимости должны быть установлены вручную! **ВНИМАНИЕ** : при универсальном способе установки PortProton зависимости должны быть установлены вручную!
Нормальная установка:
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0
```
Тихая установка (ENG):
```sh ```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -eng wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh PortProton_Installer
```
Тихая установка (RUS):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -rus
``` ```
## Зависимости ## Зависимости
...@@ -106,7 +92,7 @@ wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_sc ...@@ -106,7 +92,7 @@ wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_sc
Если у вас видеокарта от NVIDIA и установлен проприетарный драйвер, то необходимо проверить, установлена ли lib32-nvidia-utils (без нее ни одна 32-битная игра не будет работать) Если у вас видеокарта от NVIDIA и установлен проприетарный драйвер, то необходимо проверить, установлена ли lib32-nvidia-utils (без нее ни одна 32-битная игра не будет работать)
* **Ubuntu / Linux Mint / Pop!_OS** * **Ubuntu / Linux Mint / Pop!_OS / Debian**
```sh ```sh
sudo dpkg --add-architecture i386 sudo dpkg --add-architecture i386
...@@ -117,7 +103,7 @@ sudo apt update ...@@ -117,7 +103,7 @@ sudo apt update
sudo apt upgrade sudo apt upgrade
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils zenity bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 wget zenity zstd cabextract xdg-utils openssl bc libgl1-mesa-glx libgl1-mesa-glx:i386 sudo apt install curl file libc6 libnss3 policykit-1 xz-utils bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 zstd cabextract xdg-utils openssl libgl1 libgl1:i386
``` ```
* **Arch Linux / Manjaro** * **Arch Linux / Manjaro**
...@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist ...@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist
``` ```
```sh ```sh
sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl gamemode desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font zenity gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-gamemode lib32-openssl sudo pacman -Syu bash bubblewrap zstd cabextract tar openssl desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-lib32-openssl
``` ```
Если у вас видеокарта от **NVIDIA**, обязательно проверьте, установлен ли пакет **lib32-nvidia-utils**. Если у вас видеокарта от **NVIDIA**, обязательно проверьте, установлен ли пакет **lib32-nvidia-utils**.
...@@ -142,26 +128,10 @@ sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl ga ...@@ -142,26 +128,10 @@ sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl ga
sudo pacman -Syu lib32-nvidia-utils sudo pacman -Syu lib32-nvidia-utils
``` ```
* **Debian/Deepin**
```sh
sudo apt install software-properties-common -y
sudo apt-add-repository non-free
sudo dpkg --add-architecture i386
sudo apt update
sudo apt upgrade
sudo apt install bubblewrap curl gamemode icoutils tar wget zenity zstd libvulkan1 libvulkan1:i386 steam cabextract
```
* **openSUSE** * **openSUSE**
```sh ```sh
sudo zypper install curl icoutils wget zenity bubblewrap zstd cabextract tar steam zenity zenity-lang gamemoded libgamemode0 libgamemodeauto0 sudo zypper install curl bubblewrap zstd cabextract tar steam
``` ```
* **Fedora** * **Fedora**
...@@ -171,7 +141,7 @@ sudo dnf update ...@@ -171,7 +141,7 @@ sudo dnf update
sudo dnf upgrade --refresh sudo dnf upgrade --refresh
sudo dnf install curl gamemode gamemode.i686 icoutils wget zenity bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
``` ```
* **Alt Linux** * **Alt Linux**
...@@ -181,7 +151,7 @@ sudo apt-get update ...@@ -181,7 +151,7 @@ sudo apt-get update
sudo apt-get dist-upgrade -y sudo apt-get dist-upgrade -y
sudo apt-get install bubblewrap cabextract curl gamemode icoutils i586-libvulkan1 libvulkan1 steam vulkan-tools wget zenity zstd sudo apt-get install bubblewrap cabextract curl icoutils i586-libvulkan1 libvulkan1 vulkan-tools zstd
``` ```
* **ROSA DESKTOP FRESH R12** * **ROSA DESKTOP FRESH R12**
...@@ -191,19 +161,19 @@ sudo dnf update ...@@ -191,19 +161,19 @@ sudo dnf update
sudo dnf upgrade --refresh sudo dnf upgrade --refresh
sudo dnf install sysvinit-tools curl libcurl4 icoutils wget zenity bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl bc libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686 sudo dnf install sysvinit-tools curl libcurl4 bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
``` ```
* **RED OS** * **RED OS**
```sh ```sh
sudo -E dnf install curl icoutils libcurl wget zenity bubblewrap zstd cabextract tar goverlay openssl steam sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverlay openssl steam
``` ```
* **Solus 4.x** * **Solus 4.x**
```sh ```sh
sudo eopkg it curl file zenity bubblewrap curl icoutils tar wget zenity zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl vulkan vulkan-32bit mesalib-32bit samba
``` ```
## Контакты ## Контакты
......
<div align="center"> <div align="center">
<img src="https://raw.githubusercontent.com/Castro-Fidel/PortProton_PKGBUILD/main/portproton.svg" width="64"> <img src="https://raw.githubusercontent.com/Castro-Fidel/PortWINE/data_from_portwine/img/gui/port_proton.svg" width="64">
<h1 align="center">PortProton</h1> <h1 align="center">PortProton</h1>
<p align="center">Project designed to make it easy and convenient to run Windows games on Linux for both beginners and advanced users. <p align="center">Project designed to make it easy and convenient to run Windows games on Linux for both beginners and advanced users.
The project strives to make launching games (and other software) as simple as possible, but at the same time provides flexible settings for advanced users.</p> The project strives to make launching games (and other software) as simple as possible, but at the same time provides flexible settings for advanced users.</p>
...@@ -60,8 +60,8 @@ exit ...@@ -60,8 +60,8 @@ exit
sudo urpmi portproton sudo urpmi portproton
``` ```
* **Ubuntu 20.04** (Kubuntu, Xubuntu, Lubuntu, etc.), **Linux Mint 20.x** : * **Ubuntu 24.04**, **Debian 12**, **Linux Mint 21.x** **Deepin** :
[portproton_1.0-2_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.0-2_amd64/portproton_1.0-2_amd64.deb) [portproton_1.4-1_amd64.deb](https://github.com/Castro-Fidel/PortProton_dpkg/releases/download/portproton_1.4-1_amd64/portproton_1.4-1_amd64.deb)
* **Arch Linux** and derivatives (Manjaro, Garuda, etc.) : * **Arch Linux** and derivatives (Manjaro, Garuda, etc.) :
[AUR](https://aur.archlinux.org/packages/portproton) [AUR](https://aur.archlinux.org/packages/portproton)
...@@ -69,7 +69,7 @@ sudo urpmi portproton ...@@ -69,7 +69,7 @@ sudo urpmi portproton
* **OpenSuse**: * **OpenSuse**:
[OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton) [OBS](https://software.opensuse.org/download/package?package=portproton&project=home%3ABoria138%3APortProton)
* **Fedora 37+** and **Nobara**: * **Fedora 38+** and **Nobara**:
```sh ```sh
sudo dnf copr enable boria138/portproton sudo dnf copr enable boria138/portproton
...@@ -82,22 +82,8 @@ sudo dnf install portproton ...@@ -82,22 +82,8 @@ sudo dnf install portproton
**ATTENTION** : with the universal method of installing PortProton, dependencies must be installed manually! **ATTENTION** : with the universal method of installing PortProton, dependencies must be installed manually!
Normal installation:
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0
```
Silent installation (ENG):
```sh ```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -eng wget -c "https://github.com/Castro-Fidel/PortProton_ALT/raw/main/portproton" && sh PortProton_Installer
```
Silent installation (RUS):
```sh
wget -c "https://github.com/Castro-Fidel/PortWINE/raw/master/portwine_install_script/PortProton_1.0" && sh PortProton_1.0 -rus
``` ```
## Dependencies ## Dependencies
...@@ -117,7 +103,7 @@ sudo apt update ...@@ -117,7 +103,7 @@ sudo apt update
sudo apt upgrade sudo apt upgrade
sudo apt install curl file libc6 libnss3 policykit-1 xz-utils zenity bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 wget zenity zstd cabextract xdg-utils openssl bc libgl1-mesa-glx libgl1-mesa-glx:i386 sudo apt install curl file libc6 libnss3 policykit-1 xz-utils bubblewrap curl icoutils tar libvulkan1 libvulkan1:i386 zstd cabextract xdg-utils openssl libgl libgl1:i386
``` ```
* **Arch Linux / Manjaro** * **Arch Linux / Manjaro**
...@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist ...@@ -133,7 +119,7 @@ Include = /etc/pacman.d/mirrorlist
``` ```
```sh ```sh
sudo pacman -Syu bash icoutils wget bubblewrap zstd cabextract bc tar openssl gamemode desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font zenity gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-gamemode lib32-openssl sudo pacman -Syu bash bubblewrap zstd cabextract tar openssl desktop-file-utils curl dbus freetype2 gdk-pixbuf2 ttf-font gzip nss xorg-xrandr vulkan-driver vulkan-icd-loader lsof lib32-freetype2 lib32-libgl lib32-gcc-libs lib32-libx11 lib32-libxss lib32-alsa-plugins lib32-libgpg-error lib32-nss lib32-vulkan-driver lib32-vulkan-icd-loader lib32-openssl
``` ```
If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidia-utils** package is installed If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidia-utils** package is installed
...@@ -142,26 +128,10 @@ If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidi ...@@ -142,26 +128,10 @@ If you have a video card from **NVIDIA** , be sure to check if the **lib32-nvidi
sudo pacman -Syu lib32-nvidia-utils sudo pacman -Syu lib32-nvidia-utils
``` ```
* **Debian/Deepin**
```sh
sudo apt install software-properties-common -y
sudo apt-add-repository non-free
sudo dpkg --add-architecture i386
sudo apt update
sudo apt upgrade
sudo apt install bubblewrap curl gamemode icoutils tar wget zenity zstd libvulkan1 libvulkan1:i386 steam cabextract
```
* **openSUSE** * **openSUSE**
```sh ```sh
sudo zypper install curl icoutils wget zenity bubblewrap zstd cabextract tar steam zenity zenity-lang gamemoded libgamemode0 libgamemodeauto0 sudo zypper install curl bubblewrap zstd cabextract tar steam
``` ```
* **Fedora** * **Fedora**
...@@ -171,7 +141,7 @@ sudo dnf update ...@@ -171,7 +141,7 @@ sudo dnf update
sudo dnf upgrade --refresh sudo dnf upgrade --refresh
sudo dnf install curl gamemode gamemode.i686 icoutils wget zenity bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick sudo dnf install curl bubblewrap zstd cabextract tar openssl mesa-dri-drivers.i686 mesa-vulkan-drivers mesa-vulkan-drivers.i686 vulkan-loader vulkan-loader.i686 nss.i686 alsa-lib.i686 mesa-libGL.i686 mesa-libEGL.i686 wmctrl ImageMagick
``` ```
* **Alt Linux** * **Alt Linux**
...@@ -181,7 +151,7 @@ su - ...@@ -181,7 +151,7 @@ su -
apt-get update && apt-get dist-upgrade -y apt-get update && apt-get dist-upgrade -y
apt-get install bubblewrap cabextract wget zstd gawk tar xz pciutils bc coreutils file curl icoutils wmctrl zenity xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL gamemode fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast} apt-get install bubblewrap cabextract zstd gawk tar xz pciutils coreutils file curl icoutils wmctrl xdg-utils desktop-file-utils libvulkan1 vulkan-tools libd3d libGL fontconfig xrdb libcurl libgio libnm libnsl1 libnss glibc-nss glibc-pthread i586-{libvulkan1,libd3d,libGL,libgio,libnm,libnsl1,libnss,glibc-nss,glibc-pthread,libunwind,xorg-dri-swrast}
exit exit
``` ```
...@@ -193,19 +163,19 @@ sudo dnf update ...@@ -193,19 +163,19 @@ sudo dnf update
sudo dnf upgrade --refresh sudo dnf upgrade --refresh
sudo dnf install sysvinit-tools curl libcurl4 icoutils wget zenity bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl bc libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686 sudo dnf install sysvinit-tools curl libcurl4 bubblewrap zstd cabextract tar libvulkan1 lib64vulkan1 vulkan.x86_64 vulkan.i686 vkd3d.x86_64 vkd3d.i686 coreutils file libc6 libnss3 xz bubblewrap xdg-utils openssl libgl1 lib64freetype2 libfreetype2 lib64txc-dxtn libtxc-dxtn lib64opencl1 libopencl1 libdrm2 libdrm2.i686 mesa.i686
``` ```
* **RED OS** * **RED OS**
```sh ```sh
sudo -E dnf install curl icoutils libcurl wget zenity bubblewrap zstd cabextract tar goverlay openssl steam sudo -E dnf install curl icoutils libcurl bubblewrap zstd cabextract tar goverlay openssl steam
``` ```
* **Solus 4.x** * **Solus 4.x**
```sh ```sh
sudo eopkg it curl file zenity bubblewrap curl icoutils tar wget zenity zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba sudo eopkg it curl file bubblewrap curl icoutils tar zstd cabextract xdg-utils openssl bc vulkan vulkan-32bit mesalib-32bit samba
``` ```
## Contacts ## Contacts
......
...@@ -2,6 +2,18 @@ You can help us in the development of the project on the website: https://linux- ...@@ -2,6 +2,18 @@ You can help us in the development of the project on the website: https://linux-
---------------------------------------- ----------------------------------------
Changelog: Changelog:
###Scripts version 2252### Date: 09.02.2024 / Download update size: 33 megabytes
* GUI has been completely translated from zenity to yad
* download from wget has been switched to curl (improved download stability with some providers)
* improved graphics in games are enabled by default (turned off by pressing: "HOME")
* Cyrillic check in paths with a warning has been added
* fixed the work of zink in x11 in new versions of mesa (thanks Htylol)
* improved the work of FAKE_DLSS (CyberFSR project)
* added a setting for enabling FAKE_DLSS_3 (experimental dlssg-to-fsr3 project)
* updated the plugins package to version v13
* updated GALLIUM_NINE version to 0.9
* updated NVAPI version to 0.6.4-20
###Scripts version 2251### Date: 02.02.2024 / Download update size: 8 megabytes ###Scripts version 2251### Date: 02.02.2024 / Download update size: 8 megabytes
* HOTFIX - fixed automatic closing of EAapp after its installation * HOTFIX - fixed automatic closing of EAapp after its installation
......
...@@ -2,8 +2,17 @@ ...@@ -2,8 +2,17 @@
----------------------------------------- -----------------------------------------
История изменений: История изменений:
###Scripts version 2252### Дата: 09.02.2024 / Размер скачиваемого обновления: 33 мегабайт
* интерфейс полностью переведен с zenity на yad
* скачивание с wget переведено на curl (для улучшения стабильности скачивания с некоторыми провайдерами)
* включено по умолчанию улучшение графики в играх (выключение по клавише: "HOME")
* добалена проверка на кирилицу в путях с предупреждением * добалена проверка на кирилицу в путях с предупреждением
* исправлена работа zink в x11 в новых версиях mesa (спасибо Htylol) * исправлена работа zink в x11 в новых версиях mesa (спасибо Htylol)
* улучшена работа FAKE_DLSS (проект CyberFSR)
* добавлена настройка включения FAKE_DLSS_3 (эксперементальный проект dlssg-to-fsr3)
* обновлен пакет plugins до версии v13
* обновлена версия GALLIUM_NINE до 0.9
* обновлена версия NVAPI до 0.6.4-20
###Scripts version 2251### Дата: 02.02.2024 / Размер скачиваемого обновления: 8 мегабайт ###Scripts version 2251### Дата: 02.02.2024 / Размер скачиваемого обновления: 8 мегабайт
* HOTFIX - исправлено автоматическое закрытие EAapp после его установки на некоторых системах * HOTFIX - исправлено автоматическое закрытие EAapp после его установки на некоторых системах
......
...@@ -33,22 +33,17 @@ d3d9.maxFrameRate = 240 ...@@ -33,22 +33,17 @@ d3d9.maxFrameRate = 240
# #
# Supported values: Any four-digit hex number. # Supported values: Any four-digit hex number.
dxgi.customDeviceId = 222F # dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"
dxgi.customVendorId = 10de # dxgi.customDeviceId = 2684
# dxgi.customVendorId = 10de
# d3d9.customDeviceId = 222F # dxgi.hideAmdGpu = True
# dxgi.hideNvidiaGpu = False
# d3d9.customDeviceDesc = "NVIDIA GeForce RTX 4090"
# d3d9.customDeviceId = 2684
# d3d9.customVendorId = 10de # d3d9.customVendorId = 10de
# Override the reported device description
#
# Supported values: Any string.
# dxgi.customDeviceDesc = ""
# d3d9.customDeviceDesc = ""
# Override maximum amount of device memory and shared system memory # Override maximum amount of device memory and shared system memory
# reported to the application. This may fix texture streaming issues # reported to the application. This may fix texture streaming issues
# in games that do not support cards with large amounts of VRAM. # in games that do not support cards with large amounts of VRAM.
......
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 600 600"><defs><linearGradient id="a" x1="300" x2="300" y1="44" y2="556" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#46bac6"/><stop offset="1" stop-color="#1497a5"/></linearGradient></defs><circle cx="300" cy="300" r="256" style="fill:url(#a);stroke-width:0"/><image xlink:href="data:image/png;base64,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" width="404" height="360" style="opacity:.6" transform="translate(98 136)"/><path d="M174.4 365.86c-4.47-1.89-8.88-3.65-13.2-5.6-13.72-6.21-26.64-13.69-37.48-24.32-10.41-10.21-17.06-22.11-16.42-37.26.49-11.67 5.46-21.3 13.08-29.76 12.22-13.58 27.75-22.27 44.19-29.56 2.08-.92 4.19-1.77 6.29-2.66-1.23-6.43-2.79-12.64-3.51-18.95-.48-4.22-1.96-6.73-5.69-9.11-12.04-7.69-16.9-22.27-12.68-35.9 4.14-13.37 16.43-22.29 30.67-22.42 1.27-.01 2.81-.53 3.77-1.35 10.12-8.65 21.95-11.02 34.79-9.63 20.54 2.22 38.49 11.12 55.49 22.14 8.63 5.59 16.83 11.83 25.39 17.9 5.57-4.13 11.36-8.63 17.36-12.83 14.86-10.4 30.53-19.28 48.1-24.26 11.59-3.29 23.37-4.97 35.24-1.26 14.76 4.62 23.8 15.05 28.6 29.29 5.33 15.8 4.54 31.98 1.99 48.16-.89 5.64-2.04 11.23-3 16.49 9.17 4.58 18.47 8.76 27.31 13.75 12.67 7.14 24.03 15.99 31.55 28.82 8.79 15 8.58 30.15-.13 45.06-1.58 2.7-1.95 4.88-1.29 7.87 2.88 13.17-2.49 26.17-13.5 33.42-11.08 7.31-24.89 7.01-36.1-.64-.89-.6-2.43-.74-3.51-.47-2.02.51-3.88 1.59-5.89 2.21-1.85.57-2.24 1.35-1.71 3.31 3.07 11.34 5.41 22.84 6.08 34.6.76 13.44.39 26.78-5.21 39.35-8.66 19.43-26.22 29.06-47.48 26.5-21.02-2.53-39.25-11.77-56.63-23.04-6.87-4.46-13.35-9.53-19.93-14.43-1.44-1.07-2.35-1.26-3.92-.06-6.08 4.62-12.42 8.9-18.41 13.63-1.31 1.03-2.01 3.34-2.24 5.15-.83 6.52-3.1 12.35-7.24 17.47-11.21 13.84-32.26 15.64-45.47 3.73-1.88-1.7-3.67-2.32-6.12-2.16-7.71.51-15.35-.22-22.38-3.54-12.22-5.77-20.15-15.49-24.21-28.28-3.69-11.63-4.14-23.57-3.12-35.69.98-11.63 3.23-22.97 6.25-34.2.12-.44.2-.9.32-1.47Zm124.76-146.57c-10.98.57-22.03 1.08-33.07 1.78-1.42.09-3.16.86-4.1 1.9-17.77 19.7-33.15 41.15-46.75 63.91-1.02 1.7-1.08 3.06-.12 4.73 5 8.67 9.78 17.47 14.96 26.04 9.15 15.13 19.59 29.37 30.81 43.02.93 1.13 2.52 2.32 3.87 2.4 10.77.62 21.55 1.34 32.32 1.33 11.25 0 22.5-.75 33.75-1.27 2.54-.12 4.74-.65 6.65-3.02 17.35-21.43 32.5-44.28 45.34-68.68.88-1.67.82-2.92-.2-4.46-1.84-2.78-3.46-5.7-5.23-8.54-12.11-19.51-25.82-37.84-41.08-55-.93-1.05-2.36-2.25-3.63-2.33-11.14-.74-22.29-1.23-33.55-1.81Zm108.1 9.34c1.1-8.33 2.5-16.3 3.14-24.33.85-10.61.25-21.14-3.53-31.31-4.25-11.4-12.12-18.43-24.16-20.7-10.47-1.97-20.53-.02-30.39 3.3-16.09 5.42-30.36 14.21-43.92 24.23-1.58 1.17-3.11 2.4-5.05 3.91.98.77 1.69 1.25 2.29 1.83 9.5 9.25 19.07 18.43 28.41 27.84 2.04 2.05 4.09 3.19 6.86 3.37 2.66.17 5.34.31 7.96.73 12.4 1.96 24.83 3.85 37.18 6.11 6.81 1.24 13.49 3.17 21.21 5.02Zm9.41 139.76c-.8.21-1.24.31-1.68.45-21.94 7.08-44.41 11.63-67.29 14.28-.98.11-2.04.9-2.76 1.66-6 6.39-11.88 12.9-17.89 19.28-3.45 3.66-7.08 7.15-10.71 10.81.45.4.78.73 1.14 1.01 9.76 7.38 20.02 14 31.1 19.22 11.73 5.53 23.84 9.67 37.09 9.47 15.65-.23 27.28-8.98 31.71-24.04 5.09-17.33 2.9-34.54-.72-52.14ZM200.8 158.57c18.93 18.77 10.07 47.65-12.75 54.59 1.02 5.41 2.04 10.86 3.07 16.31.69-.04.98 0 1.25-.09 20.48-5.92 41.3-10.02 62.53-12.08 3.05-.3 5.88-.69 8.44-3.32 9.3-9.58 19-18.78 28.55-28.12.78-.76 1.58-1.5 2.48-2.34-12.61-9.79-25.57-18.32-39.91-24.55-11.03-4.79-22.44-8.19-34.67-7.34-6.86.48-13.3 2.37-18.98 6.93Zm-28.64 84.71c-12.77 4.9-30.13 15.8-39.01 27.75-4.75 6.39-8.19 13.37-8.11 21.55.08 8.28 3.52 15.38 8.59 21.68 12.4 15.43 29.5 23.71 47.33 31.08.35-.72.61-1.21.84-1.72 5.38-12.06 10.8-24.1 16.08-36.2.44-1 .22-2.59-.26-3.63-3.51-7.52-7.52-14.81-10.69-22.47-5.17-12.49-9.82-25.2-14.77-38.04Zm9.2 125.41c-.14.42-.55 1.2-.64 2.02-1.1 9.65-2.69 19.29-3.07 28.97-.44 11.29 1.72 22.21 8.04 31.97 5.15 7.95 17.99 14.05 27.05 12.58 1.91-12.91 8.56-22.4 21.01-26.93 12.6-4.59 23.81-1.34 33.83 7.59 4.67-3.27 9.33-6.53 14.07-9.85-.39-.58-.55-.93-.8-1.19-9.35-9.8-18.69-19.6-28.11-29.33-.77-.79-2.08-1.28-3.21-1.47-11.34-1.94-22.78-3.4-34.03-5.77-11.43-2.4-22.67-5.67-34.14-8.6Zm243.71-126c-6.29 21.69-14.98 42.08-25.26 61.84-.41.78-.13 2.18.29 3.08 3.46 7.54 7.1 14.99 10.52 22.55 2.11 4.65 3.93 9.44 5.87 14.13q5.56-1.5 5.5-6.69c-.25-22.29 21.87-37.89 42.76-30.18.68.25 1.41.37 2.08.54 5.22-8.9 6.57-17.94 2.57-27.51-2.39-5.71-5.83-10.71-10.12-15.14-9.65-9.97-21.43-16.73-34.21-22.62Zm-82.79-20.27c16.57 19.06 31.1 39.36 44.31 60.87 5.71-9.5 17.89-41.95 18.17-48.13-8.5-4.34-53.84-13.68-62.47-12.75Zm-131.45 60.95c7.34-10.83 14.09-21.35 21.42-31.46 7.31-10.07 15.2-19.72 23.16-29.97-5.66.83-10.91 1.61-16.16 2.35-14.92 2.11-29.54 5.54-43.95 9.95-2.36.72-2.56 1.75-1.89 3.71 2.76 8.02 5.25 16.14 8.28 24.05 2.74 7.18 6.04 14.15 9.15 21.36Zm20.81 75.52c-10.04-15.56-19.9-30.83-30.29-46.94-4.97 12.04-9.76 23.63-14.64 35.44 15.12 5.35 29.82 8.9 44.93 11.5Zm134.95-.51c3.72-.76 7.36-1.3 10.89-2.26 10.36-2.82 20.67-5.81 31.01-8.7 1.78-.5 1.88-1.46 1.27-2.99-1.11-2.73-1.98-5.56-3.12-8.28-3.37-8.05-6.82-16.07-10.25-24.1-9.99 15.53-19.75 30.72-29.79 46.33Zm-38.28-143.11c.21-.26.42-.51.64-.77-9.62-8.75-19.22-17.53-28.92-26.19-.46-.41-2.16-.15-2.74.39-9.04 8.34-17.98 16.77-26.93 25.2-.43.4-.67.99-.92 1.38h58.88Zm-45.37 170.37c5.05 4.83 9.56 9.04 13.95 13.37 1.52 1.5 2.56 1.38 4-.09 2.54-2.58 5.28-4.96 7.9-7.46 1.86-1.77 3.68-3.6 5.94-5.83h-31.79Z" style="fill:#fff;stroke-width:0"/><path d="M299.14 234.92c31.55.2 56.88 25.89 56.62 57.42-.25 31.33-25.96 56.55-57.43 56.35-31.37-.2-56.51-25.99-56.29-57.75.21-30.79 26.13-56.22 57.1-56.02Z" style="fill:#fff;stroke-width:0"/></svg>
\ No newline at end of file
data_from_portwine/img/w.png

57.1 KB | W: | H:

data_from_portwine/img/w.png

62.7 KB | W: | H:

data_from_portwine/img/w.png
data_from_portwine/img/w.png
data_from_portwine/img/w.png
data_from_portwine/img/w.png
  • 2-up
  • Swipe
  • Onion skin
xterm*faceSize: 12
xterm*vt100*geometry: 120x20
xterm*saveLines: 16384
xterm*loginShell: true
xterm*charClass: 33:48,35:48,37:48,43:48,45-47:48,64:48,95:48,126:48
xterm*termName: xterm-color
xterm*eightBitInput: false
!BLK Cursor
#define _color0 #000d18
#define _color8 #000d18
!RED Tag
#define _color1 #e89393
#define _color9 #e89393
!GRN SpecialKey
#define _color2 #9ece13
#define _color10 #9ece13
!YEL Keyword
#define _color3 #f0dfaf
#define _color11 #f0dfaf
!BLU Number
#define _color4 #8cd0d3
#define _color12 #8cd0d3
!MAG Precondit
#define _color5 #c0bed1
#define _color13 #c0bed1
!CYN Float
#define _color6 #dfaf8f
#define _color14 #dfaf8f
!WHT Search
#define _color7 #efefef
#define _color15 #efefef
!FMT Include, StatusLine, ErrorMsg
#define _colorBD #ffcfaf
#define _colorUL #ccdc90
#define _colorIT #80d4aa
!TXT Normal, Normal, Cursor
#define _foreground #dcdccc
#define _background #1f1f1f
#define _cursorColor #8faf9f
URxvt*color0 : _color0
URxvt*color1 : _color1
URxvt*color2 : _color2
URxvt*color3 : _color3
URxvt*color4 : _color4
URxvt*color5 : _color5
URxvt*color6 : _color6
URxvt*color7 : _color7
URxvt*color8 : _color8
URxvt*color9 : _color9
URxvt*color10 : _color10
URxvt*color11 : _color11
URxvt*color12 : _color12
URxvt*color13 : _color13
URxvt*color14 : _color14
URxvt*color15 : _color15
URxvt*colorBD : _colorBD
URxvt*colorIT : _colorIT
URxvt*colorUL : _colorUL
URxvt*foreground : _foreground
URxvt*background : _background
URxvt*cursorColor : _cursorColor
XTerm*color0 : _color0
XTerm*color1 : _color1
XTerm*color2 : _color2
XTerm*color3 : _color3
XTerm*color4 : _color4
XTerm*color5 : _color5
XTerm*color6 : _color6
XTerm*color7 : _color7
XTerm*color8 : _color8
XTerm*color9 : _color9
XTerm*color10 : _color10
XTerm*color11 : _color11
XTerm*color12 : _color12
XTerm*color13 : _color13
XTerm*color14 : _color14
XTerm*color15 : _color15
XTerm*colorBD : _colorBD
XTerm*colorIT : _colorIT
XTerm*colorUL : _colorUL
XTerm*foreground : _foreground
XTerm*background : _background
XTerm*cursorColor : _cursorColor
...@@ -6,7 +6,7 @@ then ...@@ -6,7 +6,7 @@ then
KEY_CREDITS=$RANDOM KEY_CREDITS=$RANDOM
"${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \ "${pw_yad_v12_3}" --plug="${KEY_CREDITS}" --tabnum=1 --show-uri \
--image-path="$PW_GUI_ICON_PATH" --image="port_proton" \ --image-path="$PW_GUI_ICON_PATH" --image="port_proton" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--text-align=center --scroll --text="PortProton v. ${install_ver} --text-align=center --scroll --text="PortProton v. ${install_ver}
scripts v. ${scripts_install_ver} scripts v. ${scripts_install_ver}
...@@ -357,10 +357,9 @@ Yandex кошелек: 410012267513818 ...@@ -357,10 +357,9 @@ Yandex кошелек: 410012267513818
WINE-PROTON: https://github.com/ValveSoftware/Proton WINE-PROTON: https://github.com/ValveSoftware/Proton
WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/
Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad YAD: https://github.com/v1cont/yad" 2>/dev/null &
ZENITY: https://github.com/GNOME/zenity" 2>/dev/null &
"${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ "${pw_yad_v12_3}" --title "О НАС" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \ --notebook --no-buttons --tab-pos=bottom \
--tab="О PORTPROTON" --tab="АВТОРЫ" --tab="ЛИЦЕНЗИЯ" --tab="СПОНСОРЫ" --tab="ПРИСОЕДИНИТЬСЯ" \ --tab="О PORTPROTON" --tab="АВТОРЫ" --tab="ЛИЦЕНЗИЯ" --tab="СПОНСОРЫ" --tab="ПРИСОЕДИНИТЬСЯ" \
--tab="БИБЛИОТЕКИ" --tab="БИБЛИОТЕКИ"
...@@ -725,11 +724,10 @@ Yandex wallet: 410012267513818 ...@@ -725,11 +724,10 @@ Yandex wallet: 410012267513818
WINE-PROTON: https://github.com/ValveSoftware/Proton WINE-PROTON: https://github.com/ValveSoftware/Proton
WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/ WINE-PROTON-GE: https://github.com/GloriousEggroll/proton-ge-custom/
Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds Kron4ek/Wine: https://github.com/Kron4ek/Wine-Builds
YAD: https://github.com/v1cont/yad YAD: https://github.com/v1cont/yad" 2>/dev/null &
ZENITY: https://github.com/GNOME/zenity" 2>/dev/null &
"${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ "${pw_yad_v12_3}" --title "ABOUT US" --key="${KEY_CREDITS}" ---window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--notebook --no-buttons --tab-pos=bottom \ --notebook --no-buttons --tab-pos=bottom \
--tab="ABOUT PORTPROTON" --tab="AUTORS" --tab="LICENSE" --tab="SPONSORS" --tab="JOIN" \ --tab="ABOUT PORTPROTON" --tab="AUTORS" --tab="LICENSE" --tab="SPONSORS" --tab="JOIN" \
--tab="THIRD PARTY LIBRARIES" --tab="THIRD PARTY LIBRARIES"
......
...@@ -11,6 +11,11 @@ print_error () { ...@@ -11,6 +11,11 @@ print_error () {
} }
export -f print_error export -f print_error
fatal () {
print_error "$@"
exit 1
}
print_warning () { print_warning () {
printf "\E[33m%s Warning: $@ %s\e[0m\n" printf "\E[33m%s Warning: $@ %s\e[0m\n"
} }
...@@ -119,10 +124,10 @@ try_download_game () { ...@@ -119,10 +124,10 @@ try_download_game () {
PW_DOWNLOAD_FILE_NAME="$(basename $1)" PW_DOWNLOAD_FILE_NAME="$(basename $1)"
set -o pipefail set -o pipefail
curl -C - -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \ curl -C - -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \ "${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME}." print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME}."
return 1 return 1
...@@ -136,18 +141,18 @@ try_download () { ...@@ -136,18 +141,18 @@ try_download () {
[[ ! -f "${pw_yad_v12_3}" ]] && local pw_yad_v12_3="yad" [[ ! -f "${pw_yad_v12_3}" ]] && local pw_yad_v12_3="yad"
set -o pipefail set -o pipefail
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \ curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \ "${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from GitHub." print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from GitHub."
print_info "Try download ${PW_DOWNLOAD_FILE_NAME} from FTP" print_info "Try download ${PW_DOWNLOAD_FILE_NAME} from FTP"
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -L "ftp://171.22.215.18/archives/${PW_DOWNLOAD_FILE_NAME}" -o "$2" 2>&1 | \ curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -L "ftp://171.22.215.18/archives/${PW_DOWNLOAD_FILE_NAME}" -o "$2" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \ "${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from FTP." print_error "Failed to download ${PW_DOWNLOAD_FILE_NAME} from FTP."
return 1 return 1
...@@ -161,10 +166,10 @@ try_download_to_path () { ...@@ -161,10 +166,10 @@ try_download_to_path () {
PW_DOWNLOAD_FILE_NAME="$(basename $1)" PW_DOWNLOAD_FILE_NAME="$(basename $1)"
set -o pipefail set -o pipefail
curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2/$PW_DOWNLOAD_FILE_NAME" 2>&1 | \ curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' -L "$1" -o "$2/$PW_DOWNLOAD_FILE_NAME" 2>&1 | \
tr '\r' '\n' | sed -u -e 's/#//g' -e 's/ //g' -e 's/\.[[:digit:]]%//' | \ tr '\r' '\n' | sed -ur 's|[# ]+||g;s|.*=.*||g;s|.*|#Downloading at &\n&|g' | \
"${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \ "${pw_yad_v12_3}" --progress --percentage=0 --text="Download ${PW_DOWNLOAD_FILE_NAME}" --auto-close --no-escape \
--auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \ --auto-kill --center --text-align="center" --fixed --no-buttons --title "PortProton" --width=500 --height=90 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --borders=15
if [ "${PIPESTATUS[0]}" != 0 ] ; then if [ "${PIPESTATUS[0]}" != 0 ] ; then
print_error "Failed to download $1." print_error "Failed to download $1."
return 1 return 1
...@@ -231,6 +236,15 @@ var_ld_library_path_update() { ...@@ -231,6 +236,15 @@ var_ld_library_path_update() {
return 0 return 0
} }
pw_notify_send () {
if command -v notify-send &>/dev/null ; then
if [[ -f "$PW_GUI_ICON_PATH/portproton.svg" ]]
then notify-send -a PortProton -i "$PW_GUI_ICON_PATH/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
else notify-send -a PortProton $@ "${PW_NOTIFY_TEXT}"
fi
fi
}
unpack_tar_zst () { unpack_tar_zst () {
set -o pipefail set -o pipefail
unset PW_ZSTD_PORT unset PW_ZSTD_PORT
...@@ -240,7 +254,7 @@ unpack_tar_zst () { ...@@ -240,7 +254,7 @@ unpack_tar_zst () {
pw_stop_progress_bar_cover_block pw_stop_progress_bar_cover_block
[ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0 [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
else else
env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib" tar -I "${PW_WINELIB}/portable/bin/zstd" -xhvf "$1" -C "$2" env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib" tar -I "${PW_PLUGINS_PATH}/portable/bin/zstd" -xhvf "$1" -C "$2"
pw_stop_progress_bar_cover_block pw_stop_progress_bar_cover_block
[ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0 [ "${PIPESTATUS[0]}" != 0 ] && print_error "File $1 unpacking error." && return 1 || return 0
fi fi
...@@ -445,6 +459,22 @@ init_wine_ver () { ...@@ -445,6 +459,22 @@ init_wine_ver () {
return 0 return 0
} }
pw_use_command () {
if command -v "$1" $>/dev/null ; then
$@
else
if [[ -f "${PW_PLUGINS_PATH}/portable/bin/${1}" ]] ; then
if [ ! -z "$LD_LIBRARY_PATH" ]
then env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:$LD_LIBRARY_PATH" "${PW_PLUGINS_PATH}/portable/bin/"$@
else env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64" "${PW_PLUGINS_PATH}/portable/bin/"$@
fi
else
print_error "command $1 - not found"
exit 1
fi
fi
}
pw_init_runtime () { pw_init_runtime () {
if grep -q -E '(ROSA Fresh|RED OS)' "/etc/os-release" ; then if grep -q -E '(ROSA Fresh|RED OS)' "/etc/os-release" ; then
...@@ -454,15 +484,15 @@ pw_init_runtime () { ...@@ -454,15 +484,15 @@ pw_init_runtime () {
fi fi
PW_PV_OVERRIDES="/usr/lib/pressure-vessel/overrides/lib" PW_PV_OVERRIDES="/usr/lib/pressure-vessel/overrides/lib"
export PW_LD_LIBRARY_PATH="${WINEDIR}/lib64:${WINEDIR}/lib:${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib32:${PW_PV_OVERRIDES}/x86_64-linux-gnu/aliases:${PW_PV_OVERRIDES}/i386-linux-gnu/aliases" export PW_LD_LIBRARY_PATH="${WINEDIR}/lib64:${WINEDIR}/lib:${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32:${PW_PV_OVERRIDES}/x86_64-linux-gnu/aliases:${PW_PV_OVERRIDES}/i386-linux-gnu/aliases"
if [ ! -z ${PATH_TMP} ] if [ ! -z ${PATH_TMP} ]
then export PATH="${PATH_TMP}" then export PATH="${PATH_TMP}"
else export PATH_TMP="${PATH}" else export PATH_TMP="${PATH}"
fi fi
if [ ! -z "${PATH}" ] if [ ! -z "${PATH}" ]
then export PATH="${WINEDIR}/bin:${PATH}:${PW_WINELIB}/portable/bin" then export PATH="${WINEDIR}/bin:${PATH}:${PW_PLUGINS_PATH}/portable/bin"
else export PATH="${WINEDIR}/bin:${PW_WINELIB}/portable/bin" else export PATH="${WINEDIR}/bin:${PW_PLUGINS_PATH}/portable/bin"
fi fi
if [ "${PW_USE_GSTREAMER}" = 1 ] ; then if [ "${PW_USE_GSTREAMER}" = 1 ] ; then
...@@ -497,7 +527,7 @@ pw_init_runtime () { ...@@ -497,7 +527,7 @@ pw_init_runtime () {
unset PW_VK_LAYER_PATH unset PW_VK_LAYER_PATH
else else
export PRESSURE_VESSEL_IMPORT_VULKAN_LAYERS=0 export PRESSURE_VESSEL_IMPORT_VULKAN_LAYERS=0
export PW_VK_LAYER_PATH="${PW_WINELIB}/portable/share/vulkan/implicit_layer.d" export PW_VK_LAYER_PATH="${PW_PLUGINS_PATH}/portable/share/vulkan/implicit_layer.d"
fi fi
# export PRESSURE_VESSEL_GRAPHICS_PROVIDER="/" # export PRESSURE_VESSEL_GRAPHICS_PROVIDER="/"
...@@ -526,7 +556,7 @@ pw_init_runtime () { ...@@ -526,7 +556,7 @@ pw_init_runtime () {
done done
# drop portable: libssl 32-bit # drop portable: libssl 32-bit
try_remove_file "${PW_WINELIB}/portable/lib/lib32/libssl.so.1.1" try_remove_file "${PW_PLUGINS_PATH}/portable/lib/lib32/libssl.so.1.1"
print_info "RUNTIME is enabled" print_info "RUNTIME is enabled"
} }
...@@ -676,8 +706,8 @@ stop_portwine () { ...@@ -676,8 +706,8 @@ stop_portwine () {
export -f stop_portwine export -f stop_portwine
pw_download_libs () { pw_download_libs () {
if [[ ! -e "${PW_WINELIB}/portable/bin/yad" || ! -e "${PW_WINELIB}/portable/lib/p7zip/7z" \ if [[ ! -e "${PW_WINELIB}/runtime/files/bin/vkcube" ]] \
|| ! -e "${PW_WINELIB}/runtime/files/bin/vkcube" || -e "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ]] ; || [[ ! -f "${PW_WINELIB}/pressure-vessel/bin/pv-bwrap" ]]
then then
print_info "Download and install libraries..." print_info "Download and install libraries..."
if try_download "github.com/Castro-Fidel/PortWINE/releases/download/libs${PW_LIBS_VER}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then if try_download "github.com/Castro-Fidel/PortWINE/releases/download/libs${PW_LIBS_VER}/libs${PW_LIBS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" ; then
...@@ -687,12 +717,13 @@ pw_download_libs () { ...@@ -687,12 +717,13 @@ pw_download_libs () {
for RM_LIBS in `ls ${PORT_WINE_TMP_PATH} | grep libs_v | grep -v libs${PW_LIBS_VER}` for RM_LIBS in `ls ${PORT_WINE_TMP_PATH} | grep libs_v | grep -v libs${PW_LIBS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}" do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_LIBS}"
done done
# TODO: drop clear prefix, and add update prefix from new libs
pw_clear_pfx pw_clear_pfx
fi fi
else else
try_remove_dir "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}" try_remove_dir "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz" try_remove_file "${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}.tar.xz"
if zenity_error_download if yad_error_download
then pw_download_libs then pw_download_libs
else else
export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))" export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))"
...@@ -700,7 +731,7 @@ pw_download_libs () { ...@@ -700,7 +731,7 @@ pw_download_libs () {
fi fi
fi fi
else else
if zenity_error_download if yad_error_download
then pw_download_libs then pw_download_libs
else else
export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))" export PW_LIBS_VER="$(echo _v$(($(echo $PW_LIBS_VER | sed 's/_v//') - 1)))"
...@@ -708,11 +739,7 @@ pw_download_libs () { ...@@ -708,11 +739,7 @@ pw_download_libs () {
fi fi
fi fi
fi fi
export pw_yad="${PW_WINELIB}/portable/bin/yad" try_remove_dir "${PW_WINELIB}/portable"
export pw_yad_v12_3="${PW_WINELIB}/portable/bin/yad_v12_3"
export pw_zstd="${PW_WINELIB}/portable/bin/zstd"
export pw_7z="${PW_WINELIB}/portable/lib/p7zip/7z"
export PW_XTERM="${PW_WINELIB}/portable/bin/xterm -geometry 159x37 -e"
return 0 return 0
} }
...@@ -738,10 +765,10 @@ pw_check_and_download_wine () { ...@@ -738,10 +765,10 @@ pw_check_and_download_wine () {
try_remove_dir "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}" try_remove_dir "${PORT_WINE_PATH}/data/tmp/${PW_WINE_USE}"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}" try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_USE}"
zenity_error_download && pw_check_and_download_wine || exit 1 yad_error_download && pw_check_and_download_wine || exit 1
fi fi
else else
zenity_error_download && pw_check_and_download_wine || exit 1 yad_error_download && pw_check_and_download_wine || exit 1
fi fi
fi fi
return 0 return 0
...@@ -759,7 +786,7 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -759,7 +786,7 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz" try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.xz"
try_remove_dir dxvk-${DXVK_VAR_VER} try_remove_dir dxvk-${DXVK_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
elif try_download "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VAR_VER}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" ; then elif try_download "https://github.com/doitsujin/dxvk/releases/download/v${DXVK_VAR_VER}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" ; then
if unpack_tar_gz "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}" ; then if unpack_tar_gz "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" "${PW_VULKAN_DIR}" ; then
...@@ -768,10 +795,10 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -768,10 +795,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz" try_remove_file "${PW_VULKAN_DIR}/dxvk-${DXVK_VAR_VER}.tar.gz"
try_remove_dir dxvk-${DXVK_VAR_VER} try_remove_dir dxvk-${DXVK_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
else else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
fi fi
done done
...@@ -787,7 +814,7 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -787,7 +814,7 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz" try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.xz"
try_remove_dir vkd3d-proton-${VKD3D_VAR_VER} try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
elif try_download "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${VKD3D_VAR_VER}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" ; then elif try_download "https://github.com/HansKristian-Work/vkd3d-proton/releases/download/v${VKD3D_VAR_VER}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" ; then
if unpack_tar_zst "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}" ; then if unpack_tar_zst "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" "${PW_VULKAN_DIR}" ; then
...@@ -796,10 +823,10 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -796,10 +823,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst" try_remove_file "${PW_VULKAN_DIR}/vkd3d-proton-${VKD3D_VAR_VER}.tar.zst"
try_remove_dir vkd3d-proton-${VKD3D_VAR_VER} try_remove_dir vkd3d-proton-${VKD3D_VAR_VER}
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
else else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
fi fi
done done
...@@ -814,10 +841,10 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -814,10 +841,10 @@ pw_check_and_download_dxvk_and_vkd3d () {
try_remove_file "${PW_VULKAN_DIR}/d8vk-${D8VK_VER}.tar.xz" try_remove_file "${PW_VULKAN_DIR}/d8vk-${D8VK_VER}.tar.xz"
try_remove_dir "d8vk-${D8VK_VER}" try_remove_dir "d8vk-${D8VK_VER}"
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
else else
zenity_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1 yad_error_download && pw_check_and_download_dxvk_and_vkd3d || exit 1
fi fi
fi fi
...@@ -825,20 +852,31 @@ pw_check_and_download_dxvk_and_vkd3d () { ...@@ -825,20 +852,31 @@ pw_check_and_download_dxvk_and_vkd3d () {
} }
pw_check_and_download_plugins () { pw_check_and_download_plugins () {
if [[ ! -d "${PW_PLUGINS_PATH}/fake_dlss" ]] || [[ ! -d "${PW_PLUGINS_PATH}/nvapi" ]] ; then if [[ ! -f "${PW_PLUGINS_PATH}/portable/bin/yad_new" ]] \
|| [[ ! -f "${PW_PLUGINS_PATH}/portable/bin/yad_v12_3" ]]
then
print_info "Download and install plugins${PW_PLUGINS_VER}..." print_info "Download and install plugins${PW_PLUGINS_VER}..."
if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then if command -v yad &>/dev/null ; then
if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then if try_download "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}` if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}" for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
done do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
done
fi
else
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
if yad_error_download
then pw_check_and_download_plugins
else
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
fi fi
fi
else else
try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" if yad_error_download
try_remove_dir "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
if zenity_error_download
then pw_check_and_download_plugins then pw_check_and_download_plugins
else else
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))" export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))"
...@@ -846,14 +884,29 @@ pw_check_and_download_plugins () { ...@@ -846,14 +884,29 @@ pw_check_and_download_plugins () {
fi fi
fi fi
else else
if zenity_error_download PW_NOTIFY_TEXT="Please wait for update PortProton"
then pw_check_and_download_plugins pw_notify_send -u normal
else if try_download_silent "github.com/Castro-Fidel/wine_builds/releases/download/plugins${PW_PLUGINS_VER}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" ; then
export PW_PLUGINS_VER="$(echo _v$(($(echo $PW_PLUGINS_VER | sed 's/_v//') - 1)))" if unpack_tar_xz "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz" "${PORT_WINE_TMP_PATH}" ; then
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}" try_remove_file "${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}.tar.xz"
if [ ! -z "`ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`" ] ; then
for RM_PLUGINS in `ls ${PORT_WINE_TMP_PATH} | grep plugins_v | grep -v plugins${PW_PLUGINS_VER}`
do try_remove_dir "${PORT_WINE_TMP_PATH}/${RM_PLUGINS}"
done
fi
else
PW_NOTIFY_TEXT="Failed updating PortProton!"
pw_notify_send -u critical
print_error "Failed updating PortProton!"
fi
fi fi
fi fi
fi fi
export pw_yad="${PW_PLUGINS_PATH}/portable/bin/yad"
export pw_yad_v12_3="${PW_PLUGINS_PATH}/portable/bin/yad_v12_3"
export pw_zstd="${PW_PLUGINS_PATH}/portable/bin/zstd"
export pw_7z="${PW_PLUGINS_PATH}/portable/lib/p7zip/7z"
export PW_XTERM="${PW_PLUGINS_PATH}/portable/bin/xterm -geometry 159x37 -e"
return 0 return 0
} }
...@@ -892,8 +945,9 @@ pw_init_db () { ...@@ -892,8 +945,9 @@ pw_init_db () {
export ADD_CB_DBFILE="`echo ${PW_CHECK_DB_FILE} | awk -F'/' '{print $NF}'`!${ADD_CB_DBFILE}" export ADD_CB_DBFILE="`echo ${PW_CHECK_DB_FILE} | awk -F'/' '{print $NF}'`!${ADD_CB_DBFILE}"
fi fi
done done
PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db"/`"${pw_yad_v12_3}" --text-align=center --text "${PW_SELECTION_DB_LOC}" --borders=15 --form \ PORTWINE_DB_FILE="${PORT_SCRIPTS_PATH}/portwine_db"/`"${pw_yad_v12_3}" --text-align=center \
--title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/port_proton.png" --form --separator="" \ --text "${PW_SELECTION_DB_LOC}" --borders="${YAD_BORDERS}" --form \
--title "Database file selection..." --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --form --separator="" \
--field="DB FILE: :CB" "${ADD_CB_DBFILE}" 2>/dev/null` --field="DB FILE: :CB" "${ADD_CB_DBFILE}" 2>/dev/null`
if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi if [[ "$?" == "1" || "$?" == "252" ]] ; then exit 0 ; fi
elif [[ `echo "$PW_FIND_DB_FILE" | wc -l` -eq 1 ]] ; then elif [[ `echo "$PW_FIND_DB_FILE" | wc -l` -eq 1 ]] ; then
...@@ -937,9 +991,13 @@ pw_init_db () { ...@@ -937,9 +991,13 @@ pw_init_db () {
check_variables PW_USE_RAY_TRACING "1" check_variables PW_USE_RAY_TRACING "1"
fi fi
if [[ -f "${PATH_TO_GAME}"/steam_emu.ini ]] && [[ "${update_loc}" == "RUS" ]] ; then if [[ "${update_loc}" == "RUS" ]] ; then
sed -i "s/Language=english/Language=russian/" "${PATH_TO_GAME}"/steam_emu.ini for chk_lang_and_uname in "steam_emu.ini" "steam_api.ini" "steam_api64.ini" ; do
sed -i "/UserName=/c\UserName=${USER}" "${PATH_TO_GAME}"/steam_emu.ini if [[ -f "${PATH_TO_GAME}/${chk_lang_and_uname}" ]] ; then
sed -i "s/Language=english/Language=russian/" "${PATH_TO_GAME}/${chk_lang_and_uname}"
sed -i "/UserName=/c\UserName=${USER}" "${PATH_TO_GAME}/${chk_lang_and_uname}"
fi
done
fi fi
fi fi
[[ "${START_FROM_STEAM}" == 1 ]] && export PW_GUI_DISABLED_CS=1 [[ "${START_FROM_STEAM}" == 1 ]] && export PW_GUI_DISABLED_CS=1
...@@ -978,22 +1036,24 @@ pw_port_update () { ...@@ -978,22 +1036,24 @@ pw_port_update () {
print_info "Scripts version in github = ${scripts_current_ver}" print_info "Scripts version in github = ${scripts_current_ver}"
print_info "Scripts version local = ${scripts_install_ver}" print_info "Scripts version local = ${scripts_install_ver}"
if [[ ! -z "${scripts_current_ver}" ]] && [[ "${scripts_current_ver}" -gt "${scripts_install_ver}" ]] ; then if [[ ! -z "${scripts_current_ver}" ]] && [[ "${scripts_current_ver}" -gt "${scripts_install_ver}" ]] ; then
if [[ -f "${PW_WINELIB}/portable/bin/yad_v12_3" ]] ; then if [[ -f "${PW_PLUGINS_PATH}/portable/bin/yad_v12_3" ]]
export pw_yad_v12_3="${PW_WINELIB}/portable/bin/yad_v12_3" then export pw_yad_v12_3="${PW_PLUGINS_PATH}/portable/bin/yad_v12_3"
elif command -v yad &>/dev/null
then local pw_yad_v12_3="yad"
else local pw_yad_v12_3="not_found"
fi
if [[ "${pw_yad_v12_3}" == "not_found" ]] ; then
xcsd="${scripts_upd4}"
else
curl -s --list-only "${URL_FOR_CHANGELOG}/${PW_CHANGELOG_FILE}" | tee "${PORT_WINE_TMP_PATH}/curent_var_ver" curl -s --list-only "${URL_FOR_CHANGELOG}/${PW_CHANGELOG_FILE}" | tee "${PORT_WINE_TMP_PATH}/curent_var_ver"
CHANGLOG_NEWS=`cat "${PORT_WINE_TMP_PATH}/curent_var_ver" | sed "/Scripts version ${scripts_install_ver}/,$ d" | sed '1,/---/ d' ` CHANGLOG_NEWS=`cat "${PORT_WINE_TMP_PATH}/curent_var_ver" | sed "/Scripts version ${scripts_install_ver}/,$ d" | sed '1,/---/ d' `
xcsd=`"${pw_yad_v12_3}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ xcsd=`"${pw_yad_v12_3}" --title "${scripts_upd2} v.${scripts_current_ver}" --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--borders=3 --form --separator='%%%' --width=1200 --height=600 \ --borders=${YAD_BORDERS} --form --separator='%%%' --width=1200 --height=600 \
--field=":TXT" "${CHANGLOG_NEWS}" \ --field=":TXT" "${CHANGLOG_NEWS}" \
--field=" ${scripts_upd3} :CB" "${scripts_upd4}!${scripts_upd5}!${scripts_upd6}" 2>/dev/null` --field=" ${scripts_upd3} :CB" "${scripts_upd4}!${scripts_upd5}!${scripts_upd6}" 2>/dev/null`
YAD_STATUS="$?" YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
xcsd=`echo "${xcsd}" | awk -F'%%%' '{print $2}'` xcsd=`echo "${xcsd}" | awk -F'%%%' '{print $2}'`
else
xcsd=`zenity --title "${scripts_upd1}" --text "${scripts_upd2}" --list --radiolist --height=240 --column="${inst_set}" --column "${scripts_upd3}" \
TRUE "${scripts_upd4}" \
FALSE "${scripts_upd5}" \
FALSE "${scripts_upd6}"`
fi fi
case $xcsd in case $xcsd in
"${scripts_upd4}") "${scripts_upd4}")
...@@ -1012,15 +1072,11 @@ pw_port_update () { ...@@ -1012,15 +1072,11 @@ pw_port_update () {
try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" try_remove_file "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
try_remove_dir "${PORT_WINE_TMP_PATH}/PortWINE-master/" try_remove_dir "${PORT_WINE_TMP_PATH}/PortWINE-master/"
echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver" echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
if [[ -z "${pw_yad_v12_3}" ]] ; then
zenity --title="Changelog" --text-info --width=1200 --height=550 \
--filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
fi
[ "$?" == 0 ] && echo "Restarting PP after update..." && /usr/bin/env bash -c ${pw_full_command_line[*]} & [ "$?" == 0 ] && echo "Restarting PP after update..." && /usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0 exit 0
fi fi
else else
zenity_error_download && pw_port_update || exit 1 yad_error_download && pw_port_update || exit 1
fi ;; fi ;;
"${scripts_upd5}") "${scripts_upd5}")
echo " " ;; echo " " ;;
...@@ -1099,14 +1155,14 @@ pw_create_gui_png () { ...@@ -1099,14 +1155,14 @@ pw_create_gui_png () {
try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png" try_remove_file "${PORT_WINE_PATH}/data/img/Setup.png"
try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/launcher.png"
try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png" try_remove_file "${PORT_WINE_PATH}/data/img/Launcher.png"
if [[ -x "`command -v wrestool 2>/dev/null`" ]] && [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then if [[ ! -f "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" ]] ; then
try_remove_dir "${PORT_WINE_TMP_PATH}/tmp_img" try_remove_dir "${PORT_WINE_TMP_PATH}/tmp_img"
create_new_dir "${PORT_WINE_TMP_PATH}/tmp_img" create_new_dir "${PORT_WINE_TMP_PATH}/tmp_img"
wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")" pw_use_command wrestool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" -t14 "$(readlink -f "${portwine_exe}")"
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".ico" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".ico" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" pw_use_command icotool -x --width=${PW_RESIZE_TO} --height=${PW_RESIZE_TO} --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
if [[ ! -f "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}")" ]] ; then if [[ ! -f "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}")" ]] ; then
icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico" pw_use_command icotool -x --output="${PORT_WINE_TMP_PATH}/tmp_img/" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.ico"
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
else else
cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png" cp "$(ls -S -1 "${PORT_WINE_TMP_PATH}/tmp_img/"*".png" | grep "${PW_RESIZE_TO}x${PW_RESIZE_TO}" | head -n 1)" "${PORT_WINE_TMP_PATH}/tmp_img/${PORTPROTON_NAME}.png"
...@@ -1147,7 +1203,7 @@ pw_find_exe () { ...@@ -1147,7 +1203,7 @@ pw_find_exe () {
OrigIFS="$IFS" && IFS=% OrigIFS="$IFS" && IFS=%
PW_SET_FIND_EXE="$("${pw_yad_v12_3}" --height="300" --width="1000" --list \ PW_SET_FIND_EXE="$("${pw_yad_v12_3}" --height="300" --width="1000" --list \
--text-align=center --window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "Create shortcut for..." \ --text-align=center --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "Create shortcut for..." \
--text="\n${loc_gui_create_shortcut_for_exe}" --column="path to .exe file:" ${FIND_TO_GUI} 2>/dev/null)" --text="\n${loc_gui_create_shortcut_for_exe}" --column="path to .exe file:" ${FIND_TO_GUI} 2>/dev/null)"
YAD_STATUS="$?" YAD_STATUS="$?"
print_var YAD_STATUS print_var YAD_STATUS
......
...@@ -14,8 +14,11 @@ else ...@@ -14,8 +14,11 @@ else
if [[ "${update_loc}" == "RUS" || "${update_loc}" == "ENG" ]] && [[ -f "${PORT_WINE_TMP_PATH}/${portname}_loc" ]] ; then if [[ "${update_loc}" == "RUS" || "${update_loc}" == "ENG" ]] && [[ -f "${PORT_WINE_TMP_PATH}/${portname}_loc" ]] ; then
echo "" echo ""
else else
SET_LANG=`zenity --title "LAUNGUAGE" --text "Select the language" --list --radiolist \ [[ ! -f "${pw_yad_v12_3}" ]] && pw_yad_v12_3="yad"
--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" ` SET_LANG=$("$pw_yad_v12_3" --title "LAUNGUAGE" --text "Select the language:" --list --radiolist \
--column="Set:" --column "Choose language:" TRUE "RUS" FALSE "ENG" \
--window-icon "$PW_GUI_ICON_PATH/portproton.svg" --width=300 --height=150)
SET_LANG="$(echo $SET_LANG | awk -F'|' '{print $2}')"
echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/${portname}_loc" echo "${SET_LANG}" > "${PORT_WINE_TMP_PATH}/${portname}_loc"
if [[ ! -z "${SET_LANG}" ]] if [[ ! -z "${SET_LANG}" ]]
then export update_loc=${SET_LANG} then export update_loc=${SET_LANG}
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
export LAUNCH_PARAMETERS=("/q" ) export LAUNCH_PARAMETERS=("/q" )
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EpicGamesLauncherInstaller.msi" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/EpicGamesLauncherInstaller.msi"
export PW_USE_D3D_EXTRAS=1 export PW_USE_D3D_EXTRAS=1
export PORTWINE_CREATE_SHORTCUT_NAME="Epic Games Launcher"
# sed -i '/Epic Games/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/*.reg >/dev/null # sed -i '/Epic Games/d' "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}"/*.reg >/dev/null
try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver" try_remove_file "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/.wine_ver"
......
...@@ -5,7 +5,7 @@ export LAUNCH_PARAMETERS=("/VERYSILENT") ...@@ -5,7 +5,7 @@ export LAUNCH_PARAMETERS=("/VERYSILENT")
GOG_VER="$(curl "https://remote-config.gog.com/components/webinstaller?component_version=2.0.0" \ GOG_VER="$(curl "https://remote-config.gog.com/components/webinstaller?component_version=2.0.0" \
| awk -F'galaxy_client_' '{print $2}' \ | awk -F'galaxy_client_' '{print $2}' \
| awk -F'.pkg' '{print $1}')" | awk -F'.pkg' '{print $1}')"
[[ "${GOG_VER}" != 2.* ]] && zenity_error "ERROR: Get the GOG version." && exit 1 [[ "${GOG_VER}" != 2.* ]] && yad_error "ERROR: Get the GOG version." && exit 1
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/setup_galaxy_${GOG_VER}.exe" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/setup_galaxy_${GOG_VER}.exe"
export PW_PREFIX_NAME="GOG" export PW_PREFIX_NAME="GOG"
export DISABLE_CP_DEFPFX=1 export DISABLE_CP_DEFPFX=1
......
...@@ -20,10 +20,10 @@ if try_download_game "https://lol.secure.dyn.riotcdn.net/channels/public/x/insta ...@@ -20,10 +20,10 @@ if try_download_game "https://lol.secure.dyn.riotcdn.net/channels/public/x/insta
then then
pw_start_progress_bar_block "Installing League of Legends. ${loc_gui_please_wait} " pw_start_progress_bar_block "Installing League of Legends. ${loc_gui_please_wait} "
if [ "${update_loc}" = "RUS" ] ; then if [ "${update_loc}" = "RUS" ] ; then
zenity --info --width=500 --text "Вы должны нажать кнопку установки, не изменяя настроек!" yad_info "Вы должны нажать кнопку установки, не изменяя настроек!"
fi fi
if [ "${update_loc}" = "ENG" ] ; then if [ "${update_loc}" = "ENG" ] ; then
zenity --info --width=500 --text "You must click the install button without changing the settings!" yad_info "You must click the install button without changing the settings!"
fi fi
pw_kill_autostart RiotClientServices.exe & pw_kill_autostart RiotClientServices.exe &
pw_run "${PW_AUTOINSTALL_EXE}" pw_run "${PW_AUTOINSTALL_EXE}"
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
PR64_VER="$(curl https://www.pj64-emu.com/public-releases | grep 'installer' | head -n 1 \ PR64_VER="$(curl https://www.pj64-emu.com/public-releases | grep 'installer' | head -n 1 \
| awk -F'/project64' '{print $2}' \ | awk -F'/project64' '{print $2}' \
| awk -F'installer"' '{print $1}')" | awk -F'installer"' '{print $1}')"
[[ "${PR64_VER}" != *-3-* ]] && zenity_error "ERROR: Get the Project64 version." && exit 1 [[ "${PR64_VER}" != *-3-* ]] && yad_error "ERROR: Get the Project64 version." && exit 1
export LAUNCH_PARAMETERS=("/VERYSILENT") export LAUNCH_PARAMETERS=("/VERYSILENT")
export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Project64${PR64_VER}setup.exe" export PW_AUTOINSTALL_EXE="${PW_USER_TEMP}/Project64${PR64_VER}setup.exe"
......
...@@ -8,7 +8,7 @@ export PW_DLL_INSTALL="faudio dotnet48" ...@@ -8,7 +8,7 @@ export PW_DLL_INSTALL="faudio dotnet48"
export PW_VULKAN_USE=1 export PW_VULKAN_USE=1
WOSB_VERSION="$(curl -s --list-only --connect-timeout 3 https://www.worldofseabattle.com/download2 2>/dev/null | grep 'installer.exe' | awk -F'xsolla-launcher-update/' '{print $2}' | awk -F'/' '{print $1}')" WOSB_VERSION="$(curl -s --list-only --connect-timeout 3 https://www.worldofseabattle.com/download2 2>/dev/null | grep 'installer.exe' | awk -F'xsolla-launcher-update/' '{print $2}' | awk -F'/' '{print $1}')"
[[ ! -z "$WOSB_VERSION" ]] && print_info "Found version: $WOSB_VERSION" || zenity_error "Error while get version of WOSB INSTALLER." [[ ! -z "$WOSB_VERSION" ]] && print_info "Found version: $WOSB_VERSION" || yad_error "Error while get version of WOSB INSTALLER."
start_portwine start_portwine
if try_download_game "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/${WOSB_VERSION}/bin/installer.exe" "${PW_AUTOINSTALL_EXE}" if try_download_game "https://installer.launcher.xsolla.com/xlauncher-builds/xsolla-launcher-update/${WOSB_VERSION}/bin/installer.exe" "${PW_AUTOINSTALL_EXE}"
......
...@@ -16,20 +16,16 @@ echo ' ...@@ -16,20 +16,16 @@ echo '
' '
if [[ $(id -u) = 0 ]] ; then if [[ $(id -u) = 0 ]] ; then
echo "Do not run this script as root!" echo "Do not run this script as root!"
zenity --error --text "Do not run this script as root!"
exit 1 exit 1
fi fi
if [[ "${s_install}" != "1" && ! -x "`command -v "zenity" 2>/dev/null`" ]] ; then
echo "You will need to install: zenity, and restart the port."
xdg-open "https://linux-gaming.ru/portproton/" > /dev/null 2>&1 & exit 0
fi
. "$(dirname $(readlink -f "$0"))/functions_helper" . "$(dirname $(readlink -f "$0"))/functions_helper"
start_portwine () { start_portwine () {
var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}" var_winedlloverride_update "${PW_MUST_WINEDLLOVERRIDES}"
export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")" export WINEPREFIX="$(readlink -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}")"
if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then if [[ "$WINEPREFIX" != "${PORT_WINE_PATH}/data/prefixes/"* ]] && [[ ! -d "$WINEPREFIX" ]] ; then
zenity_error "Path to PREFIX not found:\n$WINEPREFIX" yad_error "Path to PREFIX not found:\n$WINEPREFIX"
exit 1 exit 1
fi fi
create_new_dir "${WINEPREFIX}/drive_c/windows/system32/" create_new_dir "${WINEPREFIX}/drive_c/windows/system32/"
...@@ -64,11 +60,6 @@ start_portwine () { ...@@ -64,11 +60,6 @@ start_portwine () {
unset WARN_CYRILLIC_IN_PATH unset WARN_CYRILLIC_IN_PATH
fi fi
if [ ! -f "${HOME}/.Xresources" ]; then
cp -f "${PORT_SCRIPTS_PATH}/.Xresources" "${HOME}"
xrdb -merge "${HOME}/.Xresources"
fi
if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then if [[ "$PW_USE_OBS_VKCAPTURE" == "1" ]] ; then
export OBS_VKCAPTURE="1" export OBS_VKCAPTURE="1"
export PW_USE_SYSTEM_VK_LAYERS="1" export PW_USE_SYSTEM_VK_LAYERS="1"
...@@ -147,11 +138,23 @@ start_portwine () { ...@@ -147,11 +138,23 @@ start_portwine () {
enabled_fake_nvidia_videocard () enabled_fake_nvidia_videocard ()
{ {
if [[ "${1}" == 1 ]] ; then if [[ "${1}" == 1 ]] ; then
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}" sed -i /'dxgi.customDeviceDesc =/c dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}" sed -i /'dxgi.customVendorId =/c dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}"
export WINE_HIDE_NVIDIA_GPU=0
export WINE_HIDE_AMD_GPU=1
export DXVK_NVAPI_DRIVER_VERSION=53713
export DXVK_NVAPI_ALLOW_OTHER_DRIVERS=1
elif [[ "${1}" == 0 ]] ; then elif [[ "${1}" == 0 ]] ; then
sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId = 222F' "${DXVK_CONFIG_FILE}" sed -i /'dxgi.customDeviceDesc =/c # dxgi.customDeviceDesc = "NVIDIA GeForce RTX 4090"' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customDeviceId =/c # dxgi.customDeviceId = 2684' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.customVendorId =/c # dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}" sed -i /'dxgi.customVendorId =/c # dxgi.customVendorId = 10de' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideAmdGpu =/c # dxgi.hideAmdGpu = True' "${DXVK_CONFIG_FILE}"
sed -i /'dxgi.hideNvidiaGpu =/c # dxgi.hideNvidiaGpu = False' "${DXVK_CONFIG_FILE}"
unset WINE_HIDE_NVIDIA_GPU WINE_HIDE_AMD_GPU
unset DXVK_NVAPI_DRIVER_VERSION DXVK_NVAPI_ALLOW_OTHER_DRIVERS
fi fi
} }
...@@ -160,27 +163,38 @@ start_portwine () { ...@@ -160,27 +163,38 @@ start_portwine () {
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/$rm_dll" try_remove_file "${WINEPREFIX}/drive_c/windows/system32/$rm_dll"
done done
if [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then # TODO: LFX (wait new LFX v2)
# if [[ "${PW_USE_LFX}" == 1 ]] ; then
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.so" "${WINEDIR}/lib64/wine/x86_64-unix/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_layer.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# try_force_link_file "${PW_PLUGINS_PATH}/lfx/${PW_LFX_VER}/latencyflex_wine.dll" "${WINEPREFIX}/drive_c/windows/system32/"
# enabled_fake_nvidia_videocard 1
# export LFX2=1
# fi
export DXVK_ENABLE_NVAPI=1
if [[ "${PW_USE_FAKE_DLSS_3}" == 1 ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss_3/${PW_FAKE_DLSS_3_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_3_VER}/dlssg_to_fsr3_amd_is_better.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "nvapi,nvapi64,nvngx,_nvngx,dlssg_to_fsr3_amd_is_better=n;nvcuda=b"
enabled_fake_nvidia_videocard 1
export WINEHAGS=1
elif [[ "${PW_USE_FAKE_DLSS}" == 1 ]] && [[ -d "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/" ]] ; then
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PW_PLUGINS_PATH}/fake_dlss/${PW_FAKE_DLSS_VER}/nvngx.ini" "${WINEPREFIX}/drive_c/windows/system32/"
enabled_fake_nvidia_videocard 1 enabled_fake_nvidia_videocard 1
var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b" var_winedlloverride_update "nvapi,nvapi64,nvngx=n;_nvngx=;nvcuda=b"
export DXVK_ENABLE_NVAPI=1
export WINE_HIDE_NVIDIA_GPU=0
export WINE_HIDE_AMD_GPU=1
export DXVK_NVAPI_DRIVER_VERSION=99999
elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then elif [[ "${PW_USE_NVAPI_AND_DLSS}" == 1 ]] ; then
FIND_NVNGX="$(dirname $(find /usr/* -type f -name "nvngx.dll" 2>/dev/null | head -n 1 | awk '{print $1}'))" FIND_NVNGX="$(dirname $(find /usr/* -type f -name "nvngx.dll" 2>/dev/null | head -n 1 | awk '{print $1}'))"
if [[ ! -z "$FIND_NVNGX" ]] ; then if [[ ! -z "$FIND_NVNGX" ]] ; then
try_copy_file "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_copy_file "${FIND_NVNGX}/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_copy_file "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_copy_file "${FIND_NVNGX}/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
else else
try_copy_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PW_PLUGINS_PATH}/nvngx/nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_copy_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PW_PLUGINS_PATH}/nvngx/_nvngx.dll" "${WINEPREFIX}/drive_c/windows/system32/"
fi fi
enabled_fake_nvidia_videocard 0 enabled_fake_nvidia_videocard 0
export DXVK_ENABLE_NVAPI=1
export WINE_HIDE_NVIDIA_GPU=0
var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b" var_winedlloverride_update "nvngx,_nvngx,nvapi,nvapi64=n;nvcuda=b"
else else
enabled_fake_nvidia_videocard 0 enabled_fake_nvidia_videocard 0
...@@ -210,8 +224,11 @@ start_portwine () { ...@@ -210,8 +224,11 @@ start_portwine () {
[[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG [[ "${PW_MANGOHUD_USER_CONF}" == 1 ]] && unset MANGOHUD_CONFIG
[[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS [[ "${PW_VKBASALT_USER_CONF}" == 1 ]] && unset PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS
if [[ "${PW_USE_DXR11}" == 1 ]] || [[ "${PW_USE_DXR10}" == 1 ]] || [[ "${PW_USE_RAY_TRACING}" == 1 ]]; then if [[ "${PW_USE_DXR11}" == 1 ]] \
var_vkd3d_config_update dxr,dxr11 || [[ "${PW_USE_DXR10}" == 1 ]] \
|| [[ "${PW_USE_RAY_TRACING}" == 1 ]]
then
var_vkd3d_config_update dxr
var_radv_perftest_config_update rt var_radv_perftest_config_update rt
else else
var_vkd3d_config_update nodxr var_vkd3d_config_update nodxr
...@@ -286,8 +303,8 @@ start_portwine () { ...@@ -286,8 +303,8 @@ start_portwine () {
else export PW_LD_PRELOAD="${GAMEMODEAUTO_NAME}" else export PW_LD_PRELOAD="${GAMEMODEAUTO_NAME}"
fi fi
env LD_LIBRARY_PATH="${PW_WINELIB}/portable/lib/lib64:${PW_WINELIB}/portable/lib/lib32" \ env LD_LIBRARY_PATH="${PW_PLUGINS_PATH}/portable/lib/lib64:${PW_PLUGINS_PATH}/portable/lib/lib32" \
"${PW_WINELIB}/portable/bin/gamemoded" &>/dev/null & "${PW_PLUGINS_PATH}/portable/bin/gamemoded" &>/dev/null &
print_info "Gamemod will be launched." print_info "Gamemod will be launched."
else else
...@@ -313,7 +330,7 @@ start_portwine () { ...@@ -313,7 +330,7 @@ start_portwine () {
LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf" LN_FONTS="arialbd.ttf courbd.ttf georgia.ttf micross.ttf msyh.ttf simsun.ttc arial.ttf cour.ttf malgun.ttf msgothic.ttc nirmala.ttf times.ttf"
for link_font in $LN_FONTS ; do for link_font in $LN_FONTS ; do
if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then if [[ ! -f "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" ]] ; then
try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/${link_font}" try_force_link_file "${WINEDIR}/share/fonts/${link_font}" "${WINEPREFIX}/drive_c/windows/Fonts/"
fi fi
done done
...@@ -348,7 +365,7 @@ start_portwine () { ...@@ -348,7 +365,7 @@ start_portwine () {
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
else else
try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz" try_remove_file "${PORT_WINE_PATH}/data/tmp/progpfx.tar.xz"
zenity_error_download && exit 1 yad_error_download && exit 1
fi fi
fi fi
...@@ -360,7 +377,7 @@ start_portwine () { ...@@ -360,7 +377,7 @@ start_portwine () {
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
else else
try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz" try_remove_file "${PORT_WINE_PATH}/data/tmp/dotpfx.tar.xz"
zenity_error_download && exit 1 yad_error_download && exit 1
fi fi
fi fi
...@@ -421,23 +438,20 @@ start_portwine () { ...@@ -421,23 +438,20 @@ start_portwine () {
export PW_USE_US_LAYOUT="0" export PW_USE_US_LAYOUT="0"
fi fi
D3D_EXTRAS_LIBS="d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37
d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46
d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41
d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30
d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43"
if [[ "${PW_USE_D3D_EXTRAS}" == 1 ]] ; then if [[ "${PW_USE_D3D_EXTRAS}" == 1 ]] ; then
if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ]] \ if [[ ! -f "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" ]] \
|| [[ -z "`grep d3dx9 "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]] || [[ -z "`grep d3dx9 "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"`" ]]
then then
echo "d3dx9" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" echo "d3dx9" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi fi
if [[ -d "${PW_PLUGINS_PATH}/d3d_extras" ]]
then PATH_TO_D3DEXTRAS="${PW_PLUGINS_PATH}/d3d_extras"
else PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras"
fi
#try link d3d extras libs #try link d3d extras libs
for d3d_extras_from_plugins in d3dcompiler_33 d3dcompiler_34 d3dcompiler_35 d3dcompiler_36 d3dcompiler_37 \ PATH_TO_D3DEXTRAS="${PW_WINELIB}/d3d_extras"
d3dcompiler_38 d3dcompiler_39 d3dcompiler_40 d3dcompiler_41 d3dcompiler_42 d3dcompiler_43 d3dcompiler_46 \ for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
d3dcompiler_47 d3dx10_33 d3dx10_34 d3dx10_35 d3dx10_36 d3dx10_37 d3dx10_38 d3dx10_39 d3dx10_40 d3dx10_41 \
d3dx10_42 d3dx10_43 d3dx10 d3dx11_42 d3dx11_43 d3dx9_24 d3dx9_25 d3dx9_26 d3dx9_27 d3dx9_28 d3dx9_29 d3dx9_30 \
d3dx9_31 d3dx9_32 d3dx9_33 d3dx9_34 d3dx9_35 d3dx9_36 d3dx9_37 d3dx9_38 d3dx9_39 d3dx9_40 d3dx9_41 d3dx9_42 d3dx9_43
do
try_force_link_file "${PATH_TO_D3DEXTRAS}/x64/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PATH_TO_D3DEXTRAS}/x64/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
try_force_link_file "${PATH_TO_D3DEXTRAS}/x32/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" try_force_link_file "${PATH_TO_D3DEXTRAS}/x32/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
var_winedlloverride_update "${d3d_extras_from_plugins}=n" var_winedlloverride_update "${d3d_extras_from_plugins}=n"
...@@ -445,6 +459,11 @@ start_portwine () { ...@@ -445,6 +459,11 @@ start_portwine () {
echo "${d3d_extras_from_plugins}" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log" echo "${d3d_extras_from_plugins}" >> "${PORT_WINE_PATH}/data/prefixes/${PW_PREFIX_NAME}/winetricks.log"
fi fi
done done
else
for d3d_extras_from_plugins in $D3D_EXTRAS_LIBS ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${d3d_extras_from_plugins}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done
fi fi
print_info "Try link wine d3d files by default..." print_info "Try link wine d3d files by default..."
for rm_vulkan_dll in libvkd3d-1 libvkd3d-shader-1 dxvk_config nvapi nvapi64 d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do for rm_vulkan_dll in libvkd3d-1 libvkd3d-shader-1 dxvk_config nvapi nvapi64 d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
...@@ -452,8 +471,8 @@ start_portwine () { ...@@ -452,8 +471,8 @@ start_portwine () {
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_vulkan_dll}.dll" try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${rm_vulkan_dll}.dll"
done done
for wine_build_dll in d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do for wine_build_dll in d3d12core d3d12 d3d11 d3d10 d3d10core d3d10_1 d3d9 d3d8 dxgi wined3d ; do
try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_build_dll}.dll" try_force_link_file "${WINEDIR}/lib/wine/i386-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_build_dll}.dll" try_force_link_file "${WINEDIR}/lib64/wine/x86_64-windows/${wine_build_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
done done
create_new_dir "${PW_VULKAN_DIR}/opengl" create_new_dir "${PW_VULKAN_DIR}/opengl"
...@@ -478,7 +497,6 @@ start_portwine () { ...@@ -478,7 +497,6 @@ start_portwine () {
fi fi
elif [[ "${PW_VULKAN_USE}" == "3" ]] ; then elif [[ "${PW_VULKAN_USE}" == "3" ]] ; then
print_info "Use GALLIUM-NINE (Native DX9 on MESA drivers)" print_info "Use GALLIUM-NINE (Native DX9 on MESA drivers)"
export PW_GALLIUM_NINE_VER="0.8"
export PW_GALLIUM_NINE_PATH="${PW_PLUGINS_PATH}/gallium_nine_v.${PW_GALLIUM_NINE_VER}" export PW_GALLIUM_NINE_PATH="${PW_PLUGINS_PATH}/gallium_nine_v.${PW_GALLIUM_NINE_VER}"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib32/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/syswow64/d3d9.dll" try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib32/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/syswow64/d3d9.dll"
try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib64/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/system32/d3d9.dll" try_force_link_file "${PW_GALLIUM_NINE_PATH}/lib64/d3d9-nine.dll.so" "${WINEPREFIX}/drive_c/windows/system32/d3d9.dll"
...@@ -498,7 +516,7 @@ start_portwine () { ...@@ -498,7 +516,7 @@ start_portwine () {
print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}" print_info "D3D_MODULE_PATH=${D3D_MODULE_PATH}"
else else
pw_stop_progress_bar pw_stop_progress_bar
zenity_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}" yad_error "d3dadapter9.so.1.0.0 - ${loc_find_d3dadapter9_error}"
stop_portwine stop_portwine
fi fi
export mesa_glthread=true export mesa_glthread=true
...@@ -536,42 +554,38 @@ start_portwine () { ...@@ -536,42 +554,38 @@ start_portwine () {
print_info "Try link native DXVK files..." print_info "Try link native DXVK files..."
for wine_dxvk_dll in ${CP_DXVK_FILES} ; do for wine_dxvk_dll in ${CP_DXVK_FILES} ; do
if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" ]] ; then if [[ -f "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_dxvk_dll}.dll" try_force_link_file "${PATH_TO_DXVK_FILES}/x32/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_dxvk_dll}.dll" try_force_link_file "${PATH_TO_DXVK_FILES}/x64/${wine_dxvk_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_dxvk_dll}=n" var_winedlloverride_update "${wine_dxvk_dll}=n"
fi fi
done done
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \ try_force_link_file "${WINEDIR}/lib/wine/nvapi/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/" try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x32/nvapi.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \ try_force_link_file "${WINEDIR}/lib64/wine/nvapi/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PATH_TO_DXVK_FILES}/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" || \
try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/" try_force_link_file "${PW_PLUGINS_PATH}/nvapi/x64/nvapi64.dll" "${WINEPREFIX}/drive_c/windows/system32/"
print_info "Try link native VKD3D files..." print_info "Try link native VKD3D files..."
for wine_vkd3d_dll in d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1; do for wine_vkd3d_dll in d3d12 d3d12core libvkd3d-1 libvkd3d-shader-1; do
if [[ -f "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" ]] ; then if [[ -f "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" ]] ; then
try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/${wine_vkd3d_dll}.dll" try_force_link_file "${PATH_TO_VKD3D_FILES}/x86/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/${wine_vkd3d_dll}.dll" try_force_link_file "${PATH_TO_VKD3D_FILES}/x64/${wine_vkd3d_dll}.dll" "${WINEPREFIX}/drive_c/windows/system32/"
var_winedlloverride_update "${wine_vkd3d_dll}=n" var_winedlloverride_update "${wine_vkd3d_dll}=n"
fi fi
done done
print_info "Try link native D8VK file..." print_info "Try link native D8VK file..."
try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/d3d8.dll" try_force_link_file "${PATH_TO_D8VK_FILES}/x32/d3d8.dll" "${WINEPREFIX}/drive_c/windows/syswow64/"
var_winedlloverride_update d3d8=n var_winedlloverride_update d3d8=n
fi fi
if [[ ! -d "${WINEPREFIX}/drive_c/vrclient/bin" ]] ; then if [[ ! -d "${WINEPREFIX}/drive_c/vrclient/bin" ]] ; then
create_new_dir "${WINEPREFIX}/drive_c/vrclient/bin" create_new_dir "${WINEPREFIX}/drive_c/vrclient/bin"
if ! try_force_link_file "${WINEDIR}"/lib/wine/fakedlls/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient.dll" try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
then try_force_link_file "${WINEDIR}"/lib/wine/i386-windows/vrclient.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient.dll" try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/"
fi
if ! try_force_link_file "${WINEDIR}"/lib64/wine/fakedlls/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient_x64.dll"
then try_force_link_file "${WINEDIR}"/lib64/wine/x86_64-windows/vrclient_x64.dll "${WINEPREFIX}/drive_c/vrclient/bin/vrclient_x64.dll"
fi
fi fi
if [[ "${PW_USE_SHADER_CACHE}" == 1 ]] ; then if [[ "${PW_USE_SHADER_CACHE}" == 1 ]] ; then
...@@ -608,15 +622,13 @@ start_portwine () { ...@@ -608,15 +622,13 @@ start_portwine () {
fi fi
for try_cp_dll_from_wine in "ntdll.dll" "vulkan-1.dll" "winevulkan.dll" "amd_ags_x64.dll" "ir50_32.dll" ; do for try_cp_dll_from_wine in "ntdll.dll" "vulkan-1.dll" "winevulkan.dll" "amd_ags_x64.dll" "ir50_32.dll" ; do
try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib/wine/i386-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}" if try_copy_file "${WINEDIR}/lib/wine/i386-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to syswow64... OK." then print_info "Try copy $try_cp_dll_from_wine to syswow64... OK."
elif ! try_copy_file "${WINEDIR}/lib/wine/fakedlls/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
then try_remove_file "${WINEPREFIX}/drive_c/windows/syswow64/${try_cp_dll_from_wine}"
fi fi
try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
if try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}" if try_copy_file "${WINEDIR}/lib64/wine/x86_64-windows/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
then print_info "Try copy $try_cp_dll_from_wine to system32... OK." then print_info "Try copy $try_cp_dll_from_wine to system32... OK."
elif ! try_copy_file "${WINEDIR}/lib64/wine/fakedlls/${try_cp_dll_from_wine}" "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
then try_remove_file "${WINEPREFIX}/drive_c/windows/system32/${try_cp_dll_from_wine}"
fi fi
done done
...@@ -744,7 +756,7 @@ export -f pw_run ...@@ -744,7 +756,7 @@ export -f pw_run
###MAIN### ###MAIN###
if [[ $(id -u) -eq 0 ]] ; then if [[ $(id -u) -eq 0 ]] ; then
zenity_error "Do not run the script from the superuser!" yad_error "Do not run the script from the superuser!"
exit 1 exit 1
fi fi
...@@ -832,14 +844,14 @@ cd "${PORT_SCRIPTS_PATH}" ...@@ -832,14 +844,14 @@ cd "${PORT_SCRIPTS_PATH}"
export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts" export STEAM_SCRIPTS="${PORT_WINE_PATH}/steam_scripts"
export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}" export PW_PLUGINS_PATH="${PORT_WINE_TMP_PATH}/plugins${PW_PLUGINS_VER}"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
. "${PORT_SCRIPTS_PATH}"/lang . "${PORT_SCRIPTS_PATH}"/lang
. "${PORT_SCRIPTS_PATH}"/zen_yad_gui . "${PORT_SCRIPTS_PATH}"/yad_gui
export urlg="https://linux-gaming.ru/portproton/" export urlg="https://linux-gaming.ru/portproton/"
export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}" export PW_WINELIB="${PORT_WINE_TMP_PATH}/libs${PW_LIBS_VER}"
try_remove_dir "${PW_WINELIB}/var" try_remove_dir "${PW_WINELIB}/var"
export PW_GUI_ICON_PATH="${PORT_WINE_PATH}/data/img/gui"
export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1` export install_ver=`cat "${PORT_WINE_TMP_PATH}/${portname}_ver" | head -n 1`
export WINETRICKS_DOWNLOADER="curl" export WINETRICKS_DOWNLOADER="curl"
export USER_CONF="${PORT_WINE_PATH}/data/user.conf" export USER_CONF="${PORT_WINE_PATH}/data/user.conf"
...@@ -848,11 +860,11 @@ check_user_conf ...@@ -848,11 +860,11 @@ check_user_conf
if [[ -z "${INSTALLING_PORT}" ]] ; then if [[ -z "${INSTALLING_PORT}" ]] ; then
. "${USER_CONF}" . "${USER_CONF}"
pw_port_update pw_port_update
pw_check_and_download_plugins
pw_download_libs pw_download_libs
export PW_VULKANINFO_PORTABLE="$PW_WINELIB/pressure-vessel/libexec/steam-runtime-tools-0/x86_64-linux-gnu-vulkaninfo" export PW_VULKANINFO_PORTABLE="$PW_WINELIB/pressure-vessel/libexec/steam-runtime-tools-0/x86_64-linux-gnu-vulkaninfo"
export VULKAN_API_DRIVER_VERSION="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep "api" | head -n 1 | awk '{print $3}')" export VULKAN_API_DRIVER_VERSION="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep "api" | head -n 1 | awk '{print $3}')"
export VULKAN_DRIVER_NAME="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep driverName | awk '{print$3}' | head -1)" export VULKAN_DRIVER_NAME="$("$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep driverName | awk '{print$3}' | head -1)"
pw_check_and_download_plugins
pw_init_db pw_init_db
. "${PORT_SCRIPTS_PATH}"/lang . "${PORT_SCRIPTS_PATH}"/lang
pw_check_and_download_dxvk_and_vkd3d pw_check_and_download_dxvk_and_vkd3d
......
...@@ -6,6 +6,7 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then ...@@ -6,6 +6,7 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then
name_desktop="PortProton" name_desktop="PortProton"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=flatpak run com.castrofidel.portproton" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Exec=flatpak run com.castrofidel.portproton" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
...@@ -17,20 +18,21 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then ...@@ -17,20 +18,21 @@ if grep -i "flatpak" /etc/os-release &>/dev/null ; then
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
else else
name_desktop="PortProton" name_desktop="PortProton"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Exec=env "${PORT_SCRIPTS_PATH}/start.sh %F"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Exec=env "${PORT_SCRIPTS_PATH}/start.sh %F"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Type=Application" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Terminal=False" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Categories=Game" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "StartupNotify=true" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "MimeType=application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "MimeType=application/x-ms-dos-executable;application/x-wine-extension-msp;application/x-msi;application/x-msdos-program" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Path="${PORT_SCRIPTS_PATH}/"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/w.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Icon="${PORT_WINE_PATH}/data/img/w.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
fi fi
if [ -z "${PW_AUTOPLAY}" ] ; then if [[ ! -f /usr/bin/portproton ]]; then
cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/ cp -f "${PORT_WINE_PATH}/${name_desktop}.desktop" ${HOME}/.local/share/applications/
fi fi
...@@ -41,49 +43,25 @@ if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then ...@@ -41,49 +43,25 @@ if ! grep -i "flatpak" /etc/os-release &>/dev/null ; then
fi fi
name_desktop="readme" name_desktop="readme"
echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "[Desktop Entry]" > "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Name=${name_desktop}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Version=1.3" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Version=${install_ver}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Type=Link" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Type=Link" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "Icon="${PORT_WINE_PATH}/data/img/readme.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "Icon="${PORT_WINE_PATH}/data/img/readme.png"" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
echo "URL=${urlg}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop" echo "URL=${urlg}" >> "${PORT_WINE_PATH}/${name_desktop}.desktop"
chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop" chmod u+x "${PORT_WINE_PATH}/${name_desktop}.desktop"
if [ "${PW_SILENT_INSTALL}" = "1" ] ; then if [ "${PW_SILENT_INSTALL}" = "1" ] ; then
if [ "${PW_AUTOPLAY}" = "1" ] ; then if [ "${PW_AUTOPLAY}" = "1" ] ; then
unset INSTALLING_PORT unset INSTALLING_PORT
if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] ; then if [[ -f "${HOME}/.local/share/applications/PortProton.desktop" ]] && [[ -f /usr/bin/portproton ]] ; then
export PW_OLD_PATH=`cat "${HOME}/.local/share/applications/PortProton.desktop" | grep -w 'Path=' | sed -E 's/Path=//' | sed -E 's%\/PortProton\/data\/scripts\/%%g' `
echo "PW_OLD_PATH=${PW_OLD_PATH}"
try_remove_file "${HOME}/.local/share/applications/PortProton.desktop" try_remove_file "${HOME}/.local/share/applications/PortProton.desktop"
fi fi
if [[ ! -z "${PW_OLD_PATH}" ]] ; then
if [[ "${PW_OLD_PATH}"* == "${HOME}/PortWINE"* ]] & [[ -d "${HOME}/PortWINE" ]] ; then
echo "Old path = ${HOME}/PortWINE"
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
mv -f "${HOME}/PortWINE" "${XDG_DATA_HOME}"
elif [[ "${PW_OLD_PATH}"* == "${PW_OLD_PATH}/PortWINE"* ]] & [[ -d "${PW_OLD_PATH}/PortWINE" ]] ; then
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
ln -s "${PW_OLD_PATH}/PortWINE" "${XDG_DATA_HOME}/"
elif [[ "${PW_OLD_PATH}"* == "${PW_OLD_PATH}/PortProton"* ]] & [[ -d "${PW_OLD_PATH}/PortProton" ]] ; then
try_remove_dir "${XDG_DATA_HOME}/PortWINE"
create_new_dir "${XDG_DATA_HOME}/PortWINE"
ln -s "${PW_OLD_PATH}/PortProton" "${XDG_DATA_HOME}/PortWINE"
fi
fi
if [ ! -L "${HOME}/PortWINE" ] && [ -d "${XDG_DATA_HOME}/PortWINE" ] ; then
ln -s "${XDG_DATA_HOME}/PortWINE" "${HOME}/"
else
echo "Symbolic link already exists."
fi
echo "Restarting PP after installing..." echo "Restarting PP after installing..."
/usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ & /usr/bin/env bash -c "${PORT_WINE_PATH}/data/scripts/start.sh" $@ &
exit 0 exit 0
else else
echo "Installation completed successfully." echo "Installation completed successfully."
fi fi
else
`zenity --info --title "${inst_set_top}" --text "${inst_succ}" --no-wrap ` > /dev/null 2>&1
xdg-open "https://linux-gaming.ru/portproton/" > /dev/null 2>&1 & exit 0
fi fi
unset INSTALLING_PORT unset INSTALLING_PORT
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
export NO_AT_BRIDGE=1 export NO_AT_BRIDGE=1
export pw_full_command_line=("$0" $*) export pw_full_command_line=("$0" $*)
export YAD_BORDERS=5
MISSING_DESKTOP_FILE=0 MISSING_DESKTOP_FILE=0
if [[ -f "$1" ]] ; then if [[ -f "$1" ]] ; then
...@@ -36,7 +37,7 @@ if [[ -f "$portwine_exe" ]] \ ...@@ -36,7 +37,7 @@ if [[ -f "$portwine_exe" ]] \
&& [[ "${WARN_CYRILLIC_IN_PATH}" != 1 ]] \ && [[ "${WARN_CYRILLIC_IN_PATH}" != 1 ]] \
&& echo "${portwine_exe}" | grep -e $'[\u0430-\u044F\u0410-\u042F]' &>/dev/null && echo "${portwine_exe}" | grep -e $'[\u0430-\u044F\u0410-\u042F]' &>/dev/null
then then
zenity_info "$loc_warn_cyrillic_in_path" yad_info "$loc_warn_cyrillic_in_path"
export WARN_CYRILLIC_IN_PATH="1" export WARN_CYRILLIC_IN_PATH="1"
fi fi
...@@ -99,7 +100,7 @@ portwine_start_debug () { ...@@ -99,7 +100,7 @@ portwine_start_debug () {
export PW_LOG=1 export PW_LOG=1
export PW_WINEDBG_DISABLE=0 export PW_WINEDBG_DISABLE=0
if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then if [[ -z "$VULKAN_DRIVER_NAME" ]] || [[ "$VULKAN_DRIVER_NAME" == "llvmpipe" ]] ; then
zenity_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!" yad_info "Attention working version of vulkan not detected!\nIt is recommended to run games in OpenGL (low performance possible)!"
fi fi
echo "${port_deb1}" > "${PORT_WINE_PATH}/${portname}.log" echo "${port_deb1}" > "${PORT_WINE_PATH}/${portname}.log"
echo "${port_deb2}" >> "${PORT_WINE_PATH}/${portname}.log" echo "${port_deb2}" >> "${PORT_WINE_PATH}/${portname}.log"
...@@ -182,7 +183,7 @@ portwine_start_debug () { ...@@ -182,7 +183,7 @@ portwine_start_debug () {
[[ `command -v glxinfo` ]] && glxinfo -B >> "${PORT_WINE_PATH}/${portname}.log" [[ `command -v glxinfo` ]] && glxinfo -B >> "${PORT_WINE_PATH}/${portname}.log"
echo "-----" >> "${PORT_WINE_PATH}/${portname}.log" echo "-----" >> "${PORT_WINE_PATH}/${portname}.log"
echo "inxi -G:" >> "${PORT_WINE_PATH}/${portname}.log" echo "inxi -G:" >> "${PORT_WINE_PATH}/${portname}.log"
"${PW_WINELIB}/portable/bin/inxi" -Gc0 >> "${PORT_WINE_PATH}/${portname}.log" "${PW_PLUGINS_PATH}/portable/bin/inxi" -Gc0 >> "${PORT_WINE_PATH}/${portname}.log"
if echo "$LSPCI_VGA" | grep -i nvidia &>/dev/null ; then if echo "$LSPCI_VGA" | grep -i nvidia &>/dev/null ; then
if command -v ldconfig &>/dev/null ; then if command -v ldconfig &>/dev/null ; then
echo "------" >> "${PORT_WINE_PATH}/${portname}.log" echo "------" >> "${PORT_WINE_PATH}/${portname}.log"
...@@ -193,7 +194,7 @@ portwine_start_debug () { ...@@ -193,7 +194,7 @@ portwine_start_debug () {
echo "----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log" echo "----------------------------------------------" >> "${PORT_WINE_PATH}/${portname}.log"
echo "Vulkan info device name:" >> "${PORT_WINE_PATH}/${portname}.log" echo "Vulkan info device name:" >> "${PORT_WINE_PATH}/${portname}.log"
"$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -E '^GPU|deviceName|driverName' >> "${PORT_WINE_PATH}/${portname}.log" "$PW_VULKANINFO_PORTABLE" 2>/dev/null | grep -E '^GPU|deviceName|driverName' >> "${PORT_WINE_PATH}/${portname}.log"
"${PW_WINELIB}/portable/bin/vkcube" --c 50 "${PW_PLUGINS_PATH}/portable/bin/vkcube" --c 50
if [ $? -eq 0 ]; then if [ $? -eq 0 ]; then
echo "Vulkan cube test passed successfully" >> "${PORT_WINE_PATH}/${portname}.log" echo "Vulkan cube test passed successfully" >> "${PORT_WINE_PATH}/${portname}.log"
else else
...@@ -255,7 +256,7 @@ portwine_start_debug () { ...@@ -255,7 +256,7 @@ portwine_start_debug () {
sed -i '/wine: RLIMIT_NICE is <= 20/d' "${PORT_WINE_PATH}/${portname}.log" sed -i '/wine: RLIMIT_NICE is <= 20/d' "${PORT_WINE_PATH}/${portname}.log"
deb_text=$(cat "${PORT_WINE_PATH}/${portname}.log" | awk '! a[$0]++') deb_text=$(cat "${PORT_WINE_PATH}/${portname}.log" | awk '! a[$0]++')
echo "$deb_text" > "${PORT_WINE_PATH}/${portname}.log" echo "$deb_text" > "${PORT_WINE_PATH}/${portname}.log"
"$pw_yad" --title="${portname}.log" --borders=3 --no-buttons --text-align=center \ "$pw_yad" --title="${portname}.log" --borders=${YAD_BORDERS} --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=550 --uri-color=red \ --text-info --show-uri --wrap --width=1200 --height=550 --uri-color=red \
--filename="${PORT_WINE_PATH}/${portname}.log" --filename="${PORT_WINE_PATH}/${portname}.log"
stop_portwine stop_portwine
...@@ -349,8 +350,8 @@ pw_prefix_manager () { ...@@ -349,8 +350,8 @@ pw_prefix_manager () {
--text="${loc_prefix_manager_conf} <b>\"${PW_PREFIX_NAME}\"</b>" \ --text="${loc_prefix_manager_conf} <b>\"${PW_PREFIX_NAME}\"</b>" \
--column=set --column=dll --column=info < "${PORT_WINE_TMP_PATH}/settings_list_tmp" 1>> "${PORT_WINE_TMP_PATH}/to_winetricks" 2>/dev/null & --column=set --column=dll --column=info < "${PORT_WINE_TMP_PATH}/settings_list_tmp" 1>> "${PORT_WINE_TMP_PATH}/to_winetricks" 2>/dev/null &
"${pw_yad_v12_3}" --key=$KEY_EDIT_MANAGER_GUI --notebook --borders=3 --width=900 --height=800 \ "${pw_yad_v12_3}" --key=$KEY_EDIT_MANAGER_GUI --notebook --borders=${YAD_BORDERS} --width=900 --height=800 \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "$loc_pm" --tab-pos=bottom --tab="$loc_pm_dlls" --tab="$loc_pm_fonts" --tab="$loc_pm_settings" 2>/dev/null --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$loc_pm" --tab-pos=bottom --tab="$loc_pm_dlls" --tab="$loc_pm_fonts" --tab="$loc_pm_settings" 2>/dev/null
YAD_STATUS="$?" YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then
stop_portwine stop_portwine
...@@ -430,8 +431,8 @@ pw_start_cont_xterm () { ...@@ -430,8 +431,8 @@ pw_start_cont_xterm () {
pw_create_prefix_backup () { pw_create_prefix_backup () {
cd "$HOME" cd "$HOME"
PW_PREFIX_TO_BACKUP=$("${pw_yad_v12_3}" --file --directory --borders=3 --width=650 --height=500 --auto-close \ PW_PREFIX_TO_BACKUP=$("${pw_yad_v12_3}" --file --directory --borders=${YAD_BORDERS} --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "$loc_create_pfx_backup_path" 2>/dev/null ) --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "$loc_create_pfx_backup_path" 2>/dev/null )
YAD_STATUS="$?" YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
if [[ ! -z "$(grep "/${PW_PREFIX_NAME}/" "${PORT_WINE_PATH}"/*.desktop )" ]] ; then if [[ ! -z "$(grep "/${PW_PREFIX_NAME}/" "${PORT_WINE_PATH}"/*.desktop )" ]] ; then
...@@ -459,13 +460,13 @@ pw_create_prefix_backup () { ...@@ -459,13 +460,13 @@ pw_create_prefix_backup () {
done done
if [[ -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" ]] ; then if [[ -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" ]] ; then
mv -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack" mv -f "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack.part" "${PW_PREFIX_TO_BACKUP}/${PW_PREFIX_NAME}.ppack"
zenity_info "$PW_PFX_BACKUP_SUCCESS" yad_info "$PW_PFX_BACKUP_SUCCESS"
if [[ ! -f "${PORT_WINE_TMP_PATH}/pfx_backup_info" ]] ; then if [[ ! -f "${PORT_WINE_TMP_PATH}/pfx_backup_info" ]] ; then
zenity_info "$PW_PFX_BACKUP_INFO" yad_info "$PW_PFX_BACKUP_INFO"
echo "1" > "${PORT_WINE_TMP_PATH}/pfx_backup_info" echo "1" > "${PORT_WINE_TMP_PATH}/pfx_backup_info"
fi fi
else else
zenity_error "$PW_PFX_BACKUP_ERROR" yad_error "$PW_PFX_BACKUP_ERROR"
fi fi
return 0 return 0
...@@ -475,14 +476,14 @@ pw_edit_db () { ...@@ -475,14 +476,14 @@ pw_edit_db () {
if [[ "${XDG_SESSION_TYPE}" == "wayland" ]] ; then if [[ "${XDG_SESSION_TYPE}" == "wayland" ]] ; then
pw_gui_for_edit_db \ pw_gui_for_edit_db \
PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \ PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \ PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_USE_FAKE_DLSS_3 PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME PW_REDUCE_PULSE_LATENCY \ PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME PW_REDUCE_PULSE_LATENCY \
PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \ PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
else else
pw_gui_for_edit_db \ pw_gui_for_edit_db \
PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \ PW_MANGOHUD PW_MANGOHUD_USER_CONF ENABLE_VKBASALT PW_VKBASALT_USER_CONF PW_NO_ESYNC PW_NO_FSYNC PW_USE_RAY_TRACING \
PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \ PW_USE_NVAPI_AND_DLSS PW_USE_FAKE_DLSS PW_USE_FAKE_DLSS_3 PW_WINE_FULLSCREEN_FSR PW_HIDE_NVIDIA_GPU PW_VIRTUAL_DESKTOP PW_USE_TERMINAL \
PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME \ PW_GUI_DISABLED_CS PW_USE_GAMEMODE PW_USE_D3D_EXTRAS PW_FIX_VIDEO_IN_GAME \
PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \ PW_REDUCE_PULSE_LATENCY PW_USE_US_LAYOUT PW_USE_GSTREAMER PW_FORCE_LARGE_ADDRESS_AWARE PW_USE_SHADER_CACHE \
PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE PW_USE_WINE_DXGI PW_USE_EAC_AND_BE PW_USE_SYSTEM_VK_LAYERS PW_USE_OBS_VKCAPTURE PW_USE_GALLIUM_ZINK PW_USE_GAMESCOPE
...@@ -626,9 +627,9 @@ if [[ -f "${portwine_exe}" ]] ; then ...@@ -626,9 +627,9 @@ if [[ -f "${portwine_exe}" ]] ; then
else else
PW_SHORTCUT="${loc_gui_delete_shortcut}!$PW_GUI_ICON_PATH/separator.png!${loc_delete_shortcut}:98" PW_SHORTCUT="${loc_gui_delete_shortcut}!$PW_GUI_ICON_PATH/separator.png!${loc_delete_shortcut}:98"
fi fi
OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --borders=3 --form \ OUTPUT_START=$("${pw_yad}" --text-align=center --text "$PW_COMMENT_DB" --borders=${YAD_BORDERS} --form \
--title "${portname}-${install_ver} (${scripts_install_ver})" --image "${PW_ICON_FOR_YAD}" --separator=";" --keep-icon-size \ --title "${portname}-${install_ver} (${scripts_install_ver})" --image "${PW_ICON_FOR_YAD}" --separator=";" --keep-icon-size \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--field="3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \ --field="3D API : :CB" "${PW_DEFAULT_VULKAN_USE}" \
--field=" WINE : :CB" "${PW_DEFAULT_WINE_USE}" \ --field=" WINE : :CB" "${PW_DEFAULT_WINE_USE}" \
--field="PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \ --field="PREFIX : :CBE" "${PW_ADD_PREFIXES_TO_GUI}" \
...@@ -728,8 +729,8 @@ else ...@@ -728,8 +729,8 @@ else
gui_open_scripts_from_backup () { gui_open_scripts_from_backup () {
cd "${PORT_WINE_TMP_PATH}/scripts_backup/" cd "${PORT_WINE_TMP_PATH}/scripts_backup/"
PW_SCRIPT_FROM_BACKUP=$("${pw_yad_v12_3}" --file --borders=3 --width=650 --height=500 --auto-close \ PW_SCRIPT_FROM_BACKUP=$("${pw_yad_v12_3}" --file --borders=${YAD_BORDERS} --width=650 --height=500 --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "SCRIPTS FROM BACKUP" --file-filter="backup_scripts|scripts_v*.tar.gz" 2>/dev/null ) --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "SCRIPTS FROM BACKUP" --file-filter="backup_scripts|scripts_v*.tar.gz" 2>/dev/null )
YAD_STATUS="$?" YAD_STATUS="$?"
if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi if [[ "$YAD_STATUS" == "1" || "$YAD_STATUS" == "252" ]] ; then exit 0 ; fi
unpack_tar_gz "$PW_SCRIPT_FROM_BACKUP" "${PORT_WINE_PATH}/data/" unpack_tar_gz "$PW_SCRIPT_FROM_BACKUP" "${PORT_WINE_PATH}/data/"
...@@ -861,8 +862,8 @@ else ...@@ -861,8 +862,8 @@ else
export START_FROM_PP_GUI=1 export START_FROM_PP_GUI=1
if [[ -z "${PW_ALL_DF}" ]] ; then if [[ -z "${PW_ALL_DF}" ]] ; then
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=3 --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \ "${pw_yad_v12_3}" --key=$KEY --notebook --borders=${YAD_BORDERS} --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "${portname}-${install_ver} (${scripts_install_ver})" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${portname}-${install_ver} (${scripts_install_ver})" \
--tab-pos=bottom --keep-icon-size \ --tab-pos=bottom --keep-icon-size \
--tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \ --tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \
--tab="$loc_mg_emulators"!"$PW_GUI_ICON_PATH/separator.png"!"" \ --tab="$loc_mg_emulators"!"$PW_GUI_ICON_PATH/separator.png"!"" \
...@@ -871,8 +872,8 @@ else ...@@ -871,8 +872,8 @@ else
--tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" 2>/dev/null --tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" 2>/dev/null
YAD_STATUS="$?" YAD_STATUS="$?"
else else
"${pw_yad_v12_3}" --key=$KEY --notebook --borders=3 --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \ "${pw_yad_v12_3}" --key=$KEY --notebook --borders=${YAD_BORDERS} --width="${PW_MAIN_SIZE_W}" --height="${PW_MAIN_SIZE_H}" --no-buttons --auto-close \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "${portname}-${install_ver} (${scripts_install_ver})" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "${portname}-${install_ver} (${scripts_install_ver})" \
--tab-pos=bottom --keep-icon-size \ --tab-pos=bottom --keep-icon-size \
--tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" \ --tab="$loc_mg_installed"!"$PW_GUI_ICON_PATH/separator.png"!"" \
--tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \ --tab="$loc_mg_autoinstall"!"$PW_GUI_ICON_PATH/separator.png"!"" \
......
#!/usr/bin/env bash #!/usr/bin/env bash
#Author: Castro-Fidel (linux-gaming.ru) #Author: Castro-Fidel (linux-gaming.ru)
#SCRIPTS_NEXT_VERSION=2251 #SCRIPTS_NEXT_VERSION=2252
######################################################################## ########################################################################
export PW_MANGOHUD="0" export PW_MANGOHUD="0"
export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode" export DEFAULT_MANGOHUD_CONFIG="cpu_stats,cpu_temp,cpu_mhz,gpu_stats,gpu_temp,gpu_core_clock,gpu_mem_clock,vulkan_driver,gpu_name,vram,ram,frame_timing=1,time,arch,wine,toggle_hud=Shift_R+F12,resolution,vkbasalt,gamemode"
export PW_VKBASALT_EFFECTS="Curves:cas" export PW_VKBASALT_EFFECTS="Curves:cas"
export PW_VKBASALT_FFX_CAS="0.75" export PW_VKBASALT_FFX_CAS="0.66"
export ENABLE_VKBASALT=1
export GAMESCOPE_ARGS="-F fsr" export GAMESCOPE_ARGS="-F fsr"
export PW_RT_MOUNT_RO=("") export PW_RT_MOUNT_RO=("")
export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}") export PW_RT_MOUNT_RW=("/media" "/mnt" "/run/media/${USER}" "${PORT_WINE_PATH}")
...@@ -38,8 +39,10 @@ export PW_USE_GAMESCOPE="0" ...@@ -38,8 +39,10 @@ export PW_USE_GAMESCOPE="0"
# export GTK_THEME="Adwaita:dark" # export GTK_THEME="Adwaita:dark"
###DEFAULT_WINE### ###DEFAULT_WINE###
export PW_WINE_USE="PROTON_LG" export PW_WINE_USE="PROTON_LG"
export PW_PLUGINS_VER="_v12" export PW_PLUGINS_VER="_v13"
export PW_FAKE_DLSS_VER="230506" export PW_FAKE_DLSS_VER="230506"
export PW_FAKE_DLSS_3_VER="090"
export PW_GALLIUM_NINE_VER="0.9"
###WINE_AND_PROTON_LG### ###WINE_AND_PROTON_LG###
export PW_PROTON_LG_VER="PROTON_LG_8-25-2" export PW_PROTON_LG_VER="PROTON_LG_8-25-2"
export PW_WINE_LG_VER="WINE_LG_9-0" export PW_WINE_LG_VER="WINE_LG_9-0"
......
#!/usr/bin/env bash #!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru) # Author: Castro-Fidel (linux-gaming.ru)
######################################################################## ########################################################################
zenity_info () { yad_info () {
print_info "$@" print_info "$@"
zenity --info --no-wrap --text "$@" 2> /dev/null if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --height=50 --borders=15 --title "INFO" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/info.png" \
--center --text-align=center --button=OK 2>/dev/null
} }
export -f zenity_info export -f yad_info
zenity_error () { yad_error () {
print_error "$@" print_error "$@"
zenity --error --no-wrap --text "$@" 2> /dev/null if [[ ! -f "${pw_yad_v12_3}" ]] ; then
local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --no-wrap --text "$@" --width=400 --borders=15 --title "ERROR" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/error.png" \
--center --text-align=center --button=EXIT 2>/dev/null
} }
export -f zenity_error export -f yad_error
zenity_error_download () { yad_error_download () {
zenity --question --title "$loc_gui_error" --text "$loc_gui_error_download\n" --no-wrap --ok-label="Repeat" --cancel-label="Skip" if [[ ! -f "${pw_yad_v12_3}" ]] ; then
if [[ "$?" != 0 ]] ; then local pw_yad_v12_3="yad"
return 1 command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
else
return 0
fi fi
"${pw_yad_v12_3}" --text "$loc_gui_error_download" --width=400 --borders=15 --title "$loc_gui_error" \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/download.png" \
--no-wrap --center --text-align=center --button=SKIP:1 --button=REPEAT:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
} }
gui_question () { gui_question () {
zenity --question --title "${inst_set}." --text "$1" --no-wrap &>/dev/null if [[ ! -f "${pw_yad_v12_3}" ]] ; then
[ $? -eq "0" ] && return 0 || return 1 local pw_yad_v12_3="yad"
command -v "${pw_yad_v12_3}" &>/dev/null || fatal "yad not found"
fi
"${pw_yad_v12_3}" --text "${1}" --width=400 --borders=15 --title "${inst_set}." \
--window-icon="$PW_GUI_ICON_PATH/portproton.svg" --image="$PW_GUI_ICON_PATH/question.png" \
--no-wrap --center --text-align=center --button=NO:1 --button=YES:0 2>/dev/null
[[ "$?" != 0 ]] && return 1 || return 0
} }
pw_start_progress_bar_cover () { pw_start_progress_bar_cover () {
...@@ -32,7 +52,7 @@ pw_start_progress_bar_cover () { ...@@ -32,7 +52,7 @@ pw_start_progress_bar_cover () {
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'` PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'` PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \ "${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/port_proton.png" > /dev/null 2>&1 & --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER="$!" export PW_YAD_PID_PROGRESS_BAR_COVER="$!"
return 0 return 0
} }
...@@ -43,7 +63,7 @@ pw_start_progress_bar_cover_block () { ...@@ -43,7 +63,7 @@ pw_start_progress_bar_cover_block () {
PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'` PW_GIF_SIZE_X=`file "${PW_GIF_FILE}" | awk '{print $7 + 20}'`
PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'` PW_GIF_SIZE_Y=`file "${PW_GIF_FILE}" | awk '{print $9 + 20}'`
"${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \ "${pw_yad}" --picture --filename="${PW_GIF_FILE}" --close-on-unfocus --no-buttons --undecorated --center \
--skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/port_proton.png" > /dev/null 2>&1 & --skip-taskbar --width=$PW_GIF_SIZE_X --height=$PW_GIF_SIZE_Y --window-icon="$PW_GUI_ICON_PATH/portproton.svg" > /dev/null 2>&1 &
export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!" export PW_YAD_PID_PROGRESS_BAR_COVER_BLOCK="$!"
return 0 return 0
} }
...@@ -113,7 +133,7 @@ pw_stop_progress_bar_cover_block () { ...@@ -113,7 +133,7 @@ pw_stop_progress_bar_cover_block () {
export -f pw_stop_progress_bar_cover_block export -f pw_stop_progress_bar_cover_block
open_changelog () { open_changelog () {
"${pw_yad}" --title="$loc_gui_changelog" --borders=3 --no-buttons --text-align=center \ "${pw_yad}" --title="$loc_gui_changelog" --borders=${YAD_BORDERS} --no-buttons --text-align=center \
--text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \ --text-info --show-uri --wrap --width=1200 --height=700 --uri-color=red \
--filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}" --filename="${PORT_WINE_PATH}/data/${PW_CHANGELOG_FILE}"
} }
...@@ -145,9 +165,9 @@ pw_tray_icon () { ...@@ -145,9 +165,9 @@ pw_tray_icon () {
} }
export -f tray_icon_click_exit export -f tray_icon_click_exit
# --window-icon="$PW_GUI_ICON_PATH/portproton_tray.png" \
"${pw_yad_v12_3}" --notification --no-middle \ "${pw_yad_v12_3}" --notification --no-middle \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ --image="$PW_GUI_ICON_PATH/portproton_tray.png" \
--image="$PW_GUI_ICON_PATH/port_proton.png" \
--command="bash -c tray_icon_click" \ --command="bash -c tray_icon_click" \
--tooltip="PortProton" \ --tooltip="PortProton" \
--menu="| \ --menu="| \
...@@ -227,8 +247,8 @@ pw_gui_for_edit_db () { ...@@ -227,8 +247,8 @@ pw_gui_for_edit_db () {
--field="${loc_gui_arg_gamescope}!${loc_gui_arg_gamescope_help} :CBE" "\\${GAMESCOPE_ARGS}!-r 60 -F fsr!" 2>/dev/null 1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" 2>/dev/null & --field="${loc_gui_arg_gamescope}!${loc_gui_arg_gamescope_help} :CBE" "\\${GAMESCOPE_ARGS}!-r 60 -F fsr!" 2>/dev/null 1> "${PORT_WINE_TMP_PATH}/tmp_output_yad_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_EDIT_DB_GUI" --title "EDIT_DB" --text-align=center --height="800" \ "${pw_yad_v12_3}" --paned --key="$KEY_EDIT_DB_GUI" --title "EDIT_DB" --text-align=center --height="800" \
--text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=3 \ --text "${loc_gui_edit_db} <b>${PORTWINE_DB}</b>\n ${loc_gui_edit_db_help}" --separator=" " --borders=${YAD_BORDERS} \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="${loc_gui_cancel}"!!"${loc_gui_cancel_help}":1 \ --button="${loc_gui_cancel}"!!"${loc_gui_cancel_help}":1 \
--button="${loc_gui_reset_db}"!!"${loc_gui_reset_db_help}":2 \ --button="${loc_gui_reset_db}"!!"${loc_gui_reset_db_help}":2 \
--button="${loc_gui_open_db}"!!"${loc_gui_open_db_help}":150 \ --button="${loc_gui_open_db}"!!"${loc_gui_open_db_help}":150 \
...@@ -325,7 +345,7 @@ gui_proton_downloader () { ...@@ -325,7 +345,7 @@ gui_proton_downloader () {
fi fi
pw_stop_progress_bar pw_stop_progress_bar
if [[ -z "${PROTON_GE_GIT}" ]] || [[ -z "${PROTON_PW_GIT}" ]] ; then if [[ -z "${PROTON_GE_GIT}" ]] || [[ -z "${PROTON_PW_GIT}" ]] ; then
zenity_error "$loc_gui_check_new_wine_error" yad_error "$loc_gui_check_new_wine_error"
/usr/bin/env bash -c ${pw_full_command_line[*]} & /usr/bin/env bash -c ${pw_full_command_line[*]} &
exit 0 exit 0
fi fi
...@@ -357,7 +377,7 @@ gui_proton_downloader () { ...@@ -357,7 +377,7 @@ gui_proton_downloader () {
`"${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --separator="" --listen \ `"${pw_yad}" --plug=$KEY_WINE --tabnum=5 --list --separator="" --listen \
--column "$loc_gui_del_wine" < "${PORT_WINE_TMP_PATH}/tmp_installed_wine" 1> "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" 2>/dev/null` & --column "$loc_gui_del_wine" < "${PORT_WINE_TMP_PATH}/tmp_installed_wine" 1> "${PORT_WINE_TMP_PATH}/tmp_installed_wine_set" 2>/dev/null` &
`"${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \ `"${pw_yad}" --key=$KEY_WINE --notebook --width=500 --height=600 --text-align=center \
--window-icon="$PW_GUI_ICON_PATH/port_proton.png" --title "WINE MANAGER" --separator="" \ --window-icon="$PW_GUI_ICON_PATH/portproton.svg" --title "WINE MANAGER" --separator="" \
--tab-pos=top --tab="PROTON-LG" --tab="WINE-KRON4EK" --tab="PROTON-GE" --tab="WINE-GE-CUSTOM" --tab="$loc_gui_installed_wine" 2>/dev/null` --tab-pos=top --tab="PROTON-LG" --tab="WINE-KRON4EK" --tab="PROTON-GE" --tab="WINE-GE-CUSTOM" --tab="$loc_gui_installed_wine" 2>/dev/null`
YAD_WINE_STATUS="$?" YAD_WINE_STATUS="$?"
if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then if [[ "$YAD_WINE_STATUS" == "1" || "$YAD_WINE_STATUS" == "252" ]] ; then
...@@ -419,12 +439,12 @@ gui_proton_downloader () { ...@@ -419,12 +439,12 @@ gui_proton_downloader () {
else else
try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}" try_remove_file "${PORT_WINE_PATH}/data/tmp/${PW_WINE_ARCHIVE}.tar.${archive_type}"
try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_ARCHIVE}" try_remove_dir "${PORT_WINE_PATH}/data/dist/${PW_WINE_ARCHIVE}"
zenity_error_download && gui_proton_downloader || exit 1 yad_error_download && gui_proton_downloader || exit 1
fi fi
fi fi
done done
else else
zenity_error_download && gui_proton_downloader || exit 1 yad_error_download && gui_proton_downloader || exit 1
fi fi
if [[ "$1" != "silent" ]] ; then if [[ "$1" != "silent" ]] ; then
...@@ -451,9 +471,16 @@ gui_vkBasalt () { ...@@ -451,9 +471,16 @@ gui_vkBasalt () {
fi fi
done done
if [[ ! -z "${PW_VKBASALT_FFX_CAS}" ]] ; then if [[ ! -z "${PW_VKBASALT_FFX_CAS}" ]] ; then
VKBASALT_FFX_CAS_GUI=`bc -s <<< "${PW_VKBASALT_FFX_CAS}*100" | sed 's/\..*//'` if [[ "$PW_VKBASALT_FFX_CAS" == "0" ]]
then export VKBASALT_FFX_CAS_GUI="0"
elif [[ "$PW_VKBASALT_FFX_CAS" == "1" ]]
then export VKBASALT_FFX_CAS_GUI="100"
elif [[ "$PW_VKBASALT_FFX_CAS" == 0.0* ]]
then export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.0' '{print $2}')"
else export VKBASALT_FFX_CAS_GUI="$(echo "$PW_VKBASALT_FFX_CAS" | awk -F'0.' '{print $2}')"
fi
else else
VKBASALT_FFX_CAS_GUI=75 VKBASALT_FFX_CAS_GUI=66
fi fi
export old_IFS=$IFS export old_IFS=$IFS
export IFS="%" export IFS="%"
...@@ -466,8 +493,8 @@ gui_vkBasalt () { ...@@ -466,8 +493,8 @@ gui_vkBasalt () {
--field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$loc_gui_ffx_cas":SCL "${VKBASALT_FFX_CAS_GUI}" \ --field="AMD FidelityFX - Contrast Adaptive Sharpening"!"$loc_gui_ffx_cas":SCL "${VKBASALT_FFX_CAS_GUI}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" 2>/dev/null & 1> "${PORT_WINE_TMP_PATH}/tmp_yad_cas_set" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=3 \ "${pw_yad_v12_3}" --paned --key="$KEY_FX_GUI" --height="650" --title="vkBasalt" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \ --button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_vkbas"!!"$loc_gui_disabled_vkbas_help":180 \ --button="$loc_gui_disabled_vkbas"!!"$loc_gui_disabled_vkbas_help":180 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":182 2>/dev/null --button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":182 2>/dev/null
...@@ -494,12 +521,13 @@ gui_vkBasalt () { ...@@ -494,12 +521,13 @@ gui_vkBasalt () {
GUI_FX_RESULT="${GUI_FX_RESULT}cas" GUI_FX_RESULT="${GUI_FX_RESULT}cas"
export PW_VKBASALT_EFFECTS="${GUI_FX_RESULT}" export PW_VKBASALT_EFFECTS="${GUI_FX_RESULT}"
if [[ "$YAD_CAS_SET" == "0" ]] ; then if [[ "$YAD_CAS_SET" == "0" ]]
export PW_VKBASALT_FFX_CAS="0" then export PW_VKBASALT_FFX_CAS="0"
elif [[ "$YAD_CAS_SET" == "100" ]] ; then elif [[ "$YAD_CAS_SET" == "100" ]]
export PW_VKBASALT_FFX_CAS="1" then export PW_VKBASALT_FFX_CAS="1"
else elif [[ "$YAD_CAS_SET" -lt 10 ]]
export PW_VKBASALT_FFX_CAS="0`bc -s <<< "scale=2; $YAD_CAS_SET/100"`" then export PW_VKBASALT_FFX_CAS="0.0$YAD_CAS_SET"
else export PW_VKBASALT_FFX_CAS="0.$YAD_CAS_SET"
fi fi
edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS ENABLE_VKBASALT edit_db_from_gui PW_VKBASALT_EFFECTS PW_VKBASALT_FFX_CAS ENABLE_VKBASALT
/usr/bin/env bash -c ${pw_full_command_line[*]} & /usr/bin/env bash -c ${pw_full_command_line[*]} &
...@@ -557,8 +585,8 @@ gui_MangoHud () { ...@@ -557,8 +585,8 @@ gui_MangoHud () {
--field="${loc_gui_mango_fps}!${loc_gui_mango_fps_help} :CB" "${FPS_LIMIT_VAR}!disabled!${GET_REFRESH_RATE}" \ --field="${loc_gui_mango_fps}!${loc_gui_mango_fps_help} :CB" "${FPS_LIMIT_VAR}!disabled!${GET_REFRESH_RATE}" \
1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null & 1> "${PORT_WINE_TMP_PATH}/tmp_yad_mh_fps_limit" 2>/dev/null &
"${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=3 \ "${pw_yad_v12_3}" --paned --key="$KEY_MH_GUI" --height="650" --title="MangoHud" --center --borders=${YAD_BORDERS} \
--separator=" " --window-icon="$PW_GUI_ICON_PATH/port_proton.png" \ --separator=" " --window-icon="$PW_GUI_ICON_PATH/portproton.svg" \
--button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \ --button="$loc_gui_cancel"!!"$loc_gui_cancel_help":1 \
--button="$loc_gui_disabled_mh"!!"$loc_gui_disabled_mh_help":182 \ --button="$loc_gui_disabled_mh"!!"$loc_gui_disabled_mh_help":182 \
--button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":184 2>/dev/null --button="$loc_gui_save_changes"!!"$loc_gui_save_changes_help":184 2>/dev/null
...@@ -627,8 +655,8 @@ portwine_create_shortcut () { ...@@ -627,8 +655,8 @@ portwine_create_shortcut () {
if [[ "$1" == "block_name" ]] ; then if [[ "$1" == "block_name" ]] ; then
export name_desktop="${PORTPROTON_NAME}" export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=3 \ OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \ --image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \ --field="${sc_info}":LBL "" \
--field=" ${name_desktop}":LBL "" \ --field=" ${name_desktop}":LBL "" \
...@@ -639,8 +667,8 @@ portwine_create_shortcut () { ...@@ -639,8 +667,8 @@ portwine_create_shortcut () {
PW_YAD_OUT=$? PW_YAD_OUT=$?
else else
export name_desktop="${PORTPROTON_NAME}" export name_desktop="${PORTPROTON_NAME}"
OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=3 \ OUTPUT=$("${pw_yad}" --title="${inst_set}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \ --image "${PORT_WINE_PATH}/data/img/${PORTPROTON_NAME}.png" \
--field="${sc_info}":LBL "" \ --field="${sc_info}":LBL "" \
--field="${sc_name}:" "${name_desktop}" \ --field="${sc_name}:" "${name_desktop}" \
...@@ -743,8 +771,8 @@ portwine_delete_shortcut () { ...@@ -743,8 +771,8 @@ portwine_delete_shortcut () {
} }
portwine_missing_shortcut () { portwine_missing_shortcut () {
"${pw_yad}" --title="${loc_gui_error}." --form --borders=3 \ "${pw_yad}" --title="${loc_gui_error}." --form --borders=${YAD_BORDERS} \
--window-icon "$PW_GUI_ICON_PATH/port_proton.png" \ --window-icon "$PW_GUI_ICON_PATH/portproton.svg" \
--image "$PW_GUI_ICON_PATH/error_file.png" \ --image "$PW_GUI_ICON_PATH/error_file.png" \
--text "$loc_gui_missing_shortcut" \ --text "$loc_gui_missing_shortcut" \
--button="$loc_gui_delete_shortcut":0 \ --button="$loc_gui_delete_shortcut":0 \
......
...@@ -4,6 +4,7 @@ reshadeIncludePath = /run/pressure-vessel/pv-from-host/reshade ...@@ -4,6 +4,7 @@ reshadeIncludePath = /run/pressure-vessel/pv-from-host/reshade
FilmGrain2 = /run/pressure-vessel/pv-from-host/reshade/shaders/FilmGrain2.fx FilmGrain2 = /run/pressure-vessel/pv-from-host/reshade/shaders/FilmGrain2.fx
Curves = /run/pressure-vessel/pv-from-host/reshade/shaders/Curves.fx Curves = /run/pressure-vessel/pv-from-host/reshade/shaders/Curves.fx
FakeHDR = /run/pressure-vessel/pv-from-host/reshade/shaders/FakeHDR.fx FakeHDR = /run/pressure-vessel/pv-from-host/reshade/shaders/FakeHDR.fx
LevelsPlus = /run/pressure-vessel/pv-from-host/reshade/shaders/LevelsPlus.fx
Colourfulness = /run/pressure-vessel/pv-from-host/reshade/shaders/Colourfulness.fx Colourfulness = /run/pressure-vessel/pv-from-host/reshade/shaders/Colourfulness.fx
Bloom = /run/pressure-vessel/pv-from-host/reshade/shaders/Bloom.fx Bloom = /run/pressure-vessel/pv-from-host/reshade/shaders/Bloom.fx
SMAA = /run/pressure-vessel/pv-from-host/reshade/shaders/SMAA.fx SMAA = /run/pressure-vessel/pv-from-host/reshade/shaders/SMAA.fx
...@@ -20,10 +21,7 @@ HighPassSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/HighPassShar ...@@ -20,10 +21,7 @@ HighPassSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/HighPassShar
HQ4X = /run/pressure-vessel/pv-from-host/reshade/shaders/HQ4X.fx HQ4X = /run/pressure-vessel/pv-from-host/reshade/shaders/HQ4X.fx
HSLShift = /run/pressure-vessel/pv-from-host/reshade/shaders/HSLShift.fx HSLShift = /run/pressure-vessel/pv-from-host/reshade/shaders/HSLShift.fx
Layer = /run/pressure-vessel/pv-from-host/reshade/shaders/Layer.fx Layer = /run/pressure-vessel/pv-from-host/reshade/shaders/Layer.fx
Levels = /run/pressure-vessel/pv-from-host/reshade/shaders/Levels.fx
LevelsPlus = /run/pressure-vessel/pv-from-host/reshade/shaders/LevelsPlus.fx
LiftGammaGain = /run/pressure-vessel/pv-from-host/reshade/shaders/LiftGammaGain.fx LiftGammaGain = /run/pressure-vessel/pv-from-host/reshade/shaders/LiftGammaGain.fx
LightDoF = /run/pressure-vessel/pv-from-host/reshade/shaders/LightDoF.fx
LumaSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/LumaSharpen.fx LumaSharpen = /run/pressure-vessel/pv-from-host/reshade/shaders/LumaSharpen.fx
LUT = /run/pressure-vessel/pv-from-host/reshade/shaders/LUT.fx LUT = /run/pressure-vessel/pv-from-host/reshade/shaders/LUT.fx
MagicBloom = /run/pressure-vessel/pv-from-host/reshade/shaders/MagicBloom.fx MagicBloom = /run/pressure-vessel/pv-from-host/reshade/shaders/MagicBloom.fx
......
#!/usr/bin/env bash #!/usr/bin/env bash
# Author: Castro-Fidel (linux-gaming.ru) # Author: Mikhail Tergoev (linux-gaming.ru)
# License MIT # License MIT
######################################################################## ########################################################################
unset PW_AUTOPLAY PW_SET_LANG PW_SILENT_INSTALL unset PW_AUTOPLAY PW_SET_LANG PW_SILENT_INSTALL
export portname="PortProton" export portname="PortProton"
export port_ver=1.0 export port_ver=1.4
######################################################################## ########################################################################
export NO_AT_BRIDGE=1 cd "$(dirname "$(readlink -f "$0")")"
ENG_LANG="English" script_path="$(pwd)"
RUS_LANG="Russian" def_path="${HOME}/${portname}"
[ -z "${LANG}" ] && export LANG=C ########################################################################
deflink="${HOME}/PortWINE/${portname}" fatal () {
[ "$(id -u)" -eq 0 ] && echo "This script should NOT be run by root!" && zenity --error --text "This script should NOT be run by root!" 2> /dev/null && exit 1 echo -e "\n${1}\n"
my_dir=$(dirname "$(readlink -f "$0")") exit 1
if [ "$my_dir" == "/usr/bin" ] ; then }
[ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share"
if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then pw_notify_send () {
/usr/bin/env bash "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" "$@" if command -v notify-send &>/dev/null ; then
exit 0 if [[ -f "/usr/share/icons/hicolor/scalable/apps/portproton.svg" ]]
else then notify-send -u normal -a PortProton -i "/usr/share/icons/hicolor/scalable/apps/portproton.svg" $@ "${PW_NOTIFY_TEXT}"
if [ ! -z "$(locale | grep "LANG=ru_RU.UTF-8")" ] ; then else notify-send -u normal -a PortProton $@ "${PW_NOTIFY_TEXT}"
PW_SET_LANG=$RUS_LANG
else
PW_SET_LANG=$ENG_LANG
fi fi
export PW_SILENT_INSTALL="1"
export PW_AUTOPLAY=1
deflink="${XDG_DATA_HOME}/PortWINE/${portname}"
fi fi
fi }
######################################################################## ########################################################################
export INSTALLING_PORT=1 if [ "$(id -u)" == "0" ] ; then
export PROGS_INST="" $yad_gui --error --text "\nDo not run ${portname} from the superuser!" 2>/dev/null
export vexit=0 fatal "Do not run the script from the superuser!"
fi
######################################################################## ########################################################################
for PROGS in "wget" "curl" "tar" "awk" "zenity" "cabextract" "pidof" ; do unset PW_USE_NS
if [ ! -x "$(command -v "${PROGS}" 2>/dev/null)" ] ; then if command -v yad &>/dev/null
PROGS_INST="${PROGS_INST} ${PROGS}" && vexit=1 then yad_gui="yad --window-icon=portproton.svg --borders=10 --center --text-align=center"
else PW_USE_NS=1
fi
[ -z "${XDG_DATA_HOME}" ] && export XDG_DATA_HOME="$HOME/.local/share"
PP_CONFIG_FILE="${HOME}/.config/${portname}.conf"
if [ -f "${XDG_DATA_HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
echo "${XDG_DATA_HOME}/PortWINE/PortProton" > "${PP_CONFIG_FILE}"
elif [ -f "${HOME}/PortWINE/PortProton/data/scripts/start.sh" ] ; then
echo "${XDG_DATA_HOME}/PortWINE/PortProton" > "${PP_CONFIG_FILE}"
fi
if [ "$script_path" == "/usr/bin" ] && [ -f "${PP_CONFIG_FILE}" ] ; then
export PORT_WINE_PATH="$(cat "${PP_CONFIG_FILE}" | head -n 1)"
if [ -f "${PORT_WINE_PATH}/data/scripts/start.sh" ] ; then
echo "${port_ver}" > "${PORT_WINE_PATH}/data/tmp/${portname}_ver"
/usr/bin/env bash "${PORT_WINE_PATH}/data/scripts/start.sh" "$@"
exit 0
else
rm -f "${PP_CONFIG_FILE}"
fi fi
done
if [ "${vexit}" -eq "1" ] ; then
echo "You will need to install: ${PROGS_INST}, and restart the script"
exit 1
fi fi
######################################################################## if locale | grep "LANG=ru_RU.UTF-8" 2>/dev/null
cd "$my_dir" then PW_SET_LANG="Russian"
export links else PW_SET_LANG="English"
links="$(pwd)"
########################################################################
if [ "$1" = "-rus" ] ; then
PW_SET_LANG=$RUS_LANG
export PW_SILENT_INSTALL="1"
elif [ "$1" = "-eng" ] ; then
PW_SET_LANG=$ENG_LANG
export PW_SILENT_INSTALL="1"
elif [ -z "${PW_SET_LANG}" ] ; then
PW_SET_LANG=$(zenity --title "Install $portname" --text "Select installation language:" --list --radiolist \
--column="" --column "Language" \
TRUE "$RUS_LANG" \
FALSE "$ENG_LANG" ) 2> /dev/null
if [ $? -eq 1 ] ; then echo "Installation language not set!" && exit 1 ; fi
case $PW_SET_LANG in
"$RUS_LANG")
INFO_TEXT="Вы запустили установщик ${portname} версии ${port_ver}. \n\nЭто некоммерческий продукт и развивается исключительно за идею и Ваши пожертвования. \nВсе права стороннего программного обеспечения принадлежат их владельцам! \nПродолжая установку, Вы автоматически соглашаетесь с данными условиями." > /dev/null 2>&1 ;;
"$ENG_LANG")
INFO_TEXT="You’ve started ${portname} installer v.${port_ver}. \n\nIt is a non-commercial product and is developed only for the idea and with the help of your donations. \nAll third-party software rights belong to their respective owners! \nIf you continue installation, you agree to these terms." > /dev/null 2>&1 ;;
esac
zenity --info --title "INFO" --text "$INFO_TEXT" --no-wrap 2> /dev/null
if [ $? -eq 1 ] ; then echo "INFO message not displayed!" && exit 1 ; fi
fi fi
######################################################################## ########################################################################
if [ "${PW_SILENT_INSTALL}" = "1" ] ; then export PW_SILENT_INSTALL=1
echo "${portname} is installed in ${deflink}" export PW_AUTOPLAY=1
D_PATH="${deflink}" export INSTALLING_PORT=1
else ########################################################################
if [[ "${PW_USE_NS}" != "1" ]] ; then
case $PW_SET_LANG in case $PW_SET_LANG in
"$RUS_LANG") "Russian")
inst1=$(zenity --title "Установка ${portname}" --text "Выберите путь для установки (обновления) ${portname} \nили оставьте его по умолчанию." --list --radiolist --width=350 --height=220 \ inst1=$($yad_gui --title "Install ${portname}" --text "Выберите путь для установки (обновления) ${portname},\nили оставьте его по умолчанию.\n\nВнимание:\nУстанавливать необходимо на файловую систему Linux (ext4, btrfs и прочие)." --list --radiolist --width=600 --height=200 \
--column="" --column "Путь:" \ --column="Выбор" --column "Путь:" \
TRUE "${deflink}" \ TRUE "${def_path}" \
FALSE "Другой путь..." ) 2> /dev/null FALSE "Другой путь...")
if [ $? -eq 1 ] ; then echo "Installation path not set!" && exit 1 ; fi [ "$?" != "0" ] && exit 1
inst1="$(echo $inst1 | awk -F'|' '{print $2}')"
case $inst1 in case $inst1 in
"${deflink}") "${def_path}")
D_PATH="${deflink}" ;; D_PATH="${def_path}" ;;
"Другой путь...") "Другой путь...")
D_PATH=$(zenity --file-selection --directory --title="Выберите путь..." ) echo 111
D_PATH="${D_PATH}/${portname}" ;; D_PATH="$($yad_gui --file --directory --title="Выберите путь..." --width=800 --height=800)" ;;
esac ;; esac ;;
"$ENG_LANG") "English")
inst1=$(zenity --title "Install ${portname}" --text "Choose path to install (update) ${portname} \nor leave it as default." --list --radiolist --width=350 --height=220 \ inst1=$($yad_gui --title "Install ${portname}" --text "Select the installation path (update) port,\nor leave it in default." --list --radiolist --width=600 --height=200 \
--column="" --column "Path:" \ --column="Set..." --column "Path:" \
TRUE "${deflink}" \ TRUE "${def_path}" \
FALSE "Other path..." ) 2> /dev/null FALSE "Other path...")
if [ $? -eq 1 ] ; then echo "Installation path not set!" && exit 1; fi inst1="$(echo $inst1 | awk -F'|' '{print $2}')"
[ "$?" != "0" ] && exit 1
case $inst1 in case $inst1 in
"${deflink}") "${def_path}")
D_PATH="${deflink}" ;; D_PATH="${def_path}" ;;
"Other path...") "Other path...")
D_PATH=$(zenity --file-selection --directory --title="Choose your path..." ) D_PATH="$($yad_gui --file --directory --title="Select the path...")" ;;
D_PATH="${D_PATH}/${portname}" ;;
esac ;; esac ;;
esac esac
if [ $? -eq 1 ] ; then echo "error" && exit 1 ; fi [[ -z "${D_PATH}" ]] && fatal
echo "${D_PATH}" | grep -i "${portname}" 2>/dev/null || D_PATH="${D_PATH}/${portname}"
case $PW_SET_LANG in
"Russian")
progress_bar() {
$yad_gui --progress --title="Установка..." --text="Настройка ${portname}" --pulsate --auto-close --auto-kill --width=500
} ;;
"English")
progress_bar() {
$yad_gui --progress --title="Install..." --text="Install ${portname}" --pulsate --auto-close --auto-kill --width=500
} ;;
esac
else
D_PATH="${def_path}"
PW_NOTIFY_TEXT="Installing PortProton..."
pw_notify_send
fi fi
######################################################################## ########################################################################
case $PW_SET_LANG in
"$RUS_LANG")
progress_bar() {
zenity --progress --title="Установка..." --text="Установка ${portname}" --pulsate --auto-close --auto-kill --width=450 > /dev/null 2>&1
} ;;
"$ENG_LANG")
progress_bar() {
zenity --progress --title="Install..." --text="Install ${portname}" --pulsate --auto-close --auto-kill --width=450 > /dev/null 2>&1
} ;;
esac
########################################################################
export PORT_WINE_PATH="${D_PATH}" export PORT_WINE_PATH="${D_PATH}"
scripts_dir="${PORT_WINE_PATH}/data/scripts" echo "${PORT_WINE_PATH}" > "${PP_CONFIG_FILE}"
if [ ! -d "${PORT_WINE_PATH}" ] ; then if [ ! -d "${PORT_WINE_PATH}" ] ; then
mkdir -p "$PORT_WINE_PATH" mkdir -p "$PORT_WINE_PATH" || fatal "Cannot create a directory: $PORT_WINE_PATH"
else else
rm -fr "${PORT_WINE_PATH}/data/tmp" rm -fr "${PORT_WINE_PATH}/data/tmp"
rm -f "${scripts_dir}/"* > /dev/null 2>&1 rm -f "${PORT_WINE_PATH}/data/scripts/"* 2>/dev/null
fi fi
######################################################################## ########################################################################
mkdir -p "${PORT_WINE_PATH}/data/tmp" mkdir -p "${PORT_WINE_PATH}/data/tmp"
echo "${port_ver}" > "${PORT_WINE_PATH}/data/tmp/${portname}_ver" echo "${port_ver}" > "${PORT_WINE_PATH}/data/tmp/${portname}_ver"
case $PW_SET_LANG in case "${PW_SET_LANG}" in
"$RUS_LANG") echo "RUS" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;; "Russian") echo "RUS" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
"$ENG_LANG") echo "ENG" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;; "English") echo "ENG" > "${PORT_WINE_PATH}/data/tmp/${portname}_loc" ;;
esac esac
######################################################################## ########################################################################
if [[ "${PW_USE_NS}" != "1" ]] ; then
PW_NOTIFY_TEXT="Installing PortProton..."
pw_notify_send
fi
export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp" export PORT_WINE_TMP_PATH="${PORT_WINE_PATH}/data/tmp"
cd "${PORT_WINE_PATH}" cd "${PORT_WINE_PATH}"
try_download_scripts () { echo -e "\nTry download scripts from gitlab.eterfund.ru..."
wget -O "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -nd -c --read-timeout 300 \ if ! curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
--retry-connrefused --timeout 15 --tries 3 \ -L "https://gitlab.eterfund.ru/Castro-Fidel/PortWINE/-/archive/master/PortWINE-master.tar.gz" \
--user-agent="Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" \ -o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
"https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" then
if [ "$?" = "0" ] ; then echo -e "\nError.\nTry download scripts from github.com..."
tar -xvzf "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -C "${PORT_WINE_TMP_PATH}" curl -# -A "Mozilla/5.0 (compatible; Konqueror/2.1.1; X11)" -H 'Cache-Control: no-cache, no-store' -H 'Pragma: no-cache' \
if [ "$?" = "0" ] ; then -L "https://github.com/Castro-Fidel/PortWINE/archive/refs/heads/master.tar.gz" \
[ ! -d "${PORT_WINE_PATH}/data/" ] && mkdir "${PORT_WINE_PATH}/data/" -o "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
cp -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/data_from_portwine/"* "${PORT_WINE_PATH}/data/" [ "$?" != "0" ] && fatal "Critical error during file download!"
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" fi
rm -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/" echo "Try unpacking scripts..."
export scripts_current_ver tar -xvzf "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" -C "${PORT_WINE_TMP_PATH}"
scripts_current_ver=$(cat "${scripts_dir}/var" | grep SCRIPTS_NEXT_VERSION | awk -F "=" '{print $2}') if [ "$?" = "0" ] ; then
echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver" [ ! -d "${PORT_WINE_PATH}/data/" ] && mkdir "${PORT_WINE_PATH}/data/"
else cp -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/data_from_portwine/"* "${PORT_WINE_PATH}/data/"
rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz" rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
try_download_scripts rm -fr "${PORT_WINE_TMP_PATH}/PortWINE-master/"
fi export scripts_current_ver=$(cat "${PORT_WINE_PATH}/data/scripts/var" | grep SCRIPTS_NEXT_VERSION | awk -F "=" '{print $2}')
else echo "${scripts_current_ver}" > "${PORT_WINE_TMP_PATH}/scripts_ver"
try_download_scripts
fi
}
if [ "${PW_SILENT_INSTALL}" = "1" ] && [ ! -f "/usr/bin/portproton" ] ; then
try_download_scripts
else else
try_download_scripts | progress_bar rm -f "${PORT_WINE_TMP_PATH}/PortWINE-master.tar.gz"
[ "$?" != "0" ] && fatal "Critical error during file unpacking!"
fi fi
chmod 755 -R "${PORT_WINE_PATH}"
######################################################################## ########################################################################
cd "${scripts_dir}" cd "${PORT_WINE_PATH}/data/scripts"
/usr/bin/env bash "${scripts_dir}/setup.sh" && exit 0 /usr/bin/env bash "${PORT_WINE_PATH}/data/scripts/setup.sh" && exit 0
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment