Наверное многие из наших читателей хотя бы раз в жизни использовали «неэмулятор» WINE (WINE — акроним — Wine Is Not an Emulator). Но далеко не все озадачивались исследованием каких либо дополнительных возможностей,O кроме запуска Windows-приложений под *nix-системами. Да и не высокую скорость запуска этих приложений списывали на то что это только альфа-версия. Однако если немного углубиться в устройство Wine — можно очень не плохо оптимизировать его работу и найти в нём ряд дополнительных интересных возможностей.
Начнём с установки wine (если кто-то ещё этого не сделал:)):
# Для Debian/Ubuntu/ALT Linux: apt-get install wine # Для Mandriva: urpmi wine # Для Gentoo: emerge wine # Для FreeBSD: cd /usr/ports/emulators/wine make install clean
Далее приступаем к исследованию wine. Первым делом посмотрим в сторону winecfg — основному инструменту конфигурации wine. С его помощью можно настроить большую часть основных параметров wine.

Что ты такое W.I.N.E?
Внешний вид winecfg
Хотя winecfg и не содержит никакой подсказки — её интерфейс прост и интуитивно понятен и с ним сможет разобраться даже достаточно неопытный пользователь.
Здесь можно настроить версию Windows, которую будет «видеть» программы, цветовую схему всех приложений, работающих под Wine, настроить эмуляцию дисков, вывод звука, параметры трёхмерной графики и многое другое.
Эта утилита сохраняет все свои настройки в файлах с расширением .reg в каталоге ~/.wine. В этих же файлах лежит и реестр «виртуальной» Windows, в которой работают приложения. Для редактирования реестра не плохо подойдёт утилите regedit, аналогичная и внешним видом и функционалом одноимённой утилите из windows.
Однако при всей мощи этих двух утилит, они всё-таки не позволяют управлять всеми аспектами работы wine.

Внешний вид wine regedit
Рассмотрим как происходит запуск windows приложения при помощи wine. Первым делом wine проверяет не запущен ли wineserver. Если запущен то wine подключается к нему и начинать транслировать вызовы запускаемого приложения в вызовы wineserver. Если же wineserver не запущен, то сначала запускается wineboot, который запускает wineserver и затем эмулирует начальную загрузку windows, после чего wine подключается к wineserver и начинает транслировать вызовы приложения в вызовы wineserver.
Отсюда видно что первый запуск любого приложения под wine всегда проходит очень долго и встаёт разумный вопрос: как можно его ускорить?
Очевидно что к моменту запуска windows-приложения процесс начальной инициализации wineserver должен быть уже завершён. Эта задача решается достаточно легко. Например если вы работает в KDE то просто создайте симлинк:
Windows Programs on Linux | Introduction to WINE
ln -s `which wineboot` ~/.kde/Autostart
И wineboot будет автоматически запускаться при входе в систему.
Ещё одной интересной особенностью wine является компилятор winegcc, который позволяет писать кроссплафторменный код на C. Вернее даже сказать что он позволяет собирать написанные на C windows-приложения под *nix. В итоге получается нативное приложение, использующее библиотеки wine. Так же можно писать новые программы используя библиотеки wine как тулкит (не уступающий по функционалу таким мострам как qt и gtk).
В некоторых дистрибутивах всё необходимое ставится вместе с wine, в других же придётся установить дополнительные пакеты:
# Для Debian/Ubuntu: apt-get install wine-dev gcc-3.4 # Для ALT Linux: apt-get install libwine-devel # Для Mandriva: urpmi libwine-devel
Далее создадим файл winehello.c и наберём в нём простенькую программу:
#include int main()
Сохраним файл и скомпилируем приложение:
winegcc winehello.c -o winehello

