Wine: Поднимая тост за ваши Windows-приложения в Linux
Автор: Gaurav Taneja <tech@gauravtaneja.com>
Перевод: Юрий Прушинский http://gazette.linux.ru.net/team/y_prushinsky.html
Обработка: Александр Куприн http://gazette.linux.ru.net/team/a_kuprin.html
Несколько лет назад, когда я только начинал работать с Линукс, у меня
всегда была установлена Windows на соседнем разделе диска. Так, на
случай, если что-нибудь рухнет. Но позднее я осознал, что в Linux есть
практически всё, что мне нужно, и нет необходимости тратить деньги на
что-либо иное. Тем не менее, иногда у меня возникает необходимость
запустить приложение, написанное именно под Windows. Что делать в этой
ситуации? Мой ответ - использовать Wine.
Wine не имеет ничего общего со спиртным!
Такие программы как VMware и Win4Lin позволяют вам запускать из-под
Linux другие операционные системы (как правило Windows) и таким
образом предоставляют возможность запускать Windows-приложения на
Линукс-машине. [Win4Lin специально создана для использования
исключительно Windows. VMware -- это "отдельная песня". Уникальность
этого продукта в том, что он эмулирует работу "железа" компьютера, что
позволяет устанавливать в её среде такие ОС как Windows, MSDOS, Linux,
FreeBSD и т.п. Исключение могут составлять те операционные системы,
которые очень круто обходятся с аппаратным обеспечением. Прим.ред.]
Кроме того, можно пойти традиционным путем и установить Windows на
соседний раздел. Тем не менее, эти альтернативы скорее нагружают вашу
систему, чем решают проблему.
Wine (рекурсивный акроним от "WINE Is Not an Emulator") отличается от
всех вышеперечисленных методов, и не требует от вас покупки
лицензионной копии Windows. Принцип его работы основан на эмуляции
Win32 API, код которого полностью переписан и отличается от кода
Microsoft.
Прим.ред.: предыдущий абзац вводит немного в заблуждение. Так
всё-таки: Wine -- эмулятор или нет? Посмотрим, что говорится в
документации к нему (c3886.html):
Аббревиатура "Wine" -- это рекурсивный акроним "Wine Is Not an
Emulator". Кроме этого Wine известен тем, что используется как
"эмулятор Windows". В некотором смысле, оба значения верны, только
отличаются в зависимости от перспективы. Первое определение говорит о
том, что Wine не виртуальная машина. Он не эмулирует работу CPU и вы
не устанавливаете Windows или драйвера устройств для неё. Правильней
сказать, что Wine -- это реализация API Windows и он может
использоваться как библиотека для портирования приложений Windows на
Unix. Второе утверждение (о том, что Wine эмулятор), очевидно,
опирается на то, что для исполняемых файлов Windows (.exe файлы), Wine
действительно выглядит как Windows, подражая его поведению.
Давайте поднимем тост!
Если вы уже решились поэкспериментировать с Wine, то для начала вам
нужно взять последние исходники эмулятора с официального сайта проекта
http://www.winehq.com. Хотя вовсе не обязательно собирать его
вручную из "сырцов". На сайте есть ссылки на уже собранные версии
эмулятора в разных форматах (rpm, deb и т.д.).
Если вы решились собрать Wine из исходников, то необходимо выполнить
следующее:
gunzip Wine-20020411.tar.gz
tar -xvf Wine-20020411.tar
cd wine-20020411
./configure
make depend
make
make install
[Но лучше этого не делать и воспользоваться соответствующим пакетом
"сырцов". Почему именно пакетом? Во-первых, для тех, кто не в курсе,
смотрите статью Дениса Овсиенко об организации и ведении "пакетного
хозяйства" http://gazette.linux.ru.net/rus/articles/ideal_sysadmin-rpm.html
Во-вторых, почему пакет "сырцов", а не "бинарников"?
Всегда лучше "заточить" программу под конкретную машину. Кроме этого,
если вы используете rpm-based дистрибутив, то я советую вам взять
пакет Wine на сайте ALT Linux из репозитория пакетов Sisyphus.
Пакет с исходниками вы найдёте здесь
ftp://ftp.altlinux.com/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/
(ищите файл wine-номер_cvs_версии-номер_сборки.src.rpm). Здесь же вы можете
взять и пакет исходников для WineX (см. подкаталог Sisyphus/unsupported и
ищите файл WineX-номер_версии-номер_сборки.src.rpm). Прим.ред.]
Если же вы хотите самую-самую свежую версию Wine, то можно взять
исходный код с CVS:
После этого в вашей текущей папке появится подкаталог "wine", в
который и скопируются все необходимые файлы. После завершения
копирования, вы можете скомпилировать wine вышеуказанными командами.
Настройка Wine
Теперь нам нужен конфигурационный файл с именем "config" в каталоге
"~/.wine/". Вы можете просто скопировать его пример из каталога с
исходниками:
cp documentation/samples/config ~/.wine/config
Конечно, от количества параметров в конфигурационном файле "config"
можно слегка приуныть, но это только на первый взгляд. На самом деле
достаточно настроить лишь самые основные пути для вашей системы.
Например, вам нужно проверить следующие секции:
[Drive D]
"Path" = "/cdrom"
"Type" = "cdrom"
"Label" = "CD-Rom"
"Filesystem" = "win95"
; убедитесь что устройство указано правильно и имеет корректно
; установленные атрибуты доступа!
"Device" = "/dev/cdrom"
Wine пытается эмулировать DOS-раздел и структуру каталогов, поэтому,
например, секция которая начинается с "[Drive C]" обозначает
соответствие гипотетическому диску С: с вашим Линукс-каталогом, в
данном случае "/c".
Далее, таким же образом в секции "[wine]" настраиваются системные
папки "windows" и "system":
"Windows" = "c:\windows"
"System" = "c:\windows\system"
"Temp" = "e:\"
"Path" = "c:\windows;c:\windows\system;e:\;e:\test;f:\"
"Profile" = "c:\windows\Profiles\Administrator"
"GraphicsDriver" = "x11drv"
; Wine по умолчанию не "понимает" символьные ссылки каталогов для
; Windows-программ.
; Включение этой опции может вызвать сбой в программе, пытающейся
; сделать рекурсивный просмотр всего дерева
; подкаталогов, в случае если символьная ссылка указывает на саму
; себя.
; "ShowDirSymlinks" = "1"
"ShellLinker" = "wineshelllink"
Обратите внимание на ошибку -- переменная "Temp" указывает на диск
[E], но диски определены только до [D]. Тоже самое относится к
переменной "Path". Прим.ред.
Сейчас мы создадим основную структуру каталогов Windows (папки
"windows", "system") которые указаны в файле "config" в секции
"[wine]":
cd /c
mkdir -p windows/system
mkdir -p windows/Start Menu/Programs
Секция "[DllOverrides]" в конфигурационном файле управляет
библиотеками DLL, которые в Wine являются аналогами библиотек Windows,
а также некоторыми родными Windows библиотеками, которые вам могут
быть необходимы:
Ну, не всё так страшно. Можно воспользоваться и "родными" для Windows
динамическими библиотеками. Например: commdlg, comdlg32, commctrl,
comctl32, shell, shell32. Только нужно, чтобы они присутствовали в
каталоге, определённом переменной "System" секции [wine]. Общий
список, что можно использовать в Wine из библиотек Windows, а что
нельзя, вы найдёте в файле документации x1273.html. Прим.ред.
Секция [serialports] отвечает за настройку разных портов и устройств:
Внешний вид окон можно поменять в секции [Tweak.Layout].
;; поддерживаются стили 'Win31'(default), 'Win95', 'Win98'
;; но не путайте это с номерной версией Windows, которую выдает Wine:
;; для этого используйте опцию командной строки --winver .
"WineLook" = "Win98"
(Не обязательно запускать Wine с ключом --winver, вы можете прописать
в ~/.wine/config следующие строки:
[Version]
; Имитация версии Windows (win95,win98,winme,nt351,nt40,win2k,winxp,win20,win3
0,win31)
"Windows" = "win98"
; Имитация версии DOS
"DOS" = "6.22"
Прим.ред.)
А про реестр Windows вы не забыли?
Далее нам необходимо установить реестр по умолчанию, который в
точности соответствует реестру, который есть на любой Windows-машине.
Но перед этим надо не забыть немного подправить файл /etc/ld.so.conf .
Для этого мы просто добавляем в него строку /usr/local/lib/wine [Здесь
будьте особенно внимательны -- возможно ваша версия Wine собрана с
другим ключом --prefix. Например, /usr. Соответственно, и пути
поменяются. Прим.ред.], которая указывает на расположение библиотек,
необходимых программе для имитации Windows-окружения.
Да, и не забудьте запустить /sbin/ldconfig после этого.
Итак, теперь мы можем использовать regapi, чтобы установить реестр по
умолчанию. В каталоге с исходниками Wine выполните следующую команду:
programs/regapi/regapi setValue < winedefault.reg
Неплохо бы взять "родной" regedit.exe -- тогда у вас появится
возможность "резвиться" в файле реестра. Если сделаете это, то заодно
раскомментируйте в секции [DllOverrides] строку:
"C:\windows\regedit.exe" = "native, builtin"
Если нужно, исправтье путь к regedit.exe. Прим.ред.
_________________________________________________________________
От редактора: А про шрифты вы не забыли?
Всё, что описал Gaurav, конечно, в тему. Но есть ещё один очень важный
момент в настройке Wine -- шрифты. Для получения качественных шрифтов
в Wine, необходимо в системе настроить и зарегистрировать ttf-шрифты.
Идеальным вариантом будет скачать (опять обращаемся к Sisyphus) пакет
ttf-шрифтов от Microsoft (ms-ttf-1.0-alt5.src.rpm).
ftp://ftp.altlinux.com/pub/distributions/ALTLinux/Sisyphus/files/SRPMS.non-free/ms-ttf-1.0-alt5.src.rpm
Затем правим (если нужно) в ~/.wine/config два раздела, [Fonts] и [FontDirs].
Получается примерно следующее:
Если же вам не нужен антиалиасинг в приложениях Windows, то выставите
значение двух последних опций в "N".
_________________________________________________________________
А теперь давайте всё это подпалим!
В принципе, уже сейчас после произведённой ранее настройки можно
попробовать запустить какое-нибудь простое Windows-приложение.
Попробуем обычный калькулятор, который идёт в стандартной поставке
Windows ("calc.exe").
Вы можете примонтировать раздел с Windows или скопировать calc.exe" с
дискеты в вашу систему в каталог "/c/windows" и запустить его одним из
нижеуказанных способов:
cd /c/windows; wine calc.exe
wine /c/windows/calc.exe
wine "c:windowscalc.exe"
Здесь вы можете посмотреть как выглядит это приложение на моей
Линукс-машине. http://gazette.linux.ru.net/lg80/misc/taneja/calc.png
Здорово, не правда ли! (факт запуска калькулятора
несомненно крут, но к тому, что на заднем плане это уже не относится,
особенно после KDE 3.1 ... - прим. перев. )
На этом всё!
Wine может быть очень полезен, когда вам необходимо запустить
какой-нибудь файл для Windows в системе Линукс. Единственное замечание
- надо учитывать что не все ваши приложения будут работать в Wine, и
вам будет необходимо самим разобраться как заставить работать вашу
любимую программу. Но, всё равно, во многих случаях Wine бывает очень
полезен.
_________________________________________________________________
От редактора: "А вас, Штирлиц, я попрошу остаться!" (c) Броневой
Пути.
Не торопитесь. Несколько слов о том, как мне приходилось "бодаться" с
Wine при подготовке этой статьи к публикации. Во-первых, вам следует
знать, что при первом запуске Wine генерирует разделы [Drive X] на
основании данных /etc/fstab. Если вы планируете использовать в
качестве основы для работы Wine каталоги и файлы Windows, то можете
оставить всё как есть. Если же нет, то придётся подправить секции
[Drive X]. Я настроил Wine таким образом, что ему доступны два диска,
[C] и [D] (жёсткий диск, CD-привод) и привод флоппи-дисков [A]:
При этом для диска [C] использовался "скелет" каталогов,
сформированный Wine при инсталляции, /var/lib/wine. Решать, конечно,
вам какую именно конфигурацию избрать. Можете оставить путь к
подмонтированым vfat-разделам (надеюсь, понятно, что под
vfat-разделами я понимаю разделы с файловыми системами FAT12, FAT16
и/или FAt32). Но, что там может натворить Wine? Лично я не знаю,
поэтому работал с /var/lib/wine. К тому же этот вариант универсален,
т.к. позволяет использовать Wine на машине, где нет vfat-разделов. И
есть ещё одна неприятная особенность, которую я не смог побороть --
не-LATIN имена файлов сохраняются в кодировке cp1251. А в
vfat-разделах они хранятся в кодировке cp866.
Обратите внимание на значение переменной "Temp" в разделе [wine]
(выше, в примечаниях, я уже об этом говорил):
[wine]
...
"Temp" = "C:\Temp"
...
По умолчанию переменная "Temp" указывает на отдельный диск, который
формируется в "/tmp/winetmp-${USER}". Я её исправил на C:\Temp,
предварительно создав подкаталог Temp на диске [C] (в моём случае это
/var/lib/wine/Temp)
Проверьте значение переменной "Path" в этом же разделе. Возможно,
понадобится добавить новые пути.
Звук.
Чтобы Wine "зазвучал", вы должны раскомментировать одну из строк в
секции [WinMM]:
[WinMM]
...
;"Drivers" = "wineoss.drv" ; default for most common configurations
"Drivers" = "winearts.drv" ; for KDE
;"Drivers" = "winealsa.drv" ; for ALSA users
;"Drivers" = "winejack.drv" ; for Jack sound server
;"Drivers" = "winenas.drv" ; for NAS sound system
;"Drivers" = "wineaudioio.drv" ; for Solaris machines
;"Drivers" = "" ; to disable sound
...
У меня запущен KDE, поэтому для переменной "Drivers" я указал значение
"winearts.drv". Для большинства конфигураций подойдёт "wineoss.drv".
Чтобы убедиться в том, что в Wine появился звук, я установил Winamp
версии 2.0 Заголовок главного окна оказался битым (но только главного
-- окно плэйлиста и эквалайзера отображалось корректно), а само окно
"мазалось" при перемещении других окон поверх него. Но звук был и что
самое удивительное во всём этом -- в системном лотке KDE появился
значок агента Winamp! И на рабочем столе столе тоже (см. скриншот)
http://gazette.linux.ru.net/lg80/misc/taneja/winamp.png
Скриншоты.
И в заключении несколько скриншотов:
* The Bat! -- наверное самый часто задаваемый в эхах вопрос при
переходе с Windows на Linux -- "а чем заменить TheBat!?" Один из
вариантов ответа -- TheBat!'ом. Хотя, если подумать, то это
попахивает извращением. Попробую объяснить почему: на мой взгляд,
цель Wine заключается в том, чтобы дать возможность работать с
Windows-программами, чьих аналогов нет в Linux. В случае же с
почтовым клиентом это не так, и каждый может найти себе в Linux
MUA по вкусу. К тому же у TheBat!, работающего под Wine
обнаружилась неприятная особенность -- границы кнопок панели
инструментов "мажутся" (см. слева от кнопки "Get new mail").
http://gazette.linux.ru.net/lg80/misc/taneja/thebat.png
* WinRar -- любимый многими архиватор в среде Windows неплохо
чувствует себя в Linux.
http://gazette.linux.ru.net/lg80/misc/taneja/winrar.png
* Windows Commander -- Far запустить не удалось, а вот Windows
Commander, пожалуйста. Хотя и тут не обошлось без казусов.
Почему-то при путешествии по дереву каталогов при помощи стрелок
управления курсора, WC ведёт себя так, будто нажимается не клавиша
Down, а Insert (команда "пометить файл").
http://gazette.linux.ru.net/lg80/misc/taneja/wc.png
Заключение.
Судя по всему, программы небольшого размера будут себя неплохо
чувствовать в среде Wine. Исключение составляют те программы, которые
немного экзальтировано используют Windows API (недокументированные
возможности и прочее). К сожалению, программы-гиганты типа MS Office и
ему подобные, активно засоряющие реестр и таскающие за собой ворох
динамических библиотек, очень трудно заставить работать.
Если вам интересно, то здесь вы найдёте конфигурационный файл,
который использовал я http://gazette.linux.ru.net/lg80/misc/taneja/config.txt
Copyright (c) 2002, Gaurav Taneja.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 80 of Linux Gazette, July 2002