Для примера: вы хотите, чтобы Wine использовал "родные" ole32.dll, oleaut32.dll и rpcrt4. Тогда запускайте Wine такой командой:
В разделе замена DLL #WINECFG-DLL-OVERRIDES вы найдете дополнительную информацию по этому вопросу.
$ AUDIODEV=/dev/dsp4 MIXERDEV=/dev/mixer1 MIDIDEV=/dev/midi3 wine program_name
, при котором 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 загружает множество вещей при старте (например, данные целого регистра Виндоуз), его последующий старт может быть весьма долгим, так что полезно удержать его от закрытия после окончания сессии Wine, сделав его постоянным.
4.6.5. -w
Этот параметр заставит новый wineserver повременить со стартом, дав время текущему закончить работу.
4.7. Настройка переменных окружения Windows/DOS
Ваша программа может нуждаться в правильной установки переменной окружения для своей нормальной работы. В этом случае, устанавливать переменную окружения нужно в Linux shell, а уже Wine переведет все переменные окружения в соответствующее пространство Виндоуз. Вот пример для оболочки bash (у других оболочек может быть другой синтаксис!):
export MYENVIRONMENTVAR=myenvironmentvarsetting
Это обеспечит доступ вашей Виндоуз программы к переменной окружения MYENVIRONMENTVAR, когда вы запустите программу при помощи Wine. Если вы хотите установить MYENVIRONMENTVAR на постоянной основе, вы можете поместить настройку в файл /etc/profile, или также, в случае bash, в файл ~/.bashrc.
Имейте однако, в виду, из этого правила есть исключения: Если вы захотите таким способом изменить переменные окружения PATH, SYSTEM или TEMP, вы, ни в коем случае не должны действовать подобным образом, потому что измените настройку переменных окружения Юникс. Вместо этого вам следует установить их в регистр. Чтобы сделать это запустите Wine regedit, и найдите ключ
HKEY_CURRENT_USER/Environment
Теперь вы можете создавать или изменять значения переменных как вам нужно
"System" = "c:\\windows\\system"
Эта запись определит нахождение системных файлов Виндоуз. Системная директория Виндоуз должна располагаться ниже директории, с установками Виндоуз. Если у вас путь (path) к Виндоуз такой: /usr/local/wine_c/windows, то системная директория будет: /usr/local/wine_c/windows/system. Это должно быть прописано без закрывающего слэша, и вы должны иметь право записи в эту директорию.
"Temp" = "c:\\temp"
Это директория, где будут сохраняться ваши 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 всегда прописаны ваши Виндоуз и системная директории. Для этого нужно иметь запись "c:\\windows;c:\\windows\\system".
4.8 Программы с текстовым выводом (CUI: консольный интерфейс пользователя)
Программами с текстовым выводом являются программы, вывод которых состоит из одного текста (удивительно!). По терминологии Виндоуз они называются CUI исполняемыми файлами, в отличие от GUI (графический интерфейс пользователя) исполняемых файлов. Win32 API обеспечивает комплект API, чтобы контролировать ситуацию, которая начинается с базовых свойств (типа печати текста), простирается до функций высокого уровня (полноэкранное редактирование, поддержка цвета, движения курсора, поддержка мыши), по пути включая такие свойства, как линейное редактирование и поддержка поточного сырого ввода.
Решая столь широкий диапазон свойств, и их современное применение в мире Юникс, Wine действует тремя различными способами для запуска консольных программ (aka CUI исполняемые файлы):
bare streams (голые потоки)
wineconsole with user backend - с пользовательским выходом (прикладной частью)
wineconsole with curses backend - с обязательным выходом (прикладной частью)
Эти имена звучат немного загадочно и непонятно. "bare streams"(голые потоки) - означает, что между обращением консоли Юникс, и обращением консоли Виндоуз не осуществляется никакой дополнительной поддержки от Wine. Два остальные способа подразумевают использование специальной программы 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 приложений (включая, но не ограничиваясь, использованием цвета и мыши)
|
Нет
|
Да
|
Да
|
Могут запускаться, даже если не работают Иксы
|
Да
|
Нет
|
Да
|
Реализация
|
Направляет стандартные Виндоуз потоки на стандартные Юникс потоки (stdin/stdout/stderr)
|
Wineconsole создает новое окно, где выводится вся информация (при условии доступности библиотеки USER32 DLL)
|
Wineconsole использует существующую консоль Юникс (в которой идет программа) и при помощи библиотеки (n)curses получает контроль над всей поверхностью терминала для взаимодействия с пользователем
|
Известные ограничения |
|
|
Странно ведет себя, если две (или больше) Виндоуз консоли используются в одном Юникс терминале |
4.8.1 Настройка CUI исполняемых файлов
При использовании wineconsole возможны несколько настроек. Wine (как и Виндоуз) имеет в регистре несколько опций для каждого приложения. Это позволяет пользователю, к примеру, установить размер экранного буфера, желательного для данного приложения.
На сегодняшний день, только USER backend позволяет редактировать эти опции (мы не рекомендуем вручную вносить изменения в содержание регистра). Это редактирование начинается при помощи щелчка правой кнопкой мыши в консоли (это вызывает всплывающее меню), в котором вы можете выбрать:
Default (По умолчанию): это установит настройки, общие для всех приложений, которые еще не были сконфигурированы. Итак, когда приложение впервые запускается (на вашей машине и под вашим аккаунтом) в wineconsole, wineconsole унаследует эти настройки по умолчанию для этого приложения. Впоследствии приложение будет иметь собственные настройки, которые вы уже сможете изменять по своему усмотрению.
Properties (Свойства): редактирует настойки приложения. Когда вы закончите редактировать, у вас спросят, хотите ли вы:
1. Сохранить новые настройки только на время данного сеанса (когда вы в следующий раз запустите это приложение, вы не увидите своих изменений).
2. Использовать новые настройки в данном сеансе и сохранить их на будущее, так что в следующий раз вы снова сможете ими воспользоваться.
Вот список возможных настроек и их значение:
Таблица 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: это стандартные для Виндоуз сочетания клавиш (в основном при помощи стрелок).
Глава V. Наладка и сообщение о найденных ошибках
5.1. Что делать, если программа не работает?
Бывают случаи, когда вы перепробовали все, чтобы заставить эту проклятую программу заработать на данной версии Wine. Не расстраивайтесь, мы всегда здесь, чтобы помочь вам... (другими словами: "Сколько заплатите?)
5.1.1. Проверьте конфигурацию своей Wine
Посмотрите вывод команды $ wine --version, чтобы убедиться, что у вас новейшая версия Wine. Запустите winecfg и посмотрите на установки, чтобы убедиться, что они выглядят нормально. Проверьте ~/.wine/dosdevices, чтобы убедиться что c: указывает куда нужно.
5.1.2. Попробуйте разные версии Виндоуз
В некоторых случаях изменение версии Виндоуз может помочь.
5.1.3. Используйте различные пути (paths) для запуска
Это тоже иногда помогает. Попробуйте как wine prg.exe, так и wine x:\\full\\path\\to\\prg.exe
5.1.4. Поэкспериментируйте с настройкой DLL
Запустите WINEDEBUG=+loaddll, чтобы выяснить, какие DLL используются, и являются ли они "родными" или встроенными. Затем убедитесь, что у вас установлены правильные "родные" файлы библиотек в вашей директории C:\windows\system и поэкспериментируйте настройками очередности загрузки DLL в командной строке, либо в файле конфигурации.
5.1.5. Проверьте рабочее окружение!
Еще идея: не может ли рабочее окружение Wine быть испорченным? Убедитесь, что все в порядке с пакетами, от которых зависит работа Wine (gcc, glibc, X libraries, OpenGL (!), ...).
5.1.6. Используйте другой режим графического интерфейса
Проинструктируйте Wine посредством конфигурационного файла использовать либо desktop mode (режим рабочего стола), либо managed mode (управляемый режим), либо уродливый "нормальный" (normal) режим. Это тоже может помочь.
5.1.7. Проверьте приложение!
Может быть, ваше приложение имеет защиту от копирования? Многие виды таких защит пока не работают под Wine. Некоторые, возможно, заработают в будущем. (Уровень CD-ROM до сих пор не полнофункционален).
Идите на сайт GameCopyWorld и попытайтесь найти хороший крэк, который позволит снять защиту от копирования. Я надеюсь, что у вас легальная копия программы, но кто знает... :-)
5.1.8. Измените окружение Wine
Запуск приложения при наличии Виндоуз раздела может драматически отличаться от такового при отсутствии Виндоуз раздела. Настройте Wine на действия, противоположные тому, что были обычно. Также установите DCOM98 или DCOM95. Это может быть очень полезно.
5.1.9. Переконфигурируйте Wine
Иногда процесс инсталляции Wine изменяется, и новые версии Wine считаются с этими изменениями. Это особенно вероятно, если ваша установка произведена давно. Переименуйте директорию ~/.wine с целью резервного копирования. Запустите процесс установки, рекомендованный для вашей версии Wine, чтобы создать новую конфигурацию. Для сравнения используйте старую директорию ~/.wine. Для установок Wine из исходников применяйте для конфигурации Wine скрипт tools/wineinstall от имени пользователя. Это вполне безопасная операция. Позже вы сможете удалить новую директорию ~/.wine, и переименовать обратно старую.
5.1.10. Следите за сторонней информацией
Весьма возможно, что кто-то уже делал то, что вы пытаетесь проделать сейчас. Вам могут помочь следующие ресурсы:
Просмотрите WineHQ's Application Database в поисках подсказок, относящихся к вашей программе. Если ваша конкретная версия программы отсутствует в списке, просмотрите сходные версии, возможно там достаточно информации.
Frank's Corner имеет список приложений с детальными инструкциями по их установке. Дальнейшая помощь может найтись на форумах пользователей.
Может помочь Google, если уметь им пользоваться. Полезно бывает искать в Google Groups, конкретно в группе comp.emulators.ms-windows.wine
Существует IRC канал для Wine - Freenode.net. Вы можете попасть туда, используя любой IRC клиент, например Xchat. Вот необходимые настройки:
server = irc.freenode.net, port = 6667
и channel = #winehq
Если ваша программа требует Visual Basic Runtime Environment, то вы можете загрузить его с этого сайта Микрософт.
Если вам недостает DLL, например mfc42, можете найти их на сайте www.dll-files.com
Рассылочный лист Wine также может помочь, особенно wine-users. Лист wine-devel может быть полезен в зависимости от типа ваших затруднений.
если вы пишете в wine-devel, то готовьтесь проделать некоторую работу по диагностике проблемы. Читайте следующий раздел, чтобы узнать, как определить источник ваших трудностей.
Если все усилия напрасны, стоит просмотреть коммерческие версии Wine на предмет поддержки вашего приложения.
5.1.11. Ищите причину!
Следующим шагом, который стоит предпринять, является поиск причины проблемы. Спектр возможных причин весьма широк - от простой ошибки в конфигурации до полной неработоспособности Wine. Следующий раздел описывает, как создать файл с отчетом об ошибке, и как начать искать неисправность. Отладочные возможности Wine описываются в Wine Developers Guide (руководство для разработчиков).
5.2. Как послать отчет об ошибке.
Пожалуйста, сообщайте об ошибках и сопутствующую информацию на сайт Wine Bugzilla. http://bugs.winehq.org/ Пожалуйста, просматривайте базу данных Bugzilla, чтобы выяснить, не было ли уже отчетов по данной проблеме. Если таковые уже были, пожалуйста, добавляйте вашу информацию к первоначальному отчету.
5.2.1 Отчеты об ошибках
Вот несколько простых советов, как сделать ваш отчет более содержательным, и тем повысить вероятность ответа и исправления ошибки:
1. Включите как можно больше информации, относящейся к делу.
Это означает, что нам нужно больше информации, чем просто: "Мой MS Word "падает", когда бы я его не запускал. Вы не знаете, почему?". Добавьте, как минимум, следующую информацию:
- Какую версию Wine вы используете (команда: wine --version)
- Название вашей операционной системы, дистрибутив и его версию (например, Linux Red Hat 7.2)
- Какой компилятор был использован, его версию (команда: gcc -v). Если вы не компилировали Wine, название пакета, и место, откуда его взяли.
- Версия Виндоуз, если таковая используется с Wine. Если Виндоуз не используется, то упомяните об этом.
- Название и номер версии программы, которую вы пытаетесь запустить, а также URL, где программа скачана (если таковой есть).
- Точная команда, которой вы запускаете программу Wine.
Например: wine "C:\Program Files\Test\program.exe"
- Конкретные шаги, при помощи которых можно повторить ошибку.
- Любая дополнительная информация, могущая, по вашему мнению, относиться к делу, такая как версия Иксов (в случае проблем с Иксами), версия libc и прочее.
2. Прогоните программу с переменной окружения WINEDEBUG. Например, WINEDEBUG=+relay wine sol.exe
Это приведет к выводу на консоль дополнительной информации, которая может быть полезна при отладке программы. Также это замедлит воспроизводство программы. Бывают случаи, когда ошибка, по-видимому, исчезала при использовании опции +relay. Укажете это в вашем отчете.
5.2.2. Аварийное завершение программы
Если Wine аварийно отказывает во время выполнения вашей программы, нам важно иметь информацию об этом, чтобы попытаться понять причину отказа. Отчет может занимать много места (несколько Мб), но все же лучше сохранить его в файле. Когда появится приглашение Wine-dbg>, напечатайте quit.
Вы можете попробовать +relay,+snoop вместо +relay, но, пожалуйста, помните, что +snoop довольно нестабилен и часто вызывает отказ раньше, чем просто +relay!! Отчет с отказом в коде +snoop в большинстве случаев бесполезен! Можно также подключать другие параметры, в зависимости от природы проблемы, которую вы исследуете. Для получения полного списка параметров смотрите Wine man page (ман).
Для того чтобы вывести запись с историей событий (трассировочный лог), используйте один из следующих методов:
5.2.2.1 Простой путь
1. Этот метод позволяет даже полному новичку получить качественный трассировочный лог событий, приведших к аварийному завершению программы.
Чтобы воспользоваться этим методом, на вашем компьютере должен быть установлен язык программирования perl. Чтобы узнать, есть ли он у вас, наберите команду: which perl. Если ответ нечто вроде: /usr/bin/perl, то вы можете работать. В противном случае переходите к разделу "Трудный путь". Если вы не уверены, все-таки проделайте работу. Когда вы попытаетесь запустить скрипт, то станет весьма очевидно, если у вас не установлен perl.
2. Смените директорию на /путь-к-wine>/tools.
3. Наберите: ./bug_report.pl и следуйте указаниям.
4. Пошлите отчет на сайт Wine Bugzilla. Пожалуйста, просмотрите базу данных сайта, чтобы убедиться, что ваша проблема еще не зафиксирована, прежде чем отправлять отчет. Составьте детальное описание проблемы с сопутствующей информацией. Прикрепите "Прекрасно оформленный трассировочный лог" к письму. Не вставляйте лог в текст отчета - он слишком велик. Сохраняйте полную копию трассировочного лога, на случай, если он понадобится разработчикам Wine.
5.2.2.2. Трудный путь
Чаще всего, только последние 100, или около того, строчек трассировочного лога нужны, чтобы выяснить, где программа аварийно завершилась. Для того чтобы получить эти последние 100 строк, мы должны проделать следующее:
1. Перенаправить весь вывод программы WINEDEBUG в файл.
2. Отделить последние 100 строк в другой файл при помощи команды: tail.
Это можно проделать одним из следующих способов.
Для всех шеллов (оболочек):
$ echo quit | WINEDEBUG=+relay wine [other_options] program_name >& filename.out;
$ tail -n 100 filename.out > report_file
(Эта команда запишет сообщение только в файл и затем автоматически завершится. Эту команду хорошо использовать, так как Wine выдает столько отладочных сообщений, что они переполняют терминал, пожирая процессорные циклы).
tcsh и другие csh-подобные шеллы:
$ WINEDEBUG=+relay wine [other_options] program_name |& tee filename.out;
$ tail -n 100 filename.out > report_file
bash и другие sh-подобные шеллы:
$ WINEDEBUG=+relay wine [other_options] program_name 2>&1 | tee filename.out;
$ tail -n 100 filename.out > report_file
Файл report_file теперь содержит последние сто строк вывода отладчика включая register dump и backtrace, которые являются самыми ценными массивами информации. Пожалуйста, не удаляйте эту часть, даже если не понимаете, что она означает.
Пошлите отчет на Wine Bugzilla. Необходимо прикрепить файл report_file. Вместе с относящейся к делу информацией, о том, как вы его создали. Не вставляйте текст файла в текст самого отчета об ошибки - он довольно велик и спутает отчет. Если вы правильно проделаете всю эту процедуру, ваши шансы на получение ответа с помощью довольно велики.
Пожалуйста, просматривайте базу данных Bugzilla, чтобы выяснить, не было ли уже отчетов по данной проблеме. Если таковые уже были, пожалуйста, добавляйте ваш файл report_file и другую информацию к первоначальному отчету.
Словарь
Бинарный, или двоичный файл (Binary)
Файл, пригодный к обработке машиной, форма компиляции: шестнадцатеричная (в противоположность файлу исходного кода).
Дистрибутив
Форма, в которой обычно распространяются операционные системы на CD (обычно имеется в виду Линукс). Среда Линукс может быть представлена во множестве конфигураций: дистрибутивы могут быть предназначены для игр, научных приложений, серверных операций, настольных систем, и т.д.
DLL
DLL (Dynamic Link Library), это файл, который может быть загружен и выполнен программой по ходу основной программы. В основном, DLL является внешнем хранилищем кода для программ. Обычно несколько различных программ используют один и тот же DLL, вместо того, чтобы иметь этот код в своем составе, что сильно уменьшает размер программ. Синонимом DLL является "библиотека".
Текстовый редактор
Программа для создания или изменения текстовых файлов. В Линукс множество различных текстовых редакторов, как для графического, так и для консольного режима.
Примеры графических текстовых редакторов: nedit, gedit, kedit, xemacs, gxedit.
Примеры консольных текстовых редакторов: joe, ae, emacs, vim, vi. Запускайте их в терминале командой:
$ editorname filename
Переменная окружающей среды (Environment variable)
Переменная окружающей среды - это текстовое определение, применяемое шеллом (оболочкой) для сохранения важных системных установок. В оболочке bash shell (обычно используемой в Линукс), вы можете просмотреть все переменные окружения, запустив команду:
$ set
Если вы хотите изменить переменную, то запустите команду:
$ export MYVARIABLE=mycontent
Для удаления переменной окружения:
$ unset MYVARIABLE
Git
Git - это быстрый менеджер содержания директорий, написанный первоначально для использования в больших репозиториях, таких как Linux Kernel source (исходники ядра Линукс). Смотрите главу Git в Wine Developers Guide (руководстве разработчика Wine) Для получения более детальной информации.
Пакет (Package)
Сжатый файл в формате, определенном для данного дистрибутива. Содержит файлы программы, которую вы хотите установить. Пакеты обычно устанавливаются командами пакетных менеджеров: dpkg или rpm.
root (рут, суперпользователь)
root - это аккаунт системного администратора. Чтобы запускать программы от имени root'а, примените команду:
$ su
Вас спросят пароль суперпользователя вашей системы, и после этого вы сможете выполнять роль системного администратора. Аккаунт root обозначается значком приглашения:
#
В то время как аккаунт простого пользователя - значком
$
Shell (оболочка, шелл)
Инструмент, позволяющий пользователю общаться с системой. Обычно шеллы текстовые и ориентированы на командную строку. Примерами популярных шеллов являются: bash, tcsh и ksh. Wine подразумевает для своей установки и работы bash, как наиболее популярный шелл в Линукс. Шелл обычно запускается в окне терминала.
Исходные коды (исходники, Source code)
До того, как программа подвергнется компиляции, она состоит из исходного кода. То есть это первоначально написанные инструкции, сообщающие компилятору, как должна выглядеть программа после компиляции в бинарные файлы.
Терминал
Окно терминала - это обычно графическое окно, в котором запускают шелл. Если Wine просит вас открыть терминал, вы просто кликаете мышью на значке терминала на рабочем столе, и появляется большое черное (или белое) окно. Wine подразумевает, что вы используете оболочку bash в окне терминала. Если это не так, просто напечатайте
$ bash
в приглашении окна терминала.