FL STUDIO на Linux + VST (часть 2) Чистый Wine
Внимание! Пока что это далеко не окончательный способ, нужна помощь с настройками и советы (кроме советов установить 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 всё работает)
— Нестабильная работа