59, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta


Rozdział 59.
Projekt Wine


Robert Pfister

W tym rozdziale:

Wine to skrót od słów Windows Emulator. Program ten pozwala na uruchamianie aplikacji przeznaczonych dla MS-Windows w środowisku X Window działającym w systemach UNIX-owych. Podobnie jak DOSemu, przy uruchamianiu programów dla Windows Wine wykorzystuje bezpośrednio możliwości oferowane przez architekturę procesorów 386 firmy Intel. Program Wine po prostu tłumaczy wszystkie wywołania funkcji MS-Windows na odpowiadające im wywołania funkcji systemowych UNIX-a i X Window. Podobnie jak w systemie OS/2, programy dla systemu Windows uruchamiane w środowisku Wine mogą korzystać z możliwości oferowanych przez system operacyjny. Wine jest po prostu jednym z wielu procesów użytkownika w systemie linuxowym, więc również jest zabezpieczony przed uszkodzeniem przez inne procesy. W systemie OS/2 ta właściwość nazywana jest po angielsku crash-protection, czyli zabezpieczenie przed załamaniem. Ponieważ wielozadaniowość jest podstawą systemu Linux, procesy Wine mogą współistnieć z innymi procesami, nie stwarzając problemów spotykanych przy pracy z systemem MS-Windows.

Obecny stan projektu Wine

Podobnie jak większość programów linuxowych, Wine jest tworzony przez grupę ochotników. Program Wine jest obecnie w fazie wczesnych testów. Tylko niektóre prostsze aplikacje MS Windows działają bez żadnych problemów. Mój ulubiony zestaw gier dla Windows, Pipe Dream firmy Lucas Arts, działa zupełnie zadawalająco pod kontrolą Wine.

Choć da się grać w Pipe Dream i inne proste gry, nie wszystko działa doskonale. Można zauważyć pewien spadek prędkości, zdarzają się również problemy z odświeżaniem ekranu.

Firma Sun Soft opracowała produkt dość podobny do Wine, o nazwie WABI, przeznaczony dla UNIX-owych stacji roboczych. WABI jest na rynku od 1994 roku i obsługuje nawet tak złożone aplikacje jak Microsoft Excel czy Lotus Smart Suite dla systemu Windows 3.11. Program WABI nie obsługuje jednak aplikacji systemu Windows 95. Można się spodziewać, że za jakiś czas program Wine będzie również dobrze sobie radził z aplikacjami Windows ogólnego przeznaczenia.

Konfiguracja Wine

Program Wine jest rozprowadzany tylko w postaci kodu źródłowego. Jeśli posiadasz odpowiednie oprogramowanie i nieco cierpliwości, konfigurowanie Wine nie powinno sprawić Ci większych kłopotów - nawet jeśli nie jesteś programistą.

Wymagania systemowe

Aplikacje Wine będą działać z rozsądną prędkością w każdym systemie linuxowym, w którym działa system X Window. Teoretycznie Wine powinien posiadać pewną przewagę nad systemem Windows, który jest zależny od środowiska MS-DOS. Mimo wszystko dane doświadczalne wskazują, że pod kontrolą obecnej wersji Wine aplikacje działają wolniej niż w środowisku Windows.

Aby wykorzystywać program Wine, trzeba posiadać zainstalowaną na partycji dostępnej dla Linuxa wersję systemu MS-Windows 3.1. Wygodnie jest również uruchamiać dostępne aplikacje MS-Windows z tych samych katalogów, w których są one zainstalowane w ich rodzimym środowisku DOS i Windows. Typowy użytkownik Linuxa posiada również zainstalowany system DOS i Windows, więc konfiguracja sprowadza się tylko do udostępnienia odpowiednich katalogów dla systemu Linux. Wersje jądra do 1.1.83 nie obsługują skompresowanych za pomocą programów stacker czy drvspace systemów plików MS-DOS.

0x01 graphic

Niektóre programy instalacyjne systemu Linux pozwalają na zainstalowanie partycji DOS-owej w jednym z podkatalogów systemu plików. Jeśli nie skonfigurowałeś partycji w ten sposób, powinieneś dodać do pliku /etc/fstab następujący wiersz:

/dev/hda1 /c MSDOS defaults

hda1 to nazwa partycji, która zawiera system MS-DOS, natomiast /c to podkatalog, w którym dostępny będzie tenże system. W tym przykładzie założyliśmy, że katalog /c został wcześniej utworzony - jeśli nie, należy to zrobić za pomocą polecenia mkdir.

Program Wine jest rozprowadzany w postaci kodu źródłowego, który przed użyciem musi zostać skompilowany. Potrzeba do tego około 10 MB wolnego miejsca na dysku. Sam kod źródłowy zajmuje ok. 3.5 MB. Aby skompilować Wine, będziesz potrzebował:

