, перевод Ю.Прушинский,Linux Gazette
class="c2">Несколько лет назад, когда я только начинал работать с
Линукс, у меня всегда была установлена Windows на соседнем разделе
диска. Так, на случай, если что-нибудь рухнет. Но позднее я
осознал, что в Linux есть практически всё, что мне нужно, и нет
необходимости тратить деньги на что-либо иное. Тем не менее, иногда
у меня возникает необходимость запустить приложение, написанное
именно под Windows. Что делать в этой ситуации? Мой ответ -
использовать 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, то для начала
вам нужно взять последние исходники эмулятора с официального сайта
href="http://www.winehq.com/">http://www.winehq.com. Хотя
вовсе не обязательно собирать его вручную из "сырцов". На сайте
есть ссылки на уже собранные версии эмулятора в разных форматах
(rpm, deb и т.д.).
class="c2">Если вы решились собрать Wine из исходников, то
необходимо выполнить следующее:
пакетом "сырцов". Почему именно пакетом? Во-первых, для тех, кто не в курсе,
http://gazette.linux.ru.net/rus/articles/ideal_sysadmin-rpm.html">статью Дениса Овсиенко
об организации и ведении "пакетного хозяйства".
Во-вторых, почему пакет "сырцов", а не "бинарников"? Всегда лучше
"заточить" программу под конкретную машину. Кроме этого, если вы используете rpm-based дистрибутив, то я советую вам
href="http://www.altlinux.ru">ALT Linux из репозитория пакетов
Sisyphus. Пакет с исходниками вы найдёте
href="ftp://ftp.altlinux.com/pub/distributions/ALTLinux/Sisyphus/files/SRPMS/">здесь
(ищите файл wine-номер_cvs_версии-номер_сборки.src.rpm). Здесь же вы можете взять и
пакет исходников для WineX (см. подкаталог
href="ftp://ftp.altlinux.com/pub/distributions/ALTLinux/Sisyphus/files/unsupported/SRPMS/">Sisyphus/unsupported и ищите файл
WineX-номер_версии-номер_сборки.src.rpm). Прим.ред.]
Если же вы хотите самую-самую свежую версию Wine, то можно взять
исходный код с CVS:
На запрос пароля, введите 'cvs':
После этого в вашей текущей папке появится подкаталог "wine", в
который и скопируются все необходимые файлы. После завершения
копирования, вы можете скомпилировать wine вышеуказанными
командами.
Теперь нам нужен конфигурационный файл с именем "config" в
каталоге "
~/.wine/". Вы можете просто скопировать его
пример из каталога с исходниками:
Конечно, от количества параметров в конфигурационном файле
"config" можно слегка приуныть, но это только на первый взгляд. На
самом деле достаточно настроить лишь самые основные пути для вашей
системы. Например, вам нужно проверить следующие секции:
[Drive A]
"Path" = "/mnt/fd0"
"Type" = "floppy"
"Label" = "Floppy"
"Serial" = "87654321"
"Device" = "/dev/fd0"
[Drive C]
"Path" = "/c"
"Type" = "hd"
"Label" = "MS-DOS"
"Filesystem" = "win95"
[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"
диск [E], но диски определены только до [D]. Тоже самое относится к
переменной "Path". Прим.ред.
Сейчас мы создадим основную структуру каталогов Windows
(папки "windows", "system") которые указаны в файле "config" в
секции "[wine]":
Секция "
[DllOverrides]" в конфигурационном
файле управляет библиотеками DLL, которые в Wine являются аналогами
библиотек Windows, а также некоторыми родными Windows библиотеками,
которые вам могут быть необходимы:
; Будьте предельно осторожны здесь, неверная
; настройка DllOverrides потенциально может
; повредить настройку вашего эмулятора
[DllOverrides]
"commdlg" = "builtin, native"
"comdlg32" = "builtin, native"
"ver" = "builtin, native"
"version" = "builtin, native"
"shell" = "builtin, native"
"shell32" = "builtin, native"
"shfolder" = "builtin, native"
"shlwapi" = "builtin, native"
"shdocvw" = "builtin, native"
"lzexpand" = "builtin, native"
"lz32" = "builtin, native"
"comctl32" = "builtin, native"
"commctrl" = "builtin, native"
"advapi32" = "builtin, native"
"crtdll" = "builtin, native"
"mpr" = "builtin, native"........
динамическими библиотеками. Например: commdlg, comdlg32, commctrl, comctl32, shell, shell32.
Только нужно, чтобы они присутствовали в каталоге, определённом переменной "System"
секции [wine]. Общий список, что можно использовать в Wine из библиотек Windows, а
что нельзя, вы найдёте в файле документации x1273.html. Прим.ред.
Секция
[serialports] отвечает за настройку разных
портов и устройств:
Внешний вид окон можно поменять в секции
;; поддерживаются стили 'Win31'(default), 'Win95', 'Win98'
;; но не путайте это с номерной версией Windows, которую выдает Wine:
;; для этого используйте опцию командной строки --winver .
"WineLook" = "Win98"
в ~/.wine/config следующие строки:
[Version]
; Имитация версии Windows (win95,win98,winme,nt351,nt40,win2k,winxp,win20,win30,win31)
"Windows" = "win98"
; Имитация версии DOS
"DOS" = "6.22"
Далее нам необходимо установить реестр по умолчанию, который в
точности соответствует реестру, который есть на любой
Windows-машине. Но перед этим надо не забыть немного подправить
файл
/etc/ld.so.conf . Для этого мы просто добавляем в
него строку
/usr/local/lib/wine [Здесь будьте особенно
внимательны -- возможно ваша версия Wine собрана с другим ключом
--prefix. Например, /usr. Соответственно, и пути поменяются.
Прим.ред.], которая указывает на расположение библиотек,
необходимых программе для имитации Windows-окружения.
Да, и не забудьте запустить
/sbin/ldconfig после
этого.
Итак, теперь мы можем использовать regapi, чтобы
установить реестр по умолчанию. В каталоге с исходниками Wine
выполните следующую команду:
возможность "резвиться" в файле реестра. Если сделаете это, то
заодно раскомментируйте в секции [DllOverrides] строку:
"C:\windows\regedit.exe" = "native, builtin"
От редактора:
Всё, что описал Gaurav, конечно, в тему. Но есть ещё один очень важный
момент в настройке Wine -- шрифты. Для получения качественных шрифтов в Wine,
необходимо в системе настроить и зарегистрировать ttf-шрифты.
Идеальным вариантом будет скачать (опять обращаемся к Sisyphus) пакет
Затем правим (если нужно) в ~/.wine/config два раздела, [Fonts] и [FontDirs]. Получается
примерно следующее:
[fonts]
"Resolution" = "96"
"Default" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r"
"DefaultFixed" = "-monotype-courier new-*-*-*--*-*-*-*-*-*-koi8-r"
"DefaultSerif" = "-monotype-times new roman-*-*-*--*-*-*-*-*-*-koi8-r"
"DefaultSansSerif" = "-monotype-arial-*-*-*--*-*-*-*-*-*-koi8-r"
[FontDirs]
"dir1" = "/usr/X11R6/lib/X11/fonts/msttf"
Само собой разумеется, что каталог (или каталоги) меняется в зависимости от
того, куда именно вы установили ttf-шрифты.
Кроме этого можно поиграть с антиалиасингом и способом и местом
рендеринга шрифтов (на стороне клиента или сервера):
[x11drv]
...
"ClientSideWithRender" = "Y"
"ClientSideWithCore" = "Y"
"ClientSideAntiAliasWithRender" = "Y"
"ClientSideAntiAliasWithCore" = "Y"
...
Если же вам не нужен антиалиасинг в приложениях Windows, то выставите значение
двух последних опций в "N".
В принципе, уже сейчас после произведённой ранее
настройки можно попробовать запустить какое-нибудь простое
Windows-приложение. Попробуем обычный калькулятор, который идёт в
стандартной поставке Windows (
"calc.exe").
Вы можете примонтировать раздел с Windows или
скопировать
calc.exe" с дискеты в вашу систему в каталог
способов:
cd /c/windows; wine calc.exe
wine /c/windows/calc.exe
wine "c:windowscalc.exe"
Здесь вы можете посмотреть как выглядит
это приложение на моей Линукс-машине.
Здорово, не правда ли!
(факт запуска калькулятора несомненно
крут, но к тому, что на заднем плане это уже не относится, особенно
после KDE 3.1 ... - прим. перев. )
Wine может быть очень полезен, когда вам необходимо
запустить какой-нибудь файл для Windows в системе Линукс.
Единственное замечание - надо учитывать что не все ваши приложения
будут работать в Wine, и вам будет необходимо самим разобраться как
заставить работать вашу любимую программу. Но, всё равно, во многих
случаях Wine бывает очень полезен.
От редактора:
Не торопитесь. Несколько слов о том, как мне приходилось "бодаться" с Wine
при подготовке этой статьи к публикации. Во-первых,
вам следует знать, что при первом запуске Wine генерирует разделы [Drive X] на
основании данных /etc/fstab. Если вы планируете использовать в качестве
основы для работы Wine каталоги и файлы Windows, то можете оставить всё как
есть. Если же нет, то придётся подправить секции [Drive X]. Я настроил Wine
таким образом, что ему доступны два диска, [C] и [D] (жёсткий диск, CD-привод) и
привод флоппи-дисков [A]:
[Drive A]
"Path" = "/mnt/floppy"
"Type" = "floppy"
"Label" = "Floppy"
"Filesystem" = "win95"
"Serial" = "87654321"
"Device" = "/dev/fd0"
[Drive C]
"Path" = "/var/lib/wine"
"Type" = "hd"
"Label" = "MS-DOS"
"Filesystem" = "win95"
[Drive D]
"Path" = "/mnt/cdrom"
"Type" = "cdrom"
"Label" = "CDROM"
"Filesystem" = "win95"
"Device" = "/dev/cdrom"
При этом для диска [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!
И на рабочем столе столе тоже (см.
href="misc/taneja/winamp.png">скриншот)
И в заключении несколько примеров:
в эхах вопрос при переходе с Windows на Linux -- "а чем заменить TheBat!?" Один из вариантов
ответа -- TheBat!'ом. Хотя, если подумать, то это попахивает
извращением. Попробую объяснить почему: на мой взгляд, цель Wine заключается в том, чтобы дать
возможность работать с Windows-программами, чьих аналогов нет в Linux. В случае
же с почтовым клиентом это не так, и каждый может найти себе в Linux MUA по вкусу. К тому же у TheBat!,
работающего под Wine обнаружилась неприятная особенность -- границы кнопок панели инструментов
"мажутся" (см. слева от кнопки "Get new mail").
чувствует себя в Linux.
Windows Commander, пожалуйста. Хотя и тут не обошлось без казусов. Почему-то при путешествии
по дереву каталогов при помощи стрелок управления курсора, WC ведёт себя так, будто нажимается
не клавиша Down, а Insert (команда "пометить файл").
Судя по всему, программы небольшого размера будут себя неплохо чувствовать в среде Wine.
Исключение составляют те программы, которые немного экзальтировано используют Windows API
(недокументированные возможности и прочее). К сожалению, программы-гиганты типа MS Office и ему
подобные, активно засоряющие реестр и таскающие за собой ворох динамических библиотек, очень трудно
заставить работать.