Глава IV. Работа с Wine

В этой главе будут описаны все аспекты запуска программы Wine, такие как базовый вызов Wine, параметры командной строки различных сопутствующих программ и так далее.

4.1. Основное использование: приложения и апплеты панели управления

Подразумеваем, что вы используете фальшивую инсталляцию Windows. Вы устанавливаете программы в Wine точно так же, как делаете это в Windows: путем запуска инсталлятора. Можете принять папку для установки по умолчанию, большинство инсталляторов используют по умолчанию "C:\Program Files", что вполне хорошо. Если инсталлятор программы запрашивает, можете создать иконки на рабочем столе и в главном меню. Если это сделано, вы сможете запускать приложения прямо щелчком мыши.

Стандартным способом деинсталляции программ является штатный деинсталлятор самой программы, обычно зарегистрированный в аплете панели управления "Add/Remove Programs". Чтобы вызвать эквивалент деинсталлятора от самой Wine, запустите в терминале программу uninstaller (она расположена в папке programs/uninstaller/ в директории с исходниками Wine): $ uninstaller Некоторые программы, например Internet Explorer и QuickTime, устанавливают объединенные апплеты панели управления. Вы можете вызвать панель управления Wine, запустив в терминале: $ wine control которая откроет окно панели управления с установленными аплетами, как в Windows.

Если приложение не устанавливает себя в меню или значок на рабочем столе, вам придется запускать его из командной строки. Если вы помните, куда вы установили программу, то примерно такая команда: $ wine "c:\program files\appname\appname.exe" скорее всего сделает свое дело. Путь (path) не реагирует на регистр букв, но не забудьте про двойные кавычки. Некоторые программы не всегда используют достаточно очевидные способы именования своих программ и EXE файлов, так что можно заглянуть в директорию Program Files и посмотреть, что там записано.

4.2. Как запускать Wine

Можно просто запустить команду Wine, чтобы увидеть небольшую подсказку:

Wine 20040405 Применеие: wine ПРОГРАММА [АРГУМЕНТЫ...] Запустить программу wine --help Показать эту помощь и выйти wine --version Показать версию и выйти

Первым аргументом должно быть имя файла, который вы хотите запустить с помощью Wine. Если исполняемый файл находится в переменной окружения Path, можно просто напечатать его имя. Если же файл не входит в Path, то нужно указать полный путь к исполняемому файлу (в формате Windows, а не Юникс!). Например, дана такая переменная окружения Path: Path="c:\windows;c:\windows\system;e:\;e:\test;f:\" Вы можете запустить файл c:\windows\system\foo.exe при помощи: $ wine foo.exe Однако файл c:\myapps\foo.exe придется запускать командой: $ wine c:\\myapps\\foo.exe (обратите внимание на двойной обратный слэш!)

О подробностях запуска исполняемых файлов в текстовом режиме (CUI) смотрите раздел ниже.

4.3. Графический интерфейс Wine, подобный интерфейсу "Проводника" Windows

Если вы предпочитаете управлять вашими файлами при помощи графического менеджера, то вам стоит использовать Winefile. Это приложение Winelib поставляется с Wine и находится вместе с прочими программами Wine. Оно удобно, чтобы видеть конфигурацию ваших дисков, и для поиска файлов, плюс к тому, вы можете запускать программы прямо из Winefile. Пожалуйста, имейте в виду, что многие функции пока не реализованы.

4.4 Опции командной строки Wine

4.4.1. --help

Показывает небольшую страничку помощи.

4.4.2. --version

Показывает номер версии Wine. Полезно для проверки вашей инсталляции.

4.5. Переменные окружения

4.5.1. WINEDEBUG=[channels]

Wine небезупречен и многие Windows программы идут под Wine не без ошибок. Справедливости ради надо сказать, что множество Windows программ идут с ошибками и под настоящим Windows! Чтобы упростить людям отслеживание причин каждой ошибки, Wine поставляет множество каналов отладки (debug channels), которыми вы можете воспользоваться.

Каждый канал отладки, будучи активирован, начинает выводить сообщения протоколирования на консоль, в которой работает Wine. Вы можете перенаправить эти сообщения в файлы и исследовать их в свободное время. Но будьте осторожны! Некоторые из каналов отладки могут записывать в протокол немыслимые объемы сообщений. Среди наиболее плодовитых вредителей выделяются relay, который записывает сообщение в протокол при каждом вызове win32-функции; win, который отслеживает прохождение Windows сообщений, и, конечно, all, который является синонимом каждого отдельного существующего канала отладки. Для сложного приложения объем ваших отладочных логов легко может превысить 1 Мб и больше. Сыщик relay часто генерирует более 10 Мб логов, в зависимости от продолжительности работы программы. (Чтобы изменить содержание отчетов relay, вам придется редактировать ключ реестра RelayExclude). Ведение всех этих логов тормозит работу Wine, так что пользуйтесь WINEDEBUG только тогда, когда действительно хотите получить лог сообщения.