Skąd można załadować Wine

Nowe wersje systemu Wine opracowywane są średnio raz w tygodniu. Główne węzły FTP oferujące oprogramowanie linuxowe zwykle udostępniają najnowszą wersję Wine. Dla przykładu, w węźle sunsite.unc.edu programu Wine należy szukać w katalogu /pub/Linux/ALPHA/Wine. Kolejne wersje tego programu opatrzone są numerami opartymi na dacie ich powstania - na przykład wersja Wine-950727 pochodzi z 27 lipca 1995 roku. Nowsze wersje mają oczywiście bardziej aktualne daty. Więcej informacji można znaleźć na stronie WWW pod adresem

http://daedalus.dra.hmg.gb/gale/wine/wine.html.

Jak zainstalować Wine

W przeciwieństwie do programu DOSemu, program Wine nie musi być instalowany w żadnym konkretnym katalogu. Dla wygody warto utworzyć dowiązanie symboliczne o nazwie np. /usr/wine do katalogu, w którym Wine jest faktycznie zainstalowany (dajmy na to /usr/src/Wine950122), wydając polecenie ln w następujący sposób:

ln -s /usr/src/Wine950122 /usr/wine

Kod źródłowy programu Wine rozprowadzany jest w postaci spakowanego archiwum programu tar. Aby je rozpakować, należy wydać polecenie o następującej formie:

tar -zxvf nazwapliku.tar.gz

Jak skonfigurować Wine przed kompilacją

Kod źródłowy programu Wine przed kompilacją wymaga skonfigurowania. Skrypt o nazwie Configure pozwala zautomatyzować ten proces, pobierając od użytkownika potrzebne informacje i na ich podstawie tworząc właściwe pliki konfiguracyjne. Konfiguracja Wine składa się z trzech zasadniczych etapów:

  1. konfiguracja procesu kompilacji,

  2. podanie parametrów czasu wykonania,

  3. automatyczna konfiguracja dostosowująca Wine do konkretnego systemu.

Skrypt konfiguracyjny zadaje następujące pytania:

Build Wine as emulator or library (E/L) [E]?
Short filenames (Y/N) [N]?
Use the XPM library (Y/N) [N]?
Language [En/De/No] ?
Global configfile name /usr/local/etc/wine.conf

(czy skompilować Wine jako bibliotekę, czy emulator, czy używać krótkich nazw plików, czy wykorzystać bibliotekę XPM, jakiego użyć języka i jaką nazwę ma mieć globalny plik konfiguracyjny?). Bezpiecznie jest zaakceptować sugerowane wartości domyślne wciskając Enter w odpowiedzi na każde z pytań. Podane parametry są zapisywane do globalnego pliku konfiguracyjnego o nazwie autoconf.h. Jeśli konieczna okaże się ich modyfikacja, należy ponownie uruchomić skrypt Configure, dzięki czemu można uniknąć błędów mogących powstać podczas ręcznej edycji pliku autoconf.h.

Wstępna konfiguracja parametrów czasu wykonania za pomocą skryptu Configure

Pytania zadawane w tej części procesu konfiguracyjnego odnoszą się do odpowiednich wpisów w globalnym pliku konfiguracyjnym /usr/local/etc/wine.conf. Poszczególne pytania są dość oczywiste:

Which directory do you want to use as A:
(który katalog ma być traktowany jako napęd A:)
Which directory do you want to use as C:
(który katalog ma być traktowany jako napęd C:)

W odpowiedzi na nie należy podać nazwy katalogów, w których są zamontowane DOS-owe dyski A: i C:. Jeśli na przykład partycja zawierająca system MS-Windows zamontowana jest w katalogu /c, właśnie ten katalog należy wskazać w odpowiedzi na drugie pytanie. Jeśli nie planujesz używać stacji dyskietek, nie musisz przejmować się faktem, że napęd A: nie będzie prowadził do prawidłowego katalogu.

Następne pytania dotyczą ścieżek dostępu do katalogów systemowych - katalogu Windows, katalogu System, katalogu, w którym mają być przechowywane pliki tymczasowe i ścieżek przeszukiwania dla programów i bibliotek DLL.

Where is the Windows directory 'c:\windows'
Where is the System directory 'c:\windows\system'
Where should Windows apps store temp files 'c:\windows\temp'
Which path should be used to find progs/DLL's 'c:\windows;c:\windows\system'

Podane tu ścieżki dostępu powinny odpowiadać ścieżkom używanym w systemie MS-Windows. Ponieważ domyślnie system ten instalowany jest w katalogu c:\windows, podpowiadane odpowiedzi będą w większości przypadków odpowiednie.