Приложение winehello
Далее запустим полученое приложение командой ./winehello. На экране должно появиться простое диалоговое окно wine с заголовком «Message», текстом «From Russia with love!» и кнопкой «OK». При нажатии на кнопку окно закроется и приложение завершится.
Это было нативное приложение Linux (или другой системы, в которой вы это проделывали), но использующее для своей работы библиотеки wine. На самом деле конечно winegcc компилириует не совсем в бинарный файл. Он собирает библиотеку и добавляет к ней скрипт запуска. Выполните команду ls -lh и вы это увидите:
итого 88K -rwxr-xr-x 1 moose moose 700 2008-03-16 00:39 winehello -rw-r—r— 1 moose moose 112 2008-03-16 00:39 winehello.c -rwxr-xr-x 1 moose moose 75K 2008-03-16 00:39 winehello.exe.so
Здесь winehello.c это исходный текст, winehello.exe.so это библиотека и winehello это скрипт, запускающий нашего приложения. Вместо него вполне уместно использовать команду:
wine winehello.exe.so
В том что winehello.exe.so является действительно нативной библиотекой а не исполнимым файлом формата PE можно убедиться при помощи команды file winehello.exe.so:
winehello.exe.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped
А просмотреть необходимые библиотеки можно с помощью команды ldd winehello.exe.so:
linux-gate.so.1 => (0xffffe000) libwine.so.1 => /usr/lib/libwine.so.1 (0xb7ddb000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb7db6000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7c6b000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7c67000) /lib/ld-linux.so.2 (0x80000000)
Так что теперь можно смело писать в *nix программы на WinAPI и они будут нормально работать. Но что самое интересно — используя библиотеки wine можно пересобирать написанные под windows приложения в *nix не меняя их кода!
Подробную документацию по WinAPI можно найти например в MSDN.
Автор надеется что эта статья была интересна читателю и возможно даже принесла некоторую пользу.
Источник: www.ylsoftware.com
Что такое программа wine
Wine — свободная реализация Win32 API, позволяющая пользователям UNIX-подобных операционных систем, например, Linux, macOS и других UNIX-подобных с поддержкой архитектур x86, AMD64 запускать 16-, 32- и 64- битные приложения, написанные исключительно под Windows. Так же существует реализация Wine под Windows, позволяющая запускать приложения, написанные для устаревших OS Windows (Windows 95 и т. п.) на современных версиях Windows.
Нередко разработчики используют библиотеки Wine при портировании приложений из Windows в UNIX-подобные операционные системы. Так большинство игр для Linux и MacOS, пришедшие в эти операционные системы из Windows, хотя и выглядят нативными для обычного пользователя, но работают, по большому счёту, под Wine.
В большинстве дистрибутивов Linux Wine либо уже установлен «из коробки», либо есть в официальных репозиториях. Но это не значит, что любое Windows приложение может быть запущено в Linux простым кликом по .exe файлу. Некоторые приложения, из-за особенности кода, сложных зависимостей и каких-либо сугубо юридических соображений просто не могут работать под Wine на текущий момент. Те, которые в принципе могут работать под Wine, нуждаются в дополнительной конфигурации Wine и установке зависимостей, таких как DirectX, Visual C++ и так далее.
Бывает так, что приложение идеально работает под Wine, но после обновлений начинает сбоить, либо просто перестаёт запускаться. Такое случается как по вине самого приложения, при написании которого не планировалось его портирование за пределы Windows, так и из-за Wine, когда из-за жёсткой привязки приложения к определённым версиям компонентов, приложение перестаёт работать в обновлённой версии Wine и зависимостей Wine в Linux.
Существует ряд решений, позволяющих пользователю устанавливать приложения Windows в Linux, не вникая в особенности Wine. Самые заметные из них это коммерческий CrossOver и бесплатный PlayOnLinux . Обе разработки так же есть и в MacOS, где последняя называется PlayOnMac.
И то и другое решение от «стандартного» Wine отличается тем, что имеет базу совместимых с Wine приложений и позволяет установить их в несколько кликов со всеми зависимостями и индивидуальной конфигурацией. CrossOver использует при этом единственную модифицированную версию Wine, которая включает в себя патчи для лучшей совместимости того, или иного приложения. PlayOnLinux скачивает и распаковывает ту версию Wine, которая согласно их базе лучше подходит для определённого приложения, и устанавливает зависимости для этого приложения. Если приложение работает лучше с более старой версией Wine, то именно эта версия и будет использоваться для этого, отдельно взятого приложения. По большому счёту PlayOnLinux, в отличии от CrossOver с его патченной версией Wine, просто автоматизирует то, что можно сделать вручную.
И не всегда использование CrossOver или PlayOnLinux — лучший вариант. Бывают случаи, когда приложение не запускается на коммерческом CrossOver, но работает с последней версией «чистого» Wine. PlayOnLinux может запутаться в зависимостях и установить приложение не правильно. Или использовать при установке лучшую, на его взгляд версию Wine для отдельно взятого приложения. При этом в некоторых случаях лучшей является та, на которой это приложение ещё не тестировалось, а по сему в базе PlayOnLinux она не упоминается в связи с этим приложением.
Так или иначе, но использование того, или иного решения — вопрос предпочтений и конкретной задачи, стоящей пред пользователем. Если не учитывать тот факт, что годовая подписка на CrossOver обойдётся пользователю в 60 долларов, а пожизненная в 500. «Разовая» покупка в 40; при этом такой вариант не включает в себя поддержку и последующие обновления версии CrossOver. Если это — не проблема, то можно комбинировать решения, устанавливая что-то через «дефолтный» Wine, а что-то через CrossOver. Но стоит учесть тот факт, что в большинстве случаев можно обойтись без CrossOver и всегда можно обойтись без PlayOnLinux, так как всё, что они делают — это автоматизируют процесс, за исключением того, что CrossOver использует патченную версию Wine, которая доступна только в нём.
Рассмотрим тот вариант, который не требует финансовых затрат. Неопытному пользователю всё это может показаться очень сложным, но на самом деле всё очень просто и слово «вручную» в данном случае не подразумевает полного отсутствия автоматизации.
Так как в большинстве случаев Wine используется именно для запуска игр, то мы будем использовать не «голый» Wine, а Wine-Staging — патченную версию Wine, включающую в себя ряд патчей, не вошедших пока в основную ветку Wine, например поддержка Direct3D 10/11. Но если вы не планируете запускать игры и боитесь словосочетаний типа «экспериментальная версия» и «тестирование компонентов», то можете установить стандартную версию Wine. Убедиться в том, что приложение способно работать под Wine можно на официальном сайте Wine, в соответствующем разделе . Просто введите в поиск название программы, которую хотите запустить. Рейтинг «Gold» означает, что приложение может быть запущено без видимых багов и потери производительности. Там же будет указана версия Wine, на которой тестировалось приложение и версия самого приложения.
Найдите в репозитории своего дистрибутива wine-staging (или wine) и установите этот пакет. Так же нам потребуются 32-х битные версии установленных в систему библиотек для запуска 32-х битных приложений. В Arch / Manjaro pacman выдаст список после установки wine. В Debian / Ubuntu (особенно в Ubuntu) они скорее всего будут установлены в виде зависимостей.
Если в Ubuntu вы хотите более свежую версию Wine, то адреса репозиториев можно найти на официальном сайте проекта. В других популярных дистрибутивах тоже проблем с установкой возникнуть не должно.
Также ищем и устанавливаем пакет «winetricks», который в дальнейшем поможет нам автоматизировать установку компонентов типа DirectX, путём ввода простой команды, не скачивая и устанавливая их вручную.
После того, как Wine установлен, нам нужно сконфигурировать «префикс». Префикс — это то место, где Wine хранит свои настройки и куда обращается при запуске Windows-приложений и их зависимостей. Там же будет храниться папка «drive_c», которая является корнем для Windows-приложений (диск C). Настройки Wine, а так же Windows-библиотеки для каждого префикса могут (и должны) быть индивидуальными.
При установке Wine скорее всего уже был создан префикс «по умолчанию» по адресу ~/.wine с архитектурой вашей ОС. В подавляющем большинстве случаев это x64. Но использовать один префикс для всех приложений не рекомендуется, так как для большинства из них настроек «по умолчанию» не достаточно. Создаём новый префикс:
WINEPREFIX=/path_to_my_prefix/name_of_may_prefix WINEARCH=»win32″ winecfg
Где «/path_to_my_prefix/name_of_may_prefix» — путь к вашему префиксу (Например ~/WindowsApp), «win32» — архитектура префикса (если у вас 32-х битная ОС, то параметр «WINEARCH=» можно не указывать. Если современная ОС и нужен 64-х битный префикс, то данный параметр тоже не нужен, так как по умолчанию будет создан 64-х битный префикс), «winecfg» — команда, которая откроет окно с конфигурацией Wine, где вы можете изменить настройки Wine. Вы можете закрыть его, оставив всё в состоянии «по умолчанию» и в любой момент вернуться к этим настройкам, набрав в терминале команду «winecfg» (без кавычек, с нужным префиксомю Например: WINEPREFIX=~/WindowsApp winecfg). Префикс не должен содержать пробелов и не латинских символов.
Пример команды, которая создаст 32-х битный префикс «WindowsApp» в 64-х битрой ОС:
WINEPREFIX=~/WindowsApp WINEARCH=»win32″
В вашей корневой директории (/home/user) будет создана папка «WindowsApp», которая и будет префиксом Wine, включающим в себя настройки Wine для этого конкретного префикса и всё, что там должно находиться.
Если для работы приложения (или приложений) в этом префиксе требуется установка дополнительных Windows-зависимостей, то используем winetricks. Пример:
winetricks prefix=~/WindowsApp vcrun2008
Данная команда скачает и установит в префикс «WindowsApp» Microsoft Visual C++ 2008. То есть winetricks поможет автоматизировать установку Windows-зависимостей. Но их всегда можно установить «по-старинке», скачав с сайта Microsoft и установив в префикс тем же способом, что и обычные приложения. Нередко сам установщик приложения уже содержит и предлагает установить все необходимые компоненты.
Если используется локальная (не системная) версия Wine, то при использовании Winetricks необходим параметр «WINE=» указывающий на путь к бинарникам Wine, тогда как при запуске программ с использованием локальной версии Wine этот параметр не нужен. Это важно, так как часто вызывает путаницу у тех, кто мало знаком с Wine. Пример:
WINEPREFIX=~/WindowsApp WINE=/home/user/.PlayOnLinux/wine/linux-amd64/3.2-staging/bin/wine winetricks d3dx9
Для установки приложения в наш префикс нужно выполнить следующее:
WINEPREFIX=~/WindowsApp wine ~/Downloads/setup.exe
Где «WINEPREFIX=~/WindowsApp» — указание на наш префикс, «wine» — команда, которая говорит системе, что файл должен быть запущен через Wine и «~/Downloads/setup.exe», путь к файлу «setup.exe», который только что был скачен и лежит в папке «Downloads».
Предположим, мы установили некое приложение, которое называется «App #1» и запускается через загрузчик, который называется «run.exe». Установлено оно «по умолчанию» в «Program Files». Для запуска этого приложения в нашем префиксе нужно выполнить следующую команду:
WINEPREFIX=~/WindowsApp wine «/home/user/WindowsApp/drive_c/Program Files/App #1/run.exe»
Используются кавычки, так как в пути есть пробелы. Они всегда будут, если устанавливать программы в каталоги «по умолчанию». «user» — имя вашего пользователя а Linux.
#! /bin/bash WINEPREFIX=~/WindowsApp wine «/home/user/WindowsApp/drive_c/Program Files/App #1/run.exe»
И сделайте его исполняемым.
Таким образом можно использовать системный Wine с произвольными префиксами.
В Linux нельзя поставить одновременно несколько версий Wine, так как «системной» может быть только одна версия. Но никто не запрещает на ряду с системной версией иметь несколько «локальных». Процедура сборки Wine из исходников описана на официальном сайте проекта. Но в целях облегчения жизни можно воспользоваться готовыми бинарниками, скачав их через PlayOnLinux или Lutris.
Установите PlayOnLinux из репозитория вашего дистрибутива и во вкладке «Tools» перейдите в «управление версиями Wine» (Manage Wine versions). Через это меню можно скачать бинарники любой доступной версии Wine. По умолчанию они будут расположены в директории ~/.PlayOnLinux/wine, готовые к использованию. Просто вместо команды «wine» при запуске программ и при использовании «winetricks» используйте полный путь до бинарника нужной версии Wine. Например:
WINEPREFIX=~/WindowsApp «/home/user/WindowsApp/drive_c/Program Files/App #1/run.exe»
В этом случае App #1 запущена не через системный Wine, а через 64х-битную 3.2 staging версию Wine, скаченную через PlayOnLinux. Соответственно и само приложение нужно было устанавливать с учётом архитектуры и версии Wine.
То же самое и в случае с Lutris. Lutris сам по себе достаточно интересен и заслуживает отдельного обзора, но поскольку сейчас речь идёт о «ручном» использовании Wine, мы ограничимся лишь сборками Wine от Lutris. Их множество и некоторые из них пропатчены для большей совместимости с отдельно взятой игрой. Lutris закачивает свои сборки Wine в ~/.local/share/lutris/runners/wine.
Несколько версий Wine полезно иметь в том случае, если системный Wine по каким-то причинам не запускает какое-либо приложение, при этом точно известно, что оно работает на определённой версии Wine. Или когда системный Wine обновился до следующей версии и какое-либо приложение перестало работать, при этом работало на предыдущей версии Wine.
Для повышения производительности некоторых приложений в Wine можно запускать их с дополнительными параметрами, не представленными на текущий момент в UI, вызываемым командой winecfg. Например, в ряде игр есть поддержка OpenGL и в Linux они будут работать лучше и быстрее с OpenGL, нежели с DirectX. Для принудительного включения OpenGL добавьте в команду запуска приложения параметр -opengl. Будет выглядеть примерно так:
WINEPREFIX=~/WindowsApp wine «/home/user/WindowsApp/drive_c/Program Files/App #1/run.exe» -opengl
DXVK позволяет запускать приложения с поддержкой DirectX 10/11 через Vulkan, что так же увеличивает производительность. Ищите информацию о наличии этого пакета в репозиториях вашего дистрибутива. Для Arc / Manjaro пакет «dxvk-bin» есть в AUR. Для включения поддержки DXVK нужно выполнить следующее:
WINEPREFIX=~/WindowsApp setup_dxvk64
Эта команда включит поддержку DXVK для нашего префикса. Используйте «setup_dxvk32» для 32-х битных префиксов. Для отключения DXVK нужно воспользоваться командой «winecfg» и в UI, во вкладке «Libraries» (библиотеки) сбросить перезапись соответствующих DirectX библиотек. Вернуть их в состояние «builtin».
Однако стоит учесть, что так как DXVK переписывает библиотеки (.dll) DirectX, в некоторых онлайн играх это может быть расценено как читерство, что чревато баном аккаунта. Перед включением данного параметра стоит поискать информацию на этот счёт, касательно игры, которую вы хотите запустить. Используйте этот параметр на свой страх и риск.
Таким образом можно установить любое Windows-приложение, которое в принципе может быть запущено в Wine. Без финансовых затрат и с большей степенью контроля.
Источник: www.newalive.net
Установка Wine в Ubuntu
Как известно, далеко не все программы, разработанные для операционной системы Windows, совместимы с дистрибутивами на ядре Linux. Такая ситуация порой вызывает проблемы у некоторых пользователей в связи с невозможностью установить нативные аналоги. Программа под названием Wine позволит решить эту неприятность, ведь она была разработана специально для обеспечения работоспособности приложений, созданных под Виндовс. Сегодня мы бы хотели продемонстрировать все доступные методы инсталляции упомянутого софта в Ubuntu.
Устанавливаем Wine в Ubuntu
Для выполнения поставленной задачи мы будем использовать стандартный «Терминал», однако не переживайте, вам не придется самостоятельно изучать все команды, ведь мы не только расскажем о самой процедуре установки, но и опишем все действия по очереди. От вас же потребуется только выбрать наиболее подходящий метод и следовать приведенным инструкциям.
Способ 1: Инсталляция из официального хранилища
Самый простой метод инсталляции последней стабильной версии — использование официального хранилища. Производится весь процесс путем ввода всего одной команды и выглядит так:
-
Перейдите в меню и откройте приложение «Терминал». Запустить его также можно, кликнув ПКМ по пустому месту на рабочем столе и выбрав соответствующий пункт.





