Wine: Windows progs in Linux

Vroeger hier ook een stukje over samba; verhuisd naar mijn NSLU2 met Debian page.

Op deze pagina (een onderpagina van mijn Linux page) wat aandacht over de koppeling tussen Windows en Linux, met name Wine (draaien van Windows programma's onder Linux). Een korte cursus Wine (in het Nederlands) is te vinden op de pages van de HCC

Wine

Leuk, Linux... Maar, ik heb toch nog wat programma's die alleen voor Windows beschikbaar zijn? Wat doe ik nu?

Wel, daar is nu Wine voor ontwikkeld. Wine is een open-source implementatie van de Windows API (Application Programmers Interface) bovenop X, OpenGL, en Unix (waar linux een variant van is). Moeilijke woorden, maar dat wil zeggen dat programma's die met behulp van Wine draaien, denken dat er Windows (inclusief DirectX) onder zit in plaats van Linux. Ps: Wine staat voor "Wine Is Not an Emulator".

Voorbeelden van programma's die draaien onder Wine zijn: Guild Wars, PhotoShop CS2, World of Warcraft 2.4.X,  Microsoft Office 2003 (grotendeels), en veel anderen. Maar, je hebt voor veel zaken helemaal geen Windows-programma's nodig: er zijn ook heel wat 'echte' Linux-alternatieven, zo gebruik ik OpenOffice in plaats van Microsoft Office.

Alternatieve methode: installeer Windows op een PC emulator, zoals Qemu, VMware of VirtualBox. Hiermee heb je echt een volledige (virtuele) Windows PC onder Linux. Wine is zelf geen emulator, maar implementeert (een deel van) de Windows API.

Hoe kom ik aan Wine?

In Ubuntu (ik heb nu versie 12.04) kan je Wine laden via het Ubuntu Software Center. Voer 'wine' in in het zoekveld, kies wine, en installeer. Fluitje van een cent. Na installatie is er een Wine groep toegevoegd in het applicatie-menu, waar je geïnstalleerde Windows programma's kan vinden. Als voorbeeld is 'notepad' al standaard voorgeïnstalleerd, en die werkt. Ook kan je hier een entry vinden voor het configureren van Wine (Applications -> Wine -> Configure Wine); in ieder geval bij de 'drives' tab de zaak automatisch even laten invullen (Autodetect), en ook de audio-tab even doorlopen (test sound); standaard-instellingen zijn in het algemeen OK.

Extras: Winetricks

Lang niet alles installeert keurig op een 'kale' Wine. Daarvoor is WineTricks in het leven geroepen; hiermee kan je makkelijk extra Windows-onderdelen installeren, die door een aantal programma's verwacht worden. Denk hierbij aan runtime libraries, Direct3D, maar ook een aantal support-programma's. WineTricks is gewoon via het Ubuntu Software Center te installeren.

Wat heb ik zoal aangekruist bij WineTricks? Windows DLL's: comctl32, d3dx10, d3dx9_36, gdiplus, mfc42, physx, quarts, vcrun6/vcrun6sp6. Windows fonts: corefonts. Plus, ik heb de tips op "Install and configure wine to Play latest windows games in Linux" gelezen en het register aangepast. Lukte niet helemaal vanzelf, al was het alleen maar omdat het plaatje op die pagina niet goed leesbaar is; ik heb de Direct3D-waarden in een file gezet en die in regedit geïmporteerd, ging makkelijker.

Test: Settlers HoK

Een van de spelletjes die ik graag speel is Settlers. In de loop der jaren zijn daar al heel wat versies van uitgekomen. De een na laatste versie (versie 5) was Settlers HoK (Heritage of Kings, Erfenis van Koningen), een 3D-spel dus dat vraagt best heel wat van de Windows emulatie. Volgens de Wine Database (ga naar Browse Apps en zoek je programma) zou dit goed moeten draaien onder Wine.

Nu had ik net op Koninginnedag op de vrijmarkt voor 1€ de complete versie (dus inclusief uitbreidingen) op de kop getikt (de kale versie had ik al). Geïnstalleerd met wine, en ook de patch voor 1.06 geïnstalleerd. Helaas, geen succes; kan niet het hulpprogramma draaien om de echtheid van de CD te controleren (en dat is'ie toch echt), zo ver gaat Wine blijkbaar niet met Windows-compatibiliteit. Maar, niet getreurd; ik heb de no-CD patch voor 1.06 geladen zodat Settlers niet meer om de CD vraagt (uitpakken en de binary settlershok.exe vervangen door deze nieuwe versie); en het probleem is opgelost: ik kan spelen. En draait soepel op 1600x1024 (op oude dual-core E8400). Alleen het geluid valt wel eens uit.

Andere programma's

Ook enkele andere programma's, met name IrfanView 4.30, draaien goed.

Meerdere Wine installaties

Wine lijkt haast een soort 'Virtual Machine' in de zin dat alles in een directory geplaatst wordt (standaard .wine), maar je meer van dit soort directories kunt hebben: als het ware meerdere Windows machines. Mocht je dus programma's hebben die elkaar niet verdragen (bijvoorbeeld vanwege verschillende dll-versies), wil je meerdere versies geïnstalleerd hebben, of wil je aplicaties bundelen en zo verdelen, dan kan je ieder hun eigen wine omgeving geven en met WINEPREFIX de omgeving kiezen. Zo heb ik een .wine_is folder ooit gekopieerd van .wine op een oude Ubuntu versie, met daarin een wine installatie van Settlers IV. Een alias in mijn .bash_alias file maakt het starten wat makkelijker,  starten met 'settlers':

alias settlers='WINEPREFIX="/home/kees/.wine_is" wine "/home/kees/.wine_is/drive_c/BlueByte/The Settlers IV/S4.exe"'
settlers

Problemen vroeger (~2008)

Misschien nuttig voor mensen doe problemen hebben met Wine: vroeger had ik ook hier en daar wat moeite (wine is ondertussen heel wat verbeterd). Irfanview 4.30 liet zich keuring installeren, zonder dat onderstaande ingrepen nodig waren!!

Oude Irfanview in Wine

Ik heb destijds mijn favoriete image-viewer, IrfanView (versie 4.10), geprobeerd te installeren. Volgens de Wine applicatie-database zou dit moeten kunnen, al waren er wel wat problemen gesignaleerd. Via applicatie menu een terminal opgestart, en de eerder gedownloade irfanview installer gedraaid:

wine iview410_setup.exe

Irfan 4.25 werkt nu ook in Ubuntu 9.10 Karmic Koala; maar moet wel met argument /one gestart worden. Verder de eerste keer de .ini file weggooien, anders crasht'ie. Ook zijn de icoontjes niet altijd zichtbaar.

Helaas, niet in een keer soepel, gezien het resultaat:

ubuntu@ubuntu-1ghz:~$ wine iview410_setup.exe
preloader: Warning: failed to reserve range 00000000-60000000
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
preloader: Warning: failed to reserve range 00000000-60000000
err:dosmem:setup_dos_mem Cannot use first megabyte for DOS address space, please report
err:module:import_dll Library MFC42.DLL (which is needed by L"H:\\iview410_setup.exe") not found
err:module:LdrInitializeThunk Main exe initialization for L"H:\\iview410_setup.exe" failed, status c0000135
ubuntu@ubuntu-1ghz:~$

Hulp nodig bij installeren, of geen zin zelf configuraties aan te passen? Kijk eens naar Wine-Doors, een package manager waarmee veel gebruikelijke Windows programma's makkelijk geïnstalleerd kunnen worden.

Alternatief: met behulp van WineTricks kan je simpel ontbrekende DLL's laten installeren, zoals de genoemde mfc42.dll.

Bij wat zoeken op de Wine site bleken hier twee problemen te zijn:

  • Niet alle Windows API's zijn zo maar aanwezig, met name mfc42.dll bleek te missen
  • In de nieuwe Ubuntu 8.04 is standaard vanwege veiligheid adres 0 niet meer voor applicaties bereikbaar

Het eerste probleem is te verhelpen door de file mfc42.dll te kopiëren vanuit de windows/system32 map van een Windows systeem (waar ik een geldige installatie van heb) te kopieren naar de windows/system32 map die door Wine wordt bijgehouden. Deze laatste is het makkelijkst te vinden vanuit de wine entry in het Applications menu -> Wine -> Browse C: drive (C: wordt door Wine nagespeeld, de files staan eigenlijk op ~/.wine/drive_c ).

Het tweede probleem is uitgebreid op internet beschreven op de PreloaderPageZeroProblem pagina op de Wine Wiki. Hier staat zowel een 'tijdelijke' oplossing (in de zin dat na een reboot je dit weer opnieuw moet doen), als een permanente fix, die echter wel dan een klein veiligheidsgat veroorzaakt. Ik heb gekozen voor de tijdelijke oplossing, daar dit alleen bij installatie een probleem was, en niet bij het normaal draaien van Irfanview: voor het installeren in het terminal window een extra commando draaien (vraagt wel je Ubuntu wachtwoord):

sudo sysctl -w vm.mmap_min_addr=0

Meer vragen over Wine? Kijk ook eens op de FAQ: Frequently Asked Questions.

Werkt tot de volgende reboot. Meer uitleg op de genoemde PreloaderPageZeroProblem pagina. En ja wel, nu wordt de installatie keurig doorlopen, en heb ik daarna de IrfanView Icons (nou ja, eigenlijk de Wine icons, maar ze starten wel IrfanView) op mijn desktop, en is IrfanView opgenomen in het Wine menu in applications. En, het draait keurig!

Settlers IV onder Wine

Settlers IV was iets lastiger... Wat zeg ik, een mini ramp. Ik heb de normale Settlers IV uitvoering, volgens de applicatie database op WineHQ zou de GOLD versie moeten werken, dus ik dacht de normale ook vast wel. Geïnstalleerd vanaf CD volgens de aanwijzingen in Settlers in Wine. Vervolgens vanuit de installer gestart: crash; system down... Bij opnieuw opstarten van Ubuntu 9.10 Karmic Koala de melding dat het file system beschadigd was, en ik kwam terecht in een 'maintenance shell', zo'n tekst scherm met een Linux prompt... Niks mooie grafische Ubuntu omgeving.

Gelukkig wist ik uit eerdere ervaringen hoe 'chkdsk' te draaien: in Linux (en op mijn systeem met Ubuntu op de derde partitie) is dat e2fsck /dev/sda3 (moet je ook maar net weten). Alles laten repareren (overal maar yes op gezegd), en daarna 'reboot', en alles lijkt weer te werken.

Daarna heb ik de Settlers IV patch settlers4_full_patch_1516.exe geïnstalleerd, nu lijkt het te werken (al gaat het wat traag, op mijn oude laptop, de volgende tips nog te testen: op 16 bit kleur zetten, en in de config file ForceBlit = 1 en PureSoftwareMode = 0 ?).