Następne pytanie dotyczy ścieżki dostępu do pliku sysres.dll, zawierającego zasoby systemu Wine, takie jak obrazki czy okienka dialogowe wyświetlane podczas pracy Wine.

Where is sysres.dll '/usr/wine/sysres.dll'

Również tu w większości przypadków nie są potrzebne żadne modyfikacje.

Podobnie jak w programie DOSemu, w Wine porty szeregowe i równoległe mogą zostać powiązane z dowolnymi zainstalowanymi w systemie Linux portami podobnego typu. Najprościej jest powiązać porty COM i LPT w taki sam sposób, jak są one skonfigurowane w systemie DOS:

Where is COM1" CF_Com1 '/dev/cua0'
Where is COM2" CF_Com2 '/dev/cua1'
Where is LPT1" CF_Lpt1 '/dev/lp0'

Następne pytanie dotyczy nazwy pliku, w którym rejestrowane będą komunikaty generowane podczas pracy Wine. Wybranie pliku o nazwie CON spowoduje przesyłanie ich do standardowego urządzenia wyjściowego, czyli najczęściej konsoli - takie rozwiązanie umożliwia przekierowanie ich do dowolnego pliku podczas uruchamiania Wine.

Log messages to which file (CON = stdout) 'CON'

Domyślnie Wine generuje mnóstwo komunikatów, które mogą nieco zwalniać jego działanie. Jeśli chcesz tego uniknąć, możesz skierować je do urządzenia /dev/null, podając jego nazwę zamiast nazwy pliku.

Następnie wyświetlana jest długa lista typów komunikatów i pytanie:

Exclude which messages from the log 'WM_SIZE;WM_TIMER'

Jeśli nie zależy Ci na informacjach o stanie systemu Wine, możesz pozostawić wartość domyślną. Poszczególne klasy komunikatów o błędach mogą być osobno włączane i wyłączane, mogą również być przekierowywane z wiersza poleceń.

Na koniec skrypt Configure wyświetla zawartość globalnego pliku konfiguracyjnego utworzonego na podstawie dostarczonych informacji i daje możliwość edytowania go za pomocą domyślnego edytora tekstów:

Do you want to edit it using vi (Y/N) [N]?

Można oczywiście później edytować utworzony plik dowolnym edytorem tekstów, dlatego w tym miejscu można zrezygnować z tej możliwości.

Automatyczna konfiguracja

Po utworzeniu pliku wine.conf skrypt Configure rozpoczyna modyfikowanie kodu źródłowego za pomocą programu xmkmf. Jest to program, który służy do generowania plików makefile dla X Window - tworzy on plik Makefile na podstawie informacji zapisanych w pliku Imakefile, biorąc pod uwagę szczegóły konfiguracji konkretnego systemu X Window.

Tworzenie pliku wykonywalnego

Aby utworzyć plik wykonywalny programu Wine, wystarczy wydać polecenie

make

Najtrudniejsza część konfiguracji Wine jest już za tobą. Mimo tego to właśnie kompilacja zabiera najwięcej czasu - w systemie opartym na procesorze Pentium z zegarem 90 MHz trwa ona około ośmiu minut. Aby program mógł zostać poprawnie skonsolidowany, potrzebne będą biblioteki -lXext, więc zainstaluj je najpierw z dysku CD-ROM.

Używanie programu Wine

Używanie Wine sprowadza się do wydania polecenia

wine nazwa_programu

Można również konfigurować ten program za pomocą rozlicznych opcji podawanych w wierszu poleceń, pozwalających na przykład na uruchomienie debugera umożliwiającego wyszukiwanie usterek tkwiących w tym programie.

Parametry konfiguracyjne

Globalny plik konfiguracyjny programu Wine o nazwie wine.conf można zwykle znaleźć w katalogu /usr/local/etc. Zapisane w nim parametry są w większości oparte na informacjach podanych podczas wcześniejszej konfiguracji i są zorganizowane w sposób przypominający format plików .ini używanych w systemie Windows. Poniżej przedstawiamy przykładową zawartość tego pliku, wraz z krótkimi komentarzami.

Poniższe wpisy określają, do których katalogów systemu Linux prowadzić będą DOS-owe litery dysków:

[drives]
A=/a
C=/c

Następne parametry określają położenie plików systemu Windows i Wine:

[wine]
Windows=:\windows
System=c:\windows\system
Temp=c:\temp
Path=c:\windows;c:\windows\system
SystemResources=/users/wine/wine950122/sysres.dll

Kolejna sekcja dotyczy odwzorowania czcionek MS-Windows i czcionek systemu X (gwiazdka jest używana jako symbol wieloznaczny w nazwach czcionek systemu X).

