FL STUDIO на Linux + VST (часть 2) Чистый Wine

e703e9ef8c56c6d9d3d9cc632c95ba9b.png

Внимание! Пока что это далеко не окончательный способ, нужна помощь с настройками и советы (кроме советов установить Windows).

В своей недавней статье, я описывал процесс установки FL Studio на Linux. Она заросла UPD, но суть в том, что в ней использовался следующий способ:

  • Установить Flapak

  • Установить Lutris и Flatseal через Flatpak

  • Ограничить доступ к файлам у Lutris через Flatseal, чтобы использование FL и плагинов было безопасным для основной системы

  • Создать в Lutris префикс, немного настроить, установить FL через скрипт на сайте Lutris и доустановить нужные VST

Способ является очень простым, в результате получается полностью рабочая FL Studio с VST плагинами, разве что для 32 битных плагинов требуется «External Window», иначе процесс зависает. Всё работает превосходно, нет никаких проблем, ничего не вылетает, не глючит.

Но есть одна проблема — сильная задержка звука. Из-за особенностей Wine, задержка меньше чем 60 миллисекунд невозможна. Играть на гитаре почти невозможно, а слышать самого себя с сильной задержкой очень неприятно. ASIO4ALL просто не работает, а даже если бы и работал — у него была бы такая же проблема, что и с обычным драйвером FL Studio — дополнительная задержка, не важно какой буфер выставлен. Было решено наконец-то обратить взор на такую штуку, как WineASIO. К тому же, в новые версии ядра Линукс недавно добавили Realtime модули. И вот я стал экспериментировать с WineASIO… И так и не смог поставить его на префикс в Lutris. Я явно делаю что-то не так, но что я не пробовал — ничего не получалось.

И вот, я решил сократить количество посредников, и придумал такой вариант:

Firejail можно очень тонко настроить для безопасности, а в случае, если программа завершила свою работу, а WineServer нет — можно легко прихлопнуть все его элементы, просто завершив процесс Firejail, а не искать в списке процессов миллион svchost.

Установка

Напоминаю, что я использую Artix Linux со звуковым сервером Pipewire.

»--blacklist=/king» это я так блокирую доступ к своему второму диску, вы можете не писать его.

Установка Wine:

sudo pacman -S wine winetricks

Создание префикса Wine:

mkdir $HOME/.wineFLu

firejail --noprofile \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
wineboot -i

mkdir $HOME/.wineFLu/drive_c/INSTALL

Установка различных библиотек:

firejail --noprofile \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
winetricks vcrun6sp6 tahoma

Установка FL Studio и VST плагинов. Установщики надо кидать в папку C:/INSTALL относительно префикса.

firejail --noprofile --net=none \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
wine64 "C:/INSTALL/..."

Так же, есть важное замечание. Раньше я не понимал, почему FL Studio сильно лагает на некоторых версиях Wine, особенно при открытии контекстных меню, при выборе плагинов, а спектрограмма летит с повышенной скоростью. Ну, и сейчас не прям чтобы знаю причину, но зато знаю, как с этим бороться:

firejail --noprofile --net=none \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
wine64 winecfg

Открываете winecfg вышеуказанной командой, и в список приложений добавляете запускаемый «exe» файл для FLStudio, типа «FL64.exe», и выставляете ему версию Windows как «Windows 7». Да, часть плагинов (например GuitarRig) требуют Windows 10, но я проверил — всё работает. Только обязательно следите, чтобы версия для всех приложений «по умолчанию» была Windows 10.

Теперь самое интересное, и зачем этот переезд был организован — WineASIO, вот его установка:

У меня Artix Linux, и в нём не завезли некоторые пакеты, но их можно стырить из Arch. Вот ссылка на нужный пакет. Нужно добраться до него через терминал и выполнить команду чтобы установить пакет, а затем добавить себя в группу.

sudo pacman -U realtime-privileges-4-3-any.pkg.tar.zst
sudo usermod -aG realtime $(whoami)

На Арче, подозреваю, достаточно просто выполнить:

sudo pacman -S realtime-privileges
sudo usermod -aG realtime $(whoami)

Затем нужно установить WineASIO, я делаю это через AUR:

yay -S wineasio

А потом установить в нужный префикс Wine:

env WINEPREFIX=$HOME/.wineFLu wineasio-register

Соответственно, в FL надо поменять драйвер на WineASIO, немного настроить (поставить 2 входа и 2 выхода, выключить Fixed buffersize и выставить нужный вам, 256 ощущается как отсутствие задержки), и если будете использовать WineASIO — нужно поменять команду для переноса звука в виртуальный микрофон PipeWire:

pw-link FL64:out_1 my-virtualmic:input_FL
pw-link FL64:out_2 my-virtualmic:input_FR

При установке VST плагинов нужно быть очень внимательным, у каждого плагина есть своя болячка и свой способ лечения.

Скрытый текст

Nexus 2:

После установки:
firejail --noprofile --net=none \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
wine64 regedit
>>> HKEY_CURRENT_USER\Software\reFX\Nexus -> Поменять "ContentPath" на путь до папки с библиотеками, например "C:/Nexus content/" <<<
В первый раз открывать через "Fruit Wrapper", нажать шестерёнку, потом "VST Wrapper Settings" и заменить инструмент на Nexus, нажать "External Window"

Retro Color:

После установки:
Запустить в FL Studio, лицензии пока не будет, но нужно чтобы узнать точный ComputerID
Закрыть
%USERPROFILE%\Documents\RC-20 Retro Color Logs\...
Скопировать "ComputerId" из лога
Что с ним делать? Не знаю, сами угадайте)))

Guitar RIG:

После установки:
firejail --noprofile \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" \
wine64 uninstaller
>>> Microsoft Visual C++ 2013 Redistributable -> Изменить -> Repair <<<

Ну, и после всей проделанной работы — можно запускать FL, вот как это делаю я:

firejail --noprofile --env=WINEDEBUG=-all --net=none \
--whitelist=$HOME/.wineFLu \
--blacklist=/king --noblacklist=/sys/module --noblacklist=/dev \
--env=WINEPREFIX="$HOME/.wineFLu" --env=WINEESYNC=1 --env=WINEFSYNC=1 --env=STAGING_SHARED_MEMORY=1 --env=STAGING_WRITECOPY=1 \
wine64 "C:/Program Files/Image-Line/FL Studio 21/FL64.exe"

Можно даже ярлык сделать, но придётся убрать все »\» и заменить все »$HOME» на глобальные адреса с учётом вашего имени пользоваться,»$USER» к сожалению не работает.

micro $HOME/.local/share/applications/fl.desktop

[Desktop Entry]
Name=FL Studio
GenericName=FL Studio
Comment=Music
Exec=firejail ...
Icon=lmms
Terminal=false
Type=Application
PrefersNonDefaultGPU=true
Categories=AudioVideo

Wine — такой разный

А теперь стоит поговорить о минусах такого способа — замучаетесь закрывать WineServer. Не работает захват курсора, поэтому использование крутилок громкости превратится в кошмар, курсор постоянно будет вылетать за пределы окна.

Можно использовать другой Wine — я испытывал такой Wine-GE:

yay -S wine-ge-custom-bin

Запускается она уже не через wine64, а через /opt/wine-ge-custom/bin/wine64.

Из плюсов — не надо менять версию Windows в FL Studio на семёрку, работает любая без тормозов. Так же адекватно работают крутилки, то есть захват курсора. И WineServer сам закрывается при закрытии FL Studio. Из минусов — очень нестабильная работа, и не все установщики работают адекватно, например установщик FL Studio у меня зависал на этапе «Edge Internet что-то там», приходилось устанавливать через обычный Wine, а запускать уже через Wine-GE.

Так же, при любом Wine — не все плагины нормально завелись, например Nectar3, а в GuitarRig постоянно приходится сканировать пресеты, он каждый раз их забывает. Подозреваю, что проблема в чём-то другом.

А нужно ли оно вообще?

Во время установки я столкнулся с очень странной штукой: Guitar Rig очень сильно капризничал, дебаг указывал на библиотеку «msvcr120», будто в ней не реализован какой-то метод. Мою голову не покидал странный диссонанс от того, что в Lutris всё работает превосходно, а вот самому — приходится горбатиться, да ещё и библиотеки не работают. В итоге я просто скопировал файлы библиотек «msvcr120» из префикса Lutris в префикс Wine, и угадайте что? Оно заработало. То есть, в Lutris какие-то свои библиотеки, сильно отличающиеся от оригинальных? Я чего-то не знаю? В Lutris свои «репозитории» библиотек? Или я использую какой-то не такой Wine и Winetricks? В общем, очень много нервов я потратил на то, чтобы всё заработало, я получил WineASIO, но ценой большой нестабильности. И вот что я подумал…

Было бы превосходно, если бы можно было бы запускать WineASIO в Lutris. Я пробовал разные способы, но у меня не получилось. Пробовал копировать библиотеки вручную, прописывать в реестре — ничего не работает. Если у кого-то получится — обязательно напишите! Будет новый способ поставить FL Studio с низкой задержкой на Linux без запара. Единственные минусы которые я вижу в Lutris — в нём даже Wine-DE не закрывается при закрывании FL Studio, а если настройки безопасности слетят при очередном обновлении — FL Studio с кучей крякнутых вирусных VST получат полный доступ к вашей системе, чего очень бы не хотелось. Но в остальном подумываю, что было бы неплохо подружить WineASIO с Lutris.

Способ с чистым Wine через Firejail мне тоже очень нравится, хоть он и запарнее. Но там что-то не так с библиотеками — оригинальные не подходят, приходится тырить из Lutris.

В общем, подводя итоги — вот все способы, точнее их плюсы и минусы. Если кто знает как решить какой-либо из минусов любого из способов — обязательно сообщите в комментариях!

Flatpak + Lutris:

  • + Очень простая установка, подходит для новичков

    + Всё работает без лишних проблем с библиотеками

    — Не работает WineASIO

    — Есть вероятность что слетит запрет для файлов вне Flatpak

Firejail + чистый Wine:

  • + Работает WineASIO

    — Не рабочие библиотеки

    — Не работает захват мыши

    — Не закрывается WineServer, приходится закрывать через диспетчер задач

Firejail + чистый WineGE:

  • + Работает WineASIO

    — Не рабочие библиотеки

    — Не работают некоторые установщики, в том числе FL Studio (Думаю, можно как-то исправить, ведь в Lutris всё работает)

    — Нестабильная работа

© Habrahabr.ru