Вот таким достаточно легким способом осуществляется добавление последней стабильной версии Wine 3.0 в операционную систему Ubuntu, однако этот вариант подходит не всем пользователям, поэтому предлагаем ознакомиться со следующими.
Способ 2: Использование PPA
К сожалению, не у каждого разработчика есть возможность вовремя выкладывать последние версии программного обеспечения в официальный репозиторий (хранилище). Именно поэтому были разработаны специальные библиотеки для хранения пользовательских архивов. Когда версия Wine 4.0 выйдет в свет, использование PPA будет наиболее уместно.
- Откройте консоль и вставьте туда команду sudo dpkg —add-architecture i386 , которая нужна для добавления поддержки процессоров с архитектурой i386. Обладателям Ubuntu 32-бит этот шаг можно пропустить.
- Теперь следует добавить репозиторий в свой компьютер. Делается это сначала командой wget -qO- https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add — .
- Затем напечатайте sudo apt-add-repository ‘deb http://dl.winehq.org/wine-builds/ubuntu/ bionic main’ .
- Не выключайте «Терминал», поскольку будет производиться получение и добавление пакетов.
- После успешного добавления файлов хранилища производится сама инсталляция путем ввода sudo apt install winehq-stable .
- Обязательно подтвердите проведение операции.
- Используйте команду winecfg , чтобы проверить работоспособность софта.
- Для запуска может потребоваться установка дополнительных компонентов. Она выполнится автоматически, после чего запустится окно настройки Wine, а это значит, что все функционирует исправно.
Способ 3: Установка бета-версии
Как вы узнали из информации выше, у Wine существует стабильная версия, вместе с ней разрабатывается и бета, активно тестируемая пользователями перед выходом для широкого применения. Инсталляция такой версии на компьютер производится практически так же, как и стабильной:
- Запустите «Терминал» любым удобным способом и используйте команду sudo apt-get install —install-recommends wine-staging .
- Подтвердите добавление файлов и ожидайте завершения инсталляции.
- Если экспериментальная сборка вас по каким-либо причинам не устраивает, удалите ее через sudo apt-get purge wine-staging .
Способ 4: Самостоятельная сборка из исходных кодов
Предыдущими методами установить две различные версии Wine рядом не получится, однако некоторые пользователи нуждаются в наличии сразу двух приложений, либо же желают самостоятельно добавить патчи и другие изменения. В таком случае лучшим вариантом будет самостоятельная сборка Wine из имеющихся исходных кодов.
- Первоочередно откройте меню и перейдите в «Программы и обновления».
- Здесь нужно поставить галочку напротив пункта «Исходный код», чтобы дальнейшие изменения с софтом стали возможными.
- Для применения изменений потребуется ввод пароля.
- Теперь через «Терминал» скачайте и установите все необходимое через sudo apt build-dep wine-stable .
- Загрузите исходный код необходимой версии, воспользовавшись специальной утилитой. В консоль вставьте команду sudo wget https://dl.winehq.org/wine/source/4.0/wine-4.0-rc7.tar.xz и нажмите на Enter. Если вам необходимо поставить другую версию, найдите в интернете соответствующий репозиторий и вставьте его адрес вместо https://dl.winehq.org/wine/source/4.0/wine-4.0-rc7.tar.xz.
- Распакуйте содержимое загруженного архива, воспользовавшись sudo tar xf wine* .
- Затем перейдите в созданное расположение cd wine-4.0-rc7 .
- Загрузите нужные файлы дистрибутива для сборки программы. В 32-битных версиях используйте команду sudo ./configure , а в 64-битных sudo ./configure —enable-win64 .
- Запустите процесс сборки через команду make . Если вы получите ошибку с текстом «Отказано в доступе», используйте команду sudo make , чтобы запустить процесс с рут-правами. Кроме всего, стоит учитывать, что процесс компилирования занимает много времени, не стоит принудительно выключать консоль.
- Соберите инсталлятор через sudo checkinstall .
- Последним шагом будет установка готовой сборки через утилиту путем ввода строки dpkg -i wine.deb .