[fonts]
system=*-helvetica
mssansserif=*-helvetica
msserif=*-times
fixedsys=*-fixed
arial=*-helvetica
helv=*-helvetica
roman=*-times
default=*-*

Fragmenty przedstawione poniżej definiują odwzorowania odpowiednich portów szeregowych i równoległych systemu Linux na ich DOS-owe odpowiedniki.

[serialports]
Com1=/dev/cua0
Com2=/dev/cua1

[parallelports]
Lpt1=/dev/lp0

Poniższe parametry określają klasy rejestrowanych komunikatów diagnostycznych i miejsce, w którym mają one być zapisywane.

[spy]
File=CON
Exclude=WM_SIZE;WM_TIMER

Opcje dostępne z wiersza poleceń

Wiersz poleceń przy uruchamianiu programu Wine ma następujący format:

wine opcje_wine program opcje_programu

na przykład:

bash# /usr/wine/wine -debugmsg +all /c/windows/winmine.exe

Dostępne opcje zostały zebrane w tabeli 59.1.

Tabela 59.1. Opcje programu Wine dostępne z wiersza poleceń

Opcja

Znaczenie

-depth n

Pozwala zmienić głębię koloru, dzięki czemu Wine może używać innej niż domyślna liczby kolorów. Osiem planów bitowych daje 256 kolorów, co wystarcza do większości zastosowań.

-desktop geom

Uruchamia aplikację MS-Windows na pulpicie o podanym rozmiarze, na przykład podanie liczb 850x620 spowodowałoby otwarcie okna o rozmiarach 850 na 620 punktów. Uruchomienie pulpitu powoduje również wyeliminowanie modalnego zachowania się okienek programów systemu Windows.

-display nazwa

Pozwala wyświetlić okno na innym niż domyślny widoku, dzięki czemu można uruchamiać aplikacje MS-Windows na innym terminalu X podłączonym do sieci.

-iconic

Uruchamia aplikację zminimalizowaną do postaci ikony. Opcja ta ma taką samą funkcję, jak opcja „Uruchom zminimalizowane” Menedżera Programów systemu MS-Windows.

-debug

Załącza debuger przed uruchomieniem właściwej aplikacji.

-name nazwa

Ustala nazwę aplikacji. Dzięki temu rozwiązaniu można określić inną niż domyślną (wine) nazwę aplikacji widzianą w systemie X Window.

-privatemap

Powoduje użycie prywatnej palety kolorów. Ta opcja ma zastosowanie szczególnie w przypadku aplikacji wykorzystujących dużą liczbę kolorów. Jej użycie może spowodować nieprawidłowe wyświetlanie kolorów w innych oknach w czasie, gdy okno programu Wine jest aktywne.

-synchronous

Załącza tryb wyświetlania synchronicznego. Ta opcja może poważnie zwolnić działanie aplikacji, ponieważ powoduje, że system X Window będzie przed wysłaniem każdego polecenia czekał na zakończenie wykonywania poprzedniego. Aplikacje systemu X mogą przesyłać polecenia do serwera, który może - ale nie musi - działać w tym samym systemie. W niektórych sytuacjach załączenie synchronizacji okazuje się niezbędne, aby zapobiec optymalizacji operacji graficznych przez serwer X.

-backingstore

Jest to opcja optymalizacyjna, umożliwiająca serwerowi X obsługę zdarzeń expose bez przerywania działania programu klienta.

-spy plik

Załącza rejestrowanie informacji diagnostycznych do pliku o podanej nazwie. Podobny efekt można uzyskać używając mechanizmów przekierowania danych wyjściowych.

-debugmsg nazwa

Załącza lub wyłącza informacje diagnostyczne poszczególnych typów. Aby otrzymać listę obsługiwanych klas informacji diagnostycznych, wydaj polecenie: wine -debugmsg help help

Debuger programu Wine

Program Wine jest wyposażony w wewnętrzny debuger, umożliwiający wyszukiwanie przyczyn problemów wynikających z tkwiących w nim usterek. Jeśli program systemu MS-Windows zakończy działanie ze względu na błąd, w oknie terminalu, z którego uruchomiony został program Wine, uruchamiany jest debuger. Jeśli nie jesteś zainteresowany wyszukiwaniem przyczyny problemu, możesz zakończyć jego działanie wydając polecenie quit i przejść do następnego podrozdziału.

Debuger programu Wine jest podobny do programu gdb. Umożliwia zakładanie pułapek, sprawdzanie i modyfikowanie wartości rejestrów oraz poszczególnych komórek pamięci. Mimo tego jego funkcjonalność jest dość ograniczona - tabela 59.2 zawiera wszystkie dostępne polecenia.

Tabela 59.2. Polecenia wewnętrznego debugera programu Wine

Polecenie

Funkcja

break

