Решил как-то я поставить Wine. Ведь прошло уже достаточно времени, наверняка есть адекватные туториалы или мануалы по установке. Так ведь?
Как всегда, есть некоторые нюансы. Есть большинство мануалов на английском, но полезным будет тот, который ты понимаешь. Вроде бы очевидно, но многие просто копипастят команды, а потом ноют, что у них Линукс поломался.
Я же ориентировался по ветке репозитория моего дистрибутива на моём ноутбуке MAIBENBEN M545. Ветка называется "Jammy" а сама ссылка на репозитории ведёт на репу от huawei. Оказывается, что HUAWEI поставляет дистрибутивы Kubuntu в различные китайские бренды, не только Xiaomi, honor, matе-ы. Не ожидал. Почему именно Kubuntu? Возможно, из-за того, что графическая система Plasma больше всего напоминает интерфейс Windows 10. Так или иначе на этом бренде система Linux с графической системой X11.
К слову, ноутбук MAIBENBEN M545 поставляется с двумя моделями процессоров.
AMD Ryzen 5 4500U и AMD Ryzen 5 Pro 4650U.
Настраивалось всё на ноутбуке с AMD Ryzen 5 Pro 4650U. Я брал с процессором 4650U Pro, так как последний имеет удвоенное число потоков (12, вместо 6) на ядро.
Оба имеют графическую встройку "Radeon RX Vega 6 (Ryzen 4000/5000)".
Установка
Вот первый простой мануал, как установить Wine.
https://phoenixnap.com/kb/how-to-install-wine-on-ubuntu
Как видно, никаких отличий для Kubuntu нет. Отличаются только ссылки на мануалы и их заголовки. А путь и алгоритм всегда один и тот же.
Проверяем архитектуру и начинаем установку Wine с WineHQ репозитория. Cpu на MAIBENBEN M545 стоит Ryzen 4650U Pro с архитектурой x86_64
(ещё она известна как amd64). Проблем с установкой быть не должно.
Запускать Wine как в указанном мануале НЕ нужно. Просто проверяем версию Wine и всё.
Поскольку для запуска в дальнейшем потребуется определить некий WINEPREFIX - каталог в котором будет лежать окружение под Windows с указанной архитектурой (архитектура указывается переменной средой WINEARCH=win32 или WINEARCH=win64). Тут очень важный момент, на котором спотыкаются многие юзвери.
Во-первых, придумайте своё, ОБЫЧНОЕ имя для папки, путь к которой вы укажете в WINEPREFIX, это же ваша папка. Например, Win32Games или Win64Games. НЕ ИСПОЛЬЗУЙТЕ ИМЯ ".wine". Имена с точкой интерпретируются как скрытые папки.
Во-вторых, делайте всё от обычного пользователя, иначе Вы определите WINEPREFIX для пользователя root, но не для себя.
Так вот, создали у себя эту папку, допустим в каталоге home/Wine32Games и вызываем winecfg, указав архитектуру (WINEARCH) и полный путь к папке (WINEPREFIX).
cd ~
mkdir Win32Games
WINEARCH=win32 WINEPREFIX=/home/gattor/Win32Games/ winecfg
После выполнения этих команд, у Вас откроется окно настроек. В настройках выбираете версию Windows (можно выбрать Windows 10 или Windows 7 для старых игр). Проверяете, что у Вас не включена эмуляция экрана раб. стола. Она Вам не понадобится.
Далее, ставим саму игру, например Plants Vs Zombies или Warcraft 3. Exe-шник открываем командой wine, не забыв всё так же указать две переменные WINEPREFIX и WINEARCH перед самой командой, как дано ниже.
WINEARCH=win32 WINEPREFIX=/home/gattor/Win32Games/ wine /home/gattor/Downloads/PvZ.exe
Запустится инсталлятор, где Вы стандартно ставите игру. После установки, если у Вас всё было настроено правильно, то на рабочем столе у Вас появится ярлык с игрой и иконкой. В содержимом файле ярлыка, например, "Plants Vs Zombies.desktop", Вы увидите строчки
[Desktop Entry]
Name=Plants vs. Zombies
Exec=env WINEPREFIX="/home/gattor/Win32Games/" wine C:\\\\users\\\\Public\\\\Desktop\\\\Plants\\ vs.\\ Zombies.lnk
Type=Application
StartupNotify=true
Path=/home/gattor/Win32Games/dosdevices/c:/Program Files (x86)/Plants vs. Zombies
Icon=B87A_PlantsVsZombies.0
StartupWMClass=plantsvszombies.exe
Создавать ярлыки вручную ВАМ НЕ НАДО! Если у Вас не работает ярлык, то поздравляю, где-то Вы накосячили. (Ошиблись именем папки, забыли выйти из рута).
DirectX и прочее.
Для этого есть программа, как winetricks. Скачиваем её через менеджер пакетов, затем запускаем.
Если нужно, Вы можете вручную скопировать *.dll файлы и настроить библиотеку как встроенную. На YouTube был ролик, как Китаец копировал исходники (https://www.youtube.com/watch?v=BefTUxsRiwY).
Wineprefix на других разделах дисков
Окей, а если я хочу поставить префикс на большой раздел, где много места? Тут появляются сюрпризы. Во-первых Вам НЕ НАДО это делать через winecfg, не добавляйте диски. Вам же нужно создать новый префикс на устройстве с достаточным объёмом памяти, так ведь? Просто берёте и создаёте новый каталог на новом устройстве.
Итак, в чём же может быть проблема? В файловой системе.
Китайцы поделили диск на три раздела (плюс первый раздел для загрузчика ОС). Так вот основной раздел, к которому монтируется корневой каталог "/" и где лежат файлы для системы Linux, монтируется стандартно под файловую систему ext4. С ней проблем нет. Но вот два свободных раздела на 190 GB смонтированы под файловую систему "ntfs". Эта файловая система "ntfs" не смонтирована в пользовательском пространстве, и, скорее всего они её оставили, под установку Windows. Если Ваш префикс лежит на диске с файловой системой "ntfs", то у Вас всплывёт проблема доступа, wine просто не запустится. Вам нужно перемонтировать нужный Вам раздел под файловую систему "fuseblk" с помощью программы ntfs-3g (не mount), она монтирует ntfs в пользовательском пространстве. Чем это отличается от обычного mount ? Можно об этом почитать здесь
Причём, если Вы хотите, чтобы Ваш раздел монтировался при запуске под нужную файловую систему, (а не делать каждый раз вручную в терминале) то Вам необходимо создать службу, которая стартует при запуске ОС через systemd и запускает простой скрипт, который выполняет данную команду.
Как определить такую службу описано в ниже данном туториале, доступный по ссылке:
https://www.lw92.me/index.php/archives/550
Я просто создал файл скрипта rc.local, положил его в /etc, внутри скрипта написал.
#!/bin/bash
ntfs-3g -o rw,uid=1000,gid=1000,iocharset=utf8,uhelper=udisks2,umask=0000,fmask=0000,dmask=0000 /dev/nvme0n1p4 /media/gattor/<uuid>/
Где "<uuid>" - это uuid устройства, вы его можете найти в каталоге "/dev/disk/by-uuid/" где определены символические ссылки на файлы устройств в каталоге "/dev". Здесь реальное устройство описано файлом "/dev/nvme0n1p4", а папка "/media/gattor/<uuid>/" - его точка монтирования. Перед аргументами стоит список опций, указанных после флага "-o". Их описание приведено по ссылке здесь, А также в этом мануале
Почему бы не прописать монтирование устройства в файл /etc/fstab ?
Очень просто, потому что Вы можете его испортить и сломать запуск системы. К тому же нам нужна ntfs в пользовательском пространстве (fuseblk), а монтирование ntfs по прежнему смонтирует его как было. А указав тип ntfs-3g, вместо ntfs, Вы упадëте в Recovery Mode из-за неизвестной файловой системы.
Поэтому да, ntfs-3g это программа, а не файловая система. Она монтирует NTFS в пользовательском пространстве.
Далее, я определил файл "rc-local.service" в каталоге "/etc/systemd/system/". В него вписал следующее содержимое
[Unit]
Description=Local Startup Script
[Service]
Type=oneshot
ExecStart=/etc/rc.local
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Обратите внимание, на тип сервиса "oneshot" и свойство "RemainsAfterExit=yes". По сути это означает одноразовый запуск скрипта при старте системы, который не уничтожается сразу же, а остаётся активным в фоне. Это нужно, потому что при выгрузке, могут пропасть изменения, сделанные этим скриптом.
Не забываем про разрешения на эти файлы. Скрипт делаем исполняемым (+x) а файл сервиса доступный для чтения и записи владельцу а также для чтения остальным (644).
sudo chomd +x /etc/rc.local
sudo chmod 644 /etc/systemd/system/rc-local.service
И запуск службы
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
Проверяем, что смонтировано всё правильно через команду
df -hT
Winetricks с текущим префиксом
Для программы winetricks необходимо также перед её именем задать переменные среды WINEPREFIX и WINEARCH также как это делали при запуске wine. Иначе Вы опять создадите новый префикс (да и ещё по-умолчанию для 64-битной архитектуры). Собственно, любую недостающую dll Вы можете скачать через winetricks. Например библиотеку MFC42.dll
# Для префикса /home/gattor/Win32Games/ добавить либу mfc42.dll
WINEPREFIX=/home/gattor/Win32Games/ WINEARCH=win32 \
winetricks mfc42
Wineprefix для других пользователей.
Здесь ждёт ещё один сюрприз. По умолчанию, разделы, которые были смонтированы с файловыми системами, монтируются под рутом. Когда Вы создаёте пользователя и его группу при первом запуске, для доступа к разделам он добавляется в список контроля доступа файла (FACL - File Access Control List). А какого файла? А файла - папки "/media/<user_name>/". (где <user_name> - Ваше имя пользователя). Если Вы решите добавить новых пользователей, то обнаружите, что они не имеют доступа к другим разделам (тем самым, которые смонтировали Китайцы aka Basic Data Partition). Всё, что нужно, для исправления, так это выполнить одну простую команду. Я лишь добавил доступ для своей группы так:
setfacl -m g:gattor:r-x /media/gattor/
И ни в коем случае НЕ ЛЕЗЬТЕ в перемонтирование разделов. Это не решение проблемы с доступом.
Итак, а что же с префиксом? Мы можем добавить новый префикс (каталог) в котором будут ссылки на старый префикс. В конкретном случае, в качестве примера я создал ещё одного пользователя с той же группой "gattor" и именем "gattortest". Настроил его, что он в той же группе, что и я с помощью команды
usermod -g gattor gattortest
Далее я создал папку для WINEPREFIX-а "/home/gattortest/Win32Games/". Скопировал оттуда файлы "*.reg" из корневого каталога "/home/gattor/Win32Games/". Назначил им нового владельца - данного пользователя gattortest. Затем определил ссылки на папки "dos_devices" и "drive_c" из префикса. А в корневом каталоге старого префикса поставил биты setuid, setgid для всех файлов через chmod.
chmod -R 6755 /home/gattor/Win32Games/
И всё. Ах да, вручную придётся создавать ярлыки, т. к. они не создаются автоматом при настройке для нового пользователя. При запуске программы, автоматом всё настроится так, как надо. Инструкцию я брал из этого источника: https://obu4alka.ru/multi-wine-linux.html#Nastrojka_mnogopolzovatelskogo_wine
ИТОГИ
Я ставил Wine 9.0 стабильной ветки. Plants VS Zombies спокойно запустились.
Warcraft 3 же я ставил на другой раздел, который смонтировал в "fuseblk" (ntfs-3g). У этой игры на Wine есть косяк с запуском роликов из папки "movies". Дело в том что они проигрываются через всторенный плеер "Player.exe" а wine запрещает его запуск в целях безопасности.
Для устранения косяка, самое простое было - это переименовать папку в "movies_bk". И игра запустилась. Что касается рекомендации по запуску с флагом "-opengl", то ставить этот флаг мне не понадобилось. Игра летала на высоких настройках по умолчанию.
P. S. Заметил особенность, что разрешение по умолчанию в браузере подставляется автоматом на 1080p. Это такой процессор со встройкой хороший?
НЕ ЗАБЫВАЕМ УКАЗЫВАТЬ ПРЕФИКС В ПЕРЕМЕННЫХ СРЕДАХ ДО ИМЕНИ ПРОГРАММЫ
WINEPREFIX=<path_to_my_prefix_dir> WINEARCH=win32|win64