Внутри каждого отладочного канала, вы можете задать класс сообщений, чтобы отфильтровывать степень серьезности ошибок. Четыре класса сообщений суть: trace (след), fixme (исправить), warn (предупредить), err (ошибка).

Для включения отладочного канала, используйте форму class+channel. Для отключения канала форму class-channel. Чтобы перечислить несколько каналов в одной опции WINEDEBUG, разделяйте каналы запятыми. Например, чтобы получать сообщения класса warn в канале отладки heap, вы можете запустить Wine такой командой: $ WINEDEBUG=warn+heap wine program_name Если вы не укажете класс сообщения, Wine будет выдавать сообщения всех 4 классов для данного канала: $ WINEDEBUG=heap wine program_name Если вы захотите получать логи со всех каналов, кроме канала relay, вы можете дать примерно такую команду: $ WINEDEBUG=+all,-relay wine program_name Вот список всех отладочных каналов и классов в Wine. В следующих версиях каналы будут добавлены (или убавлены).

Таблица 1. Отладочные каналы

acceladpcmadvapianimateaspi
atomavicapavifilebidibitblt
bitmapcabinetcapicaretcdrom
cfgmgr32classclipboardclippingcombo
comboexcommcommctrlcommdlgcomputername
consolecrtdllcryptcursescursor
d3dd3d_shaderd3d_surfacedatetimedc
ddemlddrawddraw_fpsddraw_geomddraw_tex
debugstrdevenumdialogdinputdll
dmadmbanddmcomposdmfiledmfiledat
dmimedmloaderdmscriptdmstyledmsynth
dmusicdosfsdosmemdplaydplayx
dpnhpastdriverdsounddsound3dedit
enhmetafileenvironeventeventlogexec
filefixupfontfpsg711
gdiglobalglugraphicsheader
heaphookhotkeyicmpicon
imagehlpimagelistimmintint21
int31ioipaddressiphlpapijack
joystickkeykeyboardlistboxlistview
loaddlllocalmapimcimcianim
mciavimcicdamcimidimciwavemdi
menumenubuildermessagemetafilemidi
mmauxmmiommsysmmtimemodule
monthcalmpeg3mprmsacmmsdmo
msgmshtmlmsimsimg32msisys
msrle32msvcrtmsvideomswsocknativefont
netapi32netbiosnlsnonclientntdll
odbcoleoledlgolerelayopengl
pagerpalettepidlpowermgntprint
processprofileprogresspropsheetpsapi
psdrvqcapquartzrasrebar
regregionrelayresourcerichedit
rundll32sblasterscrollsehselector
serversetupapishdocvwshellshlctrl
snmpapisnoopsoundstaticstatusbar
storagestressstringsyscolorsystem
tabtapetapitasktext
threadthunktidtimertoolbar
toolhelptooltipstrackbartreeviewttydrv
twaintypelibuninstallerupdownurlmon
uxthemevervirtualvxdwave
wc_fontwinwin32winebootwinecfg
wineconsolewine_d3dwinevdmwingwinhelp
wininetwinmmwinsockwinspoolwintab
wintab32wnetx11drvx11settingsxdnd
xrandrxrenderxvidmode  

О деталях работы с отладочными каналами, читайте The Wine Developer's Guide.

4.5.2. WINEDLLOVERRIDES=[DLL Overrides]

Не всегда возможно запустить приложение, используя встроенные DLL. Иногда "родные" Виндовские DLL просто лучше работают. Хотя эти замены DLL могут быть произведены при помощи winecfg, вы можете использовать переменную окружения WINEDLLOVERRIDES для их настройки.

Для примера: вы хотите, чтобы Wine использовал "родные" ole32.dll, oleaut32.dll и rpcrt4. Тогда запускайте Wine такой командой: $ WINEDLLOVERRIDES="ole32,oleaut32,rpcrt4=n" wine program_name В разделе замена DLL вы найдете дополнительную информацию по этому вопросу.

4.5.3. Настройка OSS звуковых драйверов

Если у вас звуковые драйвера OSS и есть несколько устройств (например, /dev/dsp*, /dev/mixer*), вы можете выбрать какое именно вы хотите использовать, при помощи переменных окружения

AUDIODEV=[audio device]

MIXERDEV=[mixer device]

MIDIDEV=[MIDI device]

Вот пример: $ AUDIODEV=/dev/dsp4 MIXERDEV=/dev/mixer1 MIDIDEV=/dev/midi3 wine program_name

4.6. Опции командной строки wineserver'а

Wineserver обычно стартует автоматически, как только запускается первый Wine процесс. Однако wineserver имеет несколько полезных опций командной строки, которые можно использовать, если запускать его вручную, например, используя скрипт при залогинивании пользователя, или еще как-нибудь.

4.6.1. -d<n>

Устанавливает значение ошибки , при котором wineserver начинает вывод наладочной информации в терминале. Другими словами: всякое значение, отличное от 0, вызовет специфический вывод программы wineserver.

4.6.2. -h

Выводит на дисплей сообщение, содержащее помощь по опциям командной строки wineserver'а.

4.6.3. -k[n]

Убивает текущий wineserver, при помощи сигнала n.

4.6.4. -p[n]

Этот параметр делает wineserver постоянным на n секунд. Это предотвратит мгновенное закрытие wineserver'а.

Обычно wineserver прекращает работу почти мгновенно после окончания последнего процесса Wine, использовавшего данный wineserver. Однако, в силу того, что wineserver загружает множество вещей при старте (например, данные целого реестра Windows), его последующий старт может быть весьма долгим, так что полезно удержать его от закрытия после окончания сессии Wine, сделав его постоянным.

4.6.5. -w

Этот параметр заставит новый wineserver повременить со стартом, дав время текущему закончить работу.

4.7. Настройка переменных окружения Windows/DOS

Ваша программа может нуждаться в правильной установке переменных окружения для своей нормальной работы. В этом случае устанавливать переменную окружения нужно в Linux shell, а уже Wine переведет все переменные окружения в соответствующее пространство Windows. Вот пример для оболочки bash (у других оболочек может быть другой синтаксис!):

export MYENVIRONMENTVAR=myenvironmentvarsetting

Это обеспечит доступ вашей Windows программы к переменной окружения MYENVIRONMENTVAR, когда вы запустите программу при помощи Wine. Если вы хотите установить MYENVIRONMENTVAR на постоянной основе, вы можете поместить настройку в файл /etc/profile, или также, в случае bash, в файл ~/.bashrc.

Имейте однако, в виду, из этого правила есть исключения: Если вы захотите таким способом изменить переменные окружения PATH, SYSTEM или TEMP, вы, ни в коем случае не должны действовать подобным образом, потому что измените настройку переменных окружения Юникс. Вместо этого вам следует установить их в реестр. Чтобы сделать это запустите Wine regedit, и найдите ключ

HKEY_CURRENT_USER/Environment

Теперь вы можете создавать или изменять значения переменных как вам нужно

"System" = "c:\\windows\\system"

Эта запись определит нахождение системных файлов Windows. Системная директория Windows должна располагаться ниже директории, с установками Windows. Если у вас путь (path) к Windows такой: /usr/local/wine_c/windows, то системная директория будет: /usr/local/wine_c/windows/system. Это должно быть прописано без закрывающего слэша, и вы должны иметь право записи в эту директорию.

"Temp" = "c:\\temp"

Это директория, где будут сохраняться ваши временные файлы, /usr/local/wine_c/temp из нашего предыдущего примера. И снова, никаких закрывающих слэшей и право на запись!!

"Path" = "c:\\windows;c:\\windows\\system;c:\\blanco"

Эта запись ведет себя как настройки PATH в Юникс системах. Если запустить пасьянс в Wine следующим образом:

$ wine sol.exe

то он запустится, если файл sol.exe находится в одной из директорий, включенных в Path (конечно, если файл sol.exe находится в рабочей директории, он тоже запустится). Убедитесь, что в Path всегда прописаны ваши Windows и системная директории. Для этого нужно иметь запись "c:\\windows;c:\\windows\\system".

4.8 Программы с текстовым выводом (CUI: консольный интерфейс пользователя)

Программами с текстовым выводом являются программы, вывод которых состоит из одного текста (удивительно!). По терминологии Windows они называются CUI исполняемыми файлами, в отличие от GUI (графический интерфейс пользователя) исполняемых файлов. Win32 API обеспечивает комплект API, чтобы контролировать ситуацию, которая начинается с базовых свойств (типа печати текста), простирается до функций высокого уровня (полноэкранное редактирование, поддержка цвета, движения курсора, поддержка мыши), по пути включая такие свойства, как линейное редактирование и поддержка потоков ввода.

Решая столь широкий диапазон свойств, и их современное применение в мире Юникс, Wine действует тремя различными способами для запуска консольных программ (aka CUI исполняемые файлы):

bare streams - исходные потоки

wineconsole with user backend - с пользовательским выходным буфером

wineconsole with curses backend - с обязательным выходным буфером

Эти имена звучат немного загадочно и непонятно. "bare streams" (исходные потоки) - означает, что Wine не осуществляет никаких дополнительных преобразований, а просто передает ввод с консоли Юникс на консоль Windows. Два других способа подразумевают использование специальной программы Wine (wineconsole), которая обеспечивает дополнительные возможности и средства. Следующая таблица описывает, что вы можете (и чего не можете) делать в этих трех вариантах.

Таблица 2. Основные различия в консолях

Функция Bare streams Wineconsole & user backend Wineconsole & curses backend
Как запускать (подразумеваем, что исполняемый файл называется foo.exe) $ wine foo.exe $ wineconsole -- --backend=user foo.exe $ wineconsole foo.exe Можно использовать в качестве опции: --backend=curses
Хорошая поддержка на строчно ориентированные приложения (которые выдают информацию строка за строкой) Да Да Да
Хорошая поддержка полноэкранных CUI приложений (включая, но не ограничиваясь, использованием цвета и мыши) Нет Да Да
Могут запускаться, даже если не запущена X11 Да Нет Да
Реализация Направляет стандартные Windows потоки на стандартные Юникс потоки (stdin/stdout/stderr) Wineconsole создает новое окно, где выводится вся информация (при условии доступности библиотеки USER32 DLL) Wineconsole использует существующую консоль Юникс (в которой идет программа) и при помощи библиотеки (n)curses получает контроль над всей поверхностью терминала для взаимодействия с пользователем
Известные ограничения     Странно ведет себя, если две (или больше) Windows консоли используются в одном Юникс терминале

4.8.1 Настройка CUI исполняемых файлов

При использовании wineconsole возможны несколько настроек. Wine (как и Windows) имеет в реестре несколько опций для каждого приложения. Это позволяет пользователю, к примеру, установить размер экранного буфера, желательного для данного приложения.

На сегодняшний день, только USER backend позволяет редактировать эти опции (мы не рекомендуем вручную вносить изменения в содержание реестра). Это редактирование начинается при помощи щелчка правой кнопкой мыши в консоли (это вызывает всплывающее меню), в котором вы можете выбрать:

Вот список возможных настроек и их значение:

Таблица 3.Опции настройки Wineconsole

Размер курсора: Определяет размер курсора. Возможны 3 размера: маленький (33% от высоты символа), средний (66% от высоты символа), большой (100%).

Всплывающее меню: Как уже говорилось, это всплывающее меню настройки wineconsole запускается правым щелчком мыши в окне консоли. Однако, это может стать помехой, если приложение, которое вы запустили в wineconsole, использует правый щелчок мыши в своей работе. Нажатием клавиш Ctrl или Shift, вы вводите дополнительный контроль над правым щелчком мыши, открывающим меню. Например, если вы производите правый щелчок мышью без нажатия клавиши Shift, то событие направляется в приложение; а если вы делаете правый щелчок при нажатой клавише Shift, то открывается меню.

Quick edit (быстрый выбор): Это переключатель позволяет вам выбрать, как будет интерпретирован щелчок левой кнопкой мыши. Если вы отключите переключатель, то левый щелчок будет направлен как событие в приложение. Если включите - то с помощью левой кнопки мыши сможете выделять прямоугольную область экрана для последующего копирования в буфер обмена.

История: Позволяет установить количество команд, запоминаемых консолью. Кроме того, позволяет определить порядок сохранения повторяющихся одинаковых команд (возможно, перемежаемых другими). Если хотите сохранить их все, то отключите переключатель, если хотите сохранить только последнюю, то включите переключатель.

Police: Позволяет выбрать шрифт для консоли (файл шрифта, размер, цвета шрифта и фона).

Буфер экрана (Screenbuffer) и размер окна: Консоль, что мы видим, состоит из двух различных частей. С одной стороны, это буфер экрана, который содержит все, что программа выводит на экран. С другой стороны, это окно, которое показывает заданную часть буфера. Заметьте, что окно всегда меньше (или равно) буфера экрана. Если задать размер окна, сильно меньший, чем размер буфера, то появятся полосы прокрутки, которые позволят просматривать содержимое всего экранного буфера.

Close on exit: Если переключатель нажат, то wineconsole закроется, как только приложение завершит работу. В противном случае, консоль останется открытой, пока пользователь не закроет ее вручную, Это позволяет увидеть информацию, выводимую после завершения программы.

Edition mode (стиль редактирования): При вводе команд пользователь может выбрать два стиля:

  • Стиль Emacs: работают те же сочетания клавиш, что и в Emacs. Например, Ctrl-A вернет курсор на начало строки. Для изучения деталей смотрите руководство Emacs.
  • Стиль Win32: это стандартные для Windows сочетания клавиш (в основном при помощи стрелок).

Предыдущая Оглавление Следующая