Ustawia pułapkę pod wskazanym adresem, który może również być reprezentowany przez wartość symboliczną. Po wykonaniu instrukcji znajdującej się pod tym adresem, wykonanie programu Wine zostanie wstrzymane.
Przykładowo, polecenie break * GDI_Ordinal_24 spowoduje zatrzymanie programu po wejściu do procedury systemu Windows rysującej elipsę,
dostępnej pod wewnętrzną nazwą GDI.24.

bt

Wyświetlenie drogi, która prowadziła do aktualnego miejsca wykonania programu (ang. backtrace). Wyświetlane adresy są adresami powrotu, a nie wywołania podprogramów.

cont

Powoduje kontynuowanie wykonania programu po osiągnięciu pułapki lub wystąpieniu błędu.

define

Podstawia wartość pod nazwę symboliczną, na przykład define mojaproc 0x000001c6

disable

Powoduje wyłączenie określonej pułapki. Pułapki ustawiane za pomocą polecenia break są numerowane. Aby którąś z nich wyłączyć, należy określić jej numer za pomocą polecenia info, a następnie wykorzystać go podając jako parametr polecenia disable, na przykład aby wyłączyć pułapkę o numerze 1 należy wydać polecenie disable 1

enable

Umożliwia załączenie pułapki o określonym numerze - polecenie to ma działanie odwrotne do polecenia disable. Aby załączyć wyłączoną poprzednio pułapkę o numerze 1, należy wydać polecenie enable 1.

help

Wyświetla tekst pomocy dotyczącej dostępnych poleceń.

info

Wyświetla informacje o następujących parametrach:
reg - dane o wartościach przechowywanych w rejestrach;
stack - zawartość stosu;
break - dane o poszczególnych pułapkach;
segments - informacje o rozmieszczeniu w pamięci używanych segmentów.

mode

Pozwala przełączyć się pomiędzy trybem 16 i 32-bitowym.

cd. na następnej stronie

Tabela 59.2. cd. Polecenia wewnętrznego debugera programu Wine

Polecenie

Funkcja

print

Wyświetla wartość podanego wyrażenia.

quit

Umożliwia zakończenie działania debugera i uruchomionego programu
MS-Windows.

set

Pozwala zapisywać dowolne wartości do poszczególnych rejestrów i komórek pamięci.

symbolfile

Ładuje plik zawierający wartości symboliczne. Odpowiedni plik o nazwie wine.sym jest rozprowadzany wraz z programem Wine.

x

Wyświetla zawartość pamięci w kilku różnych formatach. Składnia tego polecenia jest następująca: x / format adres. Parametr format może przyjmować następujące wartości:
x 32-bitowa liczba całkowita szesnastkowa
d 32-bitowa liczba całkowita dziesiętna
w 16-bitowa liczba szesnastkowa
b bajt
c pojedynczy znak
s napis ASCII zakończony zerem
I instrukcja procesora i386
Przed formatem można również podać liczbę, określającą ilość powtórzeń,
na przykład aby wyświetlić 10 kolejnych instrukcji rozpoczynając od danego adresu, należy wydać polecenie:
x / 10 I 0x00001cd

Aby móc wykorzystać możliwości tkwiące w tym debugerze, trzeba rozumieć ogólne zasady działania debugerów programów asemblerowych dla platformy i386. Jeśli naprawdę chcesz szukać usterek w programie Wine, niezbędny będzie kod asemblerowy generowany przez kompilator GCC.

Zasady działania programu Wine

Program Wine składa się z części ładującej programy systemu MS-Windows do pamięci i z biblioteki funkcji systemu MS-Windows.

Ładowanie programów do pamięci

Program Wine zaczyna swoje działanie od załadowania obrazu pliku wykonywalnego systemu MS-Windows do pamięci. Dodatkowo ładowane są wszystkie wymagane biblioteki DLL i zasoby. Pliki wykonywalne systemu MS-Windows mają inną strukturę, niż uruchamiane w systemie DOS, nazywaną NE (ang. New Executable). Biblioteki DLL i pliki czcionek również używają struktury NE, co nieco upraszcza zadanie postawione przed programem Wine.

Do pamięci muszą zostać załadowane poszczególne segmenty obrazu pliku NE, a następnie należy rozwiązać wszystkie odniesienia do innych bibliotek DLL i wywołań funkcji systemu Windows. Odwołania do funkcji nie zdefiniowanych wewnątrz obrazu składają się z nazwy modułu i numeru porządkowego funkcji, na przykład wywołanie funkcji rysującej elipsę ma postać GDI.24. W module GDI zapisane są funkcje graficzne systemu Windows, natomiast numer 24 jest właśnie numerem porządkowym funkcji rysującej elipsę.

