[Перевод] Wine на Windows 10. Он работает

Wine — программа для запуска приложений Windows на компьютерах под Unix.

Запуск Wine на Windows был мечтой фанатов, которые следуют зову сердца «Мы делаем то, что должны, потому что не обязаны это делать», по крайней мере, с 2004 года, когда кто-то попытался скомпилировать Wine в Cygwin и сломал реестр хост-системы.

Оправдание: «А как же старые приложения, которые не работают должным образом в последних Windows?». Но мы-то понимаем, что истинная причина — «Я долго страдал за своё искусство, теперь ваша очередь».
В конце 2008 года меня одолела навязчивая мысль — и я (кажется, это был я) создал страничку WineOnWindows на вики Wine. Вкратце: это было вообще невозможно, поскольку всё работало через Cygwin, MinGW или Windows Services для Unix. Текущая страница не намного успешнее.

Windows 10 представила подсистему Windows для Linux, а Ubuntu удобно загружается из Microsoft Store. В результате наша глупая идея реализуется практически сама собой, разве что надо вручную установить переменную среды DISPLAY.

До сих пор это умопомрачительно бесполезно. Wine работает только с 64-разрядными приложениями Windows, то есть даже не со всеми приложениями, которые идут в составе самой Windows 10.

(Первоначальный проект стартовал после того, как кто-то не смог запустить Encarta 97 на Windows 10. Таким образом, как и любое настоящее гиковское решение, оно на самом деле не решает оригинальную проблему пользователя).

Но я хочу ещё раз подчеркнуть: сейчас это работает тривиально. Я не какой-то сумасшедший гений, которые реализовал фантастический проект — просто я, кажется, первым публично объявил о данном факте.


1. У вас же 64-битная Windows 10, верно? Это единственная версия с WSL.

2. Установите WSL. Панель управления → Программы → Программы и компоненты → Включение и отключение компонентов Windows. Поставьте галочку «Подсистема Windows для Linux». Перезапустите Windows.

3. Зайдите Microsoft Store, установите Ubuntu (в основном, для её запуска и создан WSL). Я установил Ubuntu 18.04 LTS. Откройте Ubuntu, и вы увидите терминал bash.

4. Установите следующее из командной строки bash:

sudo dpkg --add-architecture i386
sudo apt update; sudo apt upgrade
sudo apt install wine-stable


Можете установить более актуальную версию Wine, если хотите помаяться дурью (не забывайте о двух новых библиотеках, которые нужны для wine-devel >=4.5 и которые ещё не вошли в Ubuntu!) Дайте мне знать, если это сработает.

5. Добавьте к своему .bashrc такую строчку:

export DISPLAY=:0.0


Вероятно, вы захотите запустить это и в текущем окне bash.

6. Установите VcXsrv, красиво упакованную версию xorg, скомпилированную для Windows, — просто возьмите последнюю версию исполняемого файла и запустите его. Запустите X Server через кнопку «Пуск» и XLaunch. Он проведет вас через дефолты — оставьте большинство из них как есть. Я на всякий случай поставил галочку «Отключить контроль доступа». Сохраните конфигурацию.

6а. Если хотите проверить, что X-сервер настроен правильно, установите sudo apt install x11-apps и запустите xeyes для краткого путешествия обратно в 80–90-е.

7. Сам wine не работает, потому что 32-битные бинарники не запускаются в WSL. На нашей 64-битной Windows 10 выдаётся ошибка /usr/bin/wine: 40: exec: /usr/lib/wine/wine: Exec format error. Видимо, это исправили в WSL 2.

А пока запустим Блокнот в Wine!

wine64 /usr/lib/x86_64-linux-gnu/wine/fakedlls/notepad.exe


1eaa333edfb29b9fd37fa24441cf3fc4.png

TO DO: 32-битная поддержка. Придётся подождать выхода WSL 2. Интересно, будут ли работать древние программы Win16 — по идее, они должны запуститься в Wine, даже если больше не работают в самой Windows.


Спасибо анонимному комментатору, который предложил, как подступиться к запуску 32-битных приложений.

sudo apt install qemu-user-static
sudo update-binfmts --install i386 /usr/bin/qemu-i386-static --magic '\x7fELF\x01\x01\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x03\x00\x01\x00\x00\x00' --mask '\xff\xff\xff\xff\xff\xff\xff\xfc\xff\xff\xff\xff\xff\xff\xff\xff\xf8\xff\xff\xff\xff\xff\xff\xff'
sudo service binfmt-support start

И теперь мы можем сделать:

fun@DESKTOP-7F6DU8P:~$ wine --version
wine-3.0 (Ubuntu 3.0-1ubuntu1)


Впрочем, Encarta 97 всё равно не работает:

fun@DESKTOP-7F6DU8P:/mnt/e$ wine SETUP.EXE
wine: Unhandled page fault on read access to 0xffffffff at address 0x11df:0x00002c11 (thread 0011), starting debugger...
0011:err:seh:start_debugger Couldn't start debugger ("winedbg --auto 15 108") (2)
Read the Wine Developers Guide on how to set up winedbg or another debugger


Для тех, кто в теме: file говорит SETUP.EXE: MS-DOS executable, NE for MS Windows 3.x, так что нам нужно спуститься до редких 16-битных программ.

Encarta 97 устанавливается и работает безупречно в Wine 4.13 на Linux…, но в 4.13 на Windows 10 все ещё нет:

fun@DESKTOP-7F6DU8P:~$ wine /mnt/e/SETUP.EXE
Xlib: extension "MIT-SHM" missing on display ":0.0".
Xlib: extension "MIT-SHM" missing on display ":0.0".
0009:err:process:__wine_kernel_init boot event wait timed out
001d:err:process:__wine_kernel_init boot event wait timed out
wine: Unhandled page fault on read access to 0xffffffff at address 0x11cf:0x00002c11 (thread 001e), starting debugger...001e:err:seh:start_debugger Couldn't start debugger ("winedbg --auto 28 152") (2)
Read the Wine Developers Guide on how to set up winedbg or another debugger
001d:err:ntdll:RtlpWaitForCriticalSection section 0x7e6273e0 "syslevel.c: Win16Mutex" wait timed out in thread 001d, blocked by 001e, retrying (60 sec)
Xlib: extension "MIT-SHM" missing on display ":0.0".
Could not load wine-gecko. HTML rendering will be disabled.
001e:err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x7b4a6abc
wine client error:1e: write: Bad file descriptor


Конечно, он выдаёт разные сообщения об ошибках в нескольких запусках…

© Habrahabr.ru