Po załadowaniu do pamięci obrazu pliku wykonywalnego, Wine po prostu przechodzi do wykonania zdefiniowanej w nim funkcji WinMain(). Ponieważ zarówno Linux, jak i MS-Windows działają w oparciu o instrukcje procesorów rodziny i386, nie jest konieczna emulacja rozkazów. W momencie, gdy wystąpi wywołanie funkcji systemu Windows, jest ono przechwytywane przez program Wine i przekazywane do odpowiedniej biblioteki.

Biblioteka Wine

Program Wine zamienia wywołania standardowych funkcji MS-Windows na odpowiadające im wywołania funkcji systemu X lub UNIX. Dla przykładu, wywołanie funkcji rysującej elipsę w systemie MS-Windows ma następującą postać:

Ellipse (hdc, xLeft, yTop, xRight, yBottom);

Parametry xLeft, yTop, xRight, i yBottom określają rozmiar prostokąta otaczającego elipsę. Natomiast w systemie X odpowiadające polecenie ma postać:

XDrawArc (display, d, gc, x, y, width, height, angle1, angle2);

Jak widać, podstawienie odpowiednich współrzędnych wymaga przeprowadzenia pewnych obliczeń. Pozostałe parametry funkcji XDrawArc można wyznaczyć bezpośrednio. Parametr d określa obszar, na którym można rysować - zwykle jest to po prostu uchwyt okienka. W systemie Windows jest on jednym z elementów struktury przekazywanej przez parametr hdc. Parametr gc określa kontekst graficzny, który funkcjonalnie odpowiada parametrowi hdc w systemie Windows. Ponieważ w systemie X możliwe jest wyświetlanie okien na innym terminalu podłączonym do sieci, parametr display określa widok, którego należy użyć. Wartość tego parametru pozostaje stała w ciągu całej sesji programu Wine. Ostatnim elementem, na który program Wine musi zwrócić uwagę, jest fakt, że funkcja Ellipse może również zostać wywołana w celu narysowania wypełnionej elipsy - program Wine sprawdza to w strukturze hdc i ewentualnie zamiast XDrawArc wywołuję funkcję XFillArc.

W systemie MS-Windows dostępnych jest prawie 300 podstawowych funkcji graficznych, dla których muszą zostać wykonane podobne translacje. Choć może wydawać się to dość pracochłonne, konwersje funkcji graficznych okazują się być jednym z prostszych zadań, które trzeba podejmować podczas emulacji systemu MS-Windows.

Gdzie kończy się Wine,
a zaczyna MS-Windows?

Ponieważ do poprawnego działania program Wine potrzebuje pewnych elementów systemu MS-Windows, nie jest łatwo od razu powiedzieć, w którym miejscu kończy się Wine, a zaczyna MS-Windows. Wine w obecnej wersji zapewnia poprawną obsługę wywołań funkcji wchodzących w skład następujących modułów systemu MS-Windows:

commdlg Common Windows Dialog, najpopularniejsze okna dialogowe;

gdi Graphics Device Interface, moduł z funkcjami graficznymi;

kernel interfejs jądra systemu operacyjnego;

mmsystem interfejs podsystemu obsługi multimediów;

mouse funkcje obsługi myszy;

shell biblioteka funkcji powłoki systemu Windows 3.1;

sound podsystem obsługi dźwięku;

toolhelp funkcje ułatwiające wyszukiwanie usterek;

user funkcje biblioteki Microsoft Windows User Interface;

win87em moduł obsługi i emulacji koprocesora;

winsock moduł Windows Socket (obsługa TCP/IP).

Aby używać funkcji, które nie są zaimplementowane w samym programie Wine, niezbędny jest dostęp do poszczególnych części systemu MS-Windows. Jednym z przykładów jest biblioteka OLECLI, która obsługuje klientów OLE. Autorzy programu Wine znacznie ograniczyli liczbę wymaganych plików. Projekt zakłada całkowite uniezależnienie się od plików systemu MS-Windows, włączając w to programy użytkowe i struktury plików tworzone podczas instalacji aplikacji MS-Windows.

Niektóre z najprostszych aplikacji, na przykład WINMINE.EXE czy SOL.EXE już dziś działają nie wymagając żadnego dodatkowego kodu systemu MS-Windows czy dostępu do katalogów tego systemu. Choć nie jest wymagana żadna konkretna organizacja katalogów, możesz na przykład spróbować uruchomić aplikację WINMINE.EXE w następujący sposób:

  1. skopiuj pliki winmine.exe i win.ini do katalogu linuxowego, na przykład /users/windows;

  1. zmodyfikuj wartość zmiennej Windows przechowywaną w pliku wine.conf tak, by wskazywała na odpowiedni katalog - w naszym przypadku /users/windows;

  2. odmontuj partycję DOS-ową;

  3. uruchom program Wine.

Ograniczenia programu Wine

Tylko kilka programów systemu MS-Windows działa prawidłowo pod kontrolą programu Wine. Na szczęście można z dość dużą pewnością przewidzieć, czy dany program będzie działać poprawnie bez konieczności uruchamiania go. Niestety, istnieje dość spora grupa aplikacji, które najprawdopodobniej nigdy nie będą działać pod kontrolą emulatora Wine.

Działające oprogramowanie

Obecna wersja programu Wine obsługuje wiele programów użytkowych i gier rozprowadzanych wraz z systemem Windows 3.1. Pomiędzy poszczególnymi wersjami Wine występują jednak dość znaczne różnice - zmiany, które umożliwiają obsługę jednych aplikacji, mogą uniemożliwić poprawne działanie innych. Oto lista programów i gier, które działają zadowalająco dobrze pod kontrolą Wine:

Używanie programu winestat
do analizy programów systemu Windows

W skład pakietu Wine wchodzi również program użytkowy o nazwie winestat. Jest to w zasadzie ten sam program co Wine, tyle że zamiast uruchamiania programu MS-Windows poprzestaje on na załadowaniu go do pamięci i wyświetleniu informacji o powodzeniu tego przedsięwzięcia. Ładowane są również potrzebne biblioteki DLL i w razie ich braku generowane są odpowiednie komunikaty. winestat analizuje też wszystkie odwołania do funkcji systemowych i zapisanych w bibliotekach DLL, weryfikując ich istnienie. Dla przykładu, uruchomienie programu winestat z aplikacją Paintbrush systemu MS-Windows daje następujące rezultaty:

KERNEL.1 not implemented
KERNEL.54 not implemented
KERNEL.113 not implemented
KERNEL.114 not implemented
KERNEL.121 not implemented
KERNEL.154 not implemented
KERNEL.178 not implemented
KERNEL.207 not implemented
KERNEL: 52 of 66 (86.7 %)
USER: 150 of 150 (100.0 %)
GDI.151 not implemented
GDI.307 not implemented
GDI.366 not implemented
GDI.439 not implemented
GDI: 80 of 84 (95.2 %)
SHELL: 9 of 9 (100.0 %)
KEYBOARD: 2 of 2 (100.0 %)
TOTAL: 293 of 305 winapi functions implemented (96.1 %)

Program winestat określa poszczególne niezaimplementowane funkcje za pomocą modułu, w którym są one zapisane, oraz numeru porządkowego. Jeśli wolałbyś znać nazwy tych funkcji, możesz zajrzeć do pliku o nazwie odpowiadającej nazwie modułu (z rozszerzeniem .spec) zapisanego w podkatalogu if1632 katalogu z kodem źródłowym programu wine. Oto fragment pliku

kernel.spec:
#1 FATALEXIT
#2 EXITKERNEL
3 pascal GetVersion() GetVersion()



#54 pascal16 GETINSTANCEDATA

Wiersze rozpoczynające się od symbolu # są traktowane jako komentarze, co oznacza, że poszczególne funkcje nie są zaimplementowane. W powyższym przykładzie, są to między innymi funkcje FATALEXIT oraz GETINSTANCEDATA. Funkcja FATALEXIT używana jest do testowania programów w systemie MS-Windows w nieprawidłowych warunkach i rzadko jest przedmiotem zainteresowania większości użytkowników systemu MS-Windows. Funkcja GETINSTANCEDATA kopiuje dane konfiguracyjne z poprzedniego egzemplarza danej aplikacji. Jeśli uruchamiany jest tylko jeden egzemplarz, nie jest ona wykorzystywana.

Na koniec program winestat wyświetla procentową informację o liczbie obsługiwanych funkcji, która jest dość dobrą miarą tego, jak dobrze dana aplikacja może działać pod kontrolą programu wine. Niestety, jeśli nie jest obsługiwana choćby jedna funkcja niezbędna do zainicjalizowania danej aplikacji, jakikolwiek wynik poniżej 100% będzie niezadowalający.

Aplikacje, które w teście winestat uzyskają wynik ponad 95%, mają szansę na poprawne działanie. W przeciwieństwie do programu DOSemu, Wine nie ma skłonności do pozostawiania Linuxa w stanie niestabilnym. Mimo tego zawsze należy zamykać kończące się błędem sesje programu Wine. Najłatwiej jest w tym celu uruchamiać Wine z osobnym pulpitem, na przykład za pomocą polecenia wine -desktop 800x600 nazwa_programu. Zwykłe metody wyłączania procesu systemu Windows za pomocą menedżera okienek powinny działać prawidłowo.

0x01 graphic

Kiedy zawiodą wszystkie inne metody zakończenia pracy błędnie działającego programu Wine, najlepiej przełączyć się na inną konsolę wirtualną i zamknąć proces Wine za pomocą polecenia kill. Dla przykładu, wciśnięcie klawiszy Alt+Control+F2 uaktywnia drugą konsolę wirtualną. Po zalogowaniu się można użyć polecenia ps -ax |grep wine, które pozwoli na znalezienie numeru procesu odpowiadającego sesji Wine. Następnie należy wydać polecenie kill -15 pid, gdzie pid jest wspomnianym wcześniej numerem.

Do sesji X Window można wrócić przełączając się na konsolę, na której jest ona uruchomiona. Jeśli nie wiesz, która to konsola, po prostu przełączaj się kolejno pomiędzy nimi, trzymając klawisze Alt i Control oraz wciskając kolejno klawisze funkcyjne.

Najważniejsze braki programu Wine

Prawdopodobnie najbardziej rzucającym się w oczy niedociągnięciem jest brak możliwości drukowania. Ponieważ jednak jest to proces skomplikowany, opracowanie interfejsu drukarki nie jest wcale proste. Ogromnym zadaniem byłoby umożliwienie obsługi wszystkich typów drukarek działających w systemie MS-Windows. Prawdopodobnie zaimplementowany zostanie tylko sterownik dla drukarek postscriptowych. Istniejące programu użytkowe dla systemu Linux, na przykład Ghostscript, potrafią następnie zamienić dokument postscriptowy na nadający się do wydrukowania za pomocą drukarek różnych typów, na przykład laserowych czy atramentowych drukarek HP.

Również 32-bitowy interfejs Windows API (win32) nie jest w większości obsługiwany. Obraz pliku wykonywalnego systemu Windows NT i Windows 95 ma format PE (ang. Portable Executable, przenośny plik wykonywalny) - wine potrafi co prawda ładować pliki zasobów (na przykład czcionki) w tym formacie, ale nie radzi sobie z plikami wykonywalnymi i bibliotekami DLL.

Oprogramowanie, które prawdopodobnie
nigdy nie będzie działać

Projekt Wine nie zakłada obsługi wirtualnych sterowników urządzeń (Virtual Device Drivers, VDD). Wiąże się to z faktem, że pliki VDD wykorzystują inny format - LE (ang. Linear Executable), który nie jest obsługiwany przez moduł ładujący programu Wine. Ponieważ w plikach VDD często występują bezpośrednie odwołania do sprzętu, ich współdziałanie z systemem Linux stwarzałoby poważne problemy. Jednym z zastosowań plików VDD w systemie Windows jest implementacja stosów TCP/IP. W programie Wine TCP/IP jest obsługiwane za pomocą biblioteki winsock, która z kolei wykorzystuje mechanizmy TCP/IP wbudowane w jądro systemu Linux.

Podsumowanie

W tym rozdziale przedstawiliśmy informacje dotyczące konfiguracji i używania programu Wine, który umożliwia emulowanie systemu MS-Windows w systemie X Window i uruchamianie niektórych aplikacji. Wine nie jest jedynym programem tego typu; istnieje jeszcze kilka innych emulatorów systemu Windows i interfejsów programów wykonywalnych, jak na przykład program WABI. Mimo tego program Wine jest najstarszym z nich (przynajmniej jeśli brać pod uwagę system Linux) i posiada dobre wsparcie ze strony użytkowników.

Używanie programu WAB (Windows Application Binary Interface) omówione jest w rozdziale 23. „Wabi”.

Rozdziały 26. „Programowanie w języku C” i 27. „Programowanie w C++” zawierają podstawowe informacje dotyczące programowania w językach C i C++ w systemie Linux.

W rozdziale 56. „Zarządzanie kodem źródłowym” omawiamy systemy kontroli wersji i narzędzia ułatwiające zarządzanie poszczególnymi wersjami dokumentów.

Nowsze wersje jądra systemu obsługują system plików o nazwie vfat, który warto zastosować zamiast podanego w przykładzie systemu MSDOS, ponieważ potrafi on poprawnie obsługiwać długie nazwy plików używane w systemie MS-DOS 7.0 (przyp. tłum.).

872 Część VIII Programowanie dla zaawansowanych

872 E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\59.DOC

E:\Moje dokumenty\HELION\Linux Unleashed\Indeks\59.DOC 873

Rozdział 59. Projekt Wine 873



Wyszukiwarka

Podobne podstrony:
43, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
34, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
58, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
26, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
08, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
10, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
57, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
29, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
46, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
60, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
36, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
49, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
62, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
D, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
55, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
28, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
61, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
42, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta
03, ciekawostki, Linux - Ksiega Eksperta, Linux - ksiega eksperta, Linux - księga eksperta

więcej podobnych podstron