El primer paso es bajarse el Wine. Se puede usar en principio cualquier paquete binario que pueda venir incluido con la distribución, pero en mi caso utilicé el código fuente. Exáctamente me bajé el Wine 20030508, es decir, la versión del 8 de Mayo del 2003, y si no he actualizado es porque esta me funciona perfectamente y no tengo versionitis. Se supone que las versiones recientes funcionarán más o menos igual.
Una vez bajado el Wine, se procede a la instalación. En mi caso eso supone que previamente hay que compilar las fuentes:
./configure
$ make depend
$ make
$ su -c make install
Tras lo cual deberíamos tener un montón de ficheros /usr/local/bin/wine* y un directorio /usr/local/lib/wine repletito de librerías con el nombre de DLL's del Hasefroch pon el sufijo .so (por ejemplo comctl32.dll.so). Estos últimos ficheros son librerías dinámicas nativas ELF que implementan las mismas funciones que se supone y/o sabe que tienen las correspondientes DLL's del Windows.
Ahora pasamos a configurar el Wine para su utilización por nuestro usuario. Primero creamos el directorio $HOME/.wine y en él creamos el fichero config. En el código fuente y la documentación tenemos varios de ejemplo, y también tenemos el programita wineconf, pero en mi caso he preferido usar el vi a palo seco:
WINE REGISTRY Version 2
;; All keys relative to \\Machine\\Software\\Wine\\Wine\\Config
[Drive A]
"Path" = "/mnt/floppy"
"Type" = "floppy"
"Label" = "Floppy"
"Filesystem" = "win95"
"Serial" = "87654321"
"Device" = "/dev/fd0"
[Drive C]
"Path" = "${HOME}/.wine/falso_disco"
"Type" = "hd"
"Label" = "Hasefroch"
"Filesystem" = "win95"
[Drive D]
"Path" = "/mnt/cdrom"
"Type" = "cdrom"
"Label" = "cederon"
"Filesystem" = "win95"
"Device" = "/dev/cdrom"
[Drive E]
"Path" = "/tmp"
"Type" = "hd"
"Label" = "Temporales"
"Filesystem" = "win95"
[Drive F]
"Path" = "${HOME}"
"Type" = "network"
"Label" = "Mi Casa"
"Filesystem" = "win95"
[Drive G]
"Path" = "/"
"Type" = "network"
"Label" = "Linux"
"Filesystem" = "win95"
[wine]
"Windows" = "c:\\hasefrosh"
"System" = "c:\\hasefrosh\\chaos"
"Profile" = "c:\\hasefrosh\\silhouettes\\officer"
"Temp" = "e:\\"
"Path" = "c:\\hasefrosh;c:\\hasefrosh\\chaos;f:\\"
"GraphicsDriver" = "x11drv"
"ShellLinker" = "wineshelllink"
[Version]
"Windows" = "win98"
[DllOverrides]
"oleaut32" = "builtin, native"
"ole32" = "builtin, native"
"commdlg" = "builtin, native"
"comdlg32" = "builtin, native"
"shell" = "builtin, native"
"shell32" = "builtin, native"
"shfolder" = "builtin, native"
"shlwapi" = "builtin, native"
"shdocvw" = "builtin, native"
"advapi32" = "builtin, native"
"msvcrt" = "native, builtin"
"mciavi.drv" = "native, builtin"
"mcianim.drv" = "native, builtin"
"setupapi" = "native, builtin"
"*notepad.exe" = "native, builtin"
"C:\\hasefrosh\\regedit.exe" = "native, builtin"
"*" = "builtin, native"
[x11drv]
"AllocSystemColors" = "100"
"PrivateColorMap" = "N"
"PerfectGraphics" = "N"
"Managed" = "Y"
"UseDGA" = "Y"
"UseXShm" = "Y"
"UseXVidMode" = "Y"
"UseTakeFocus" = "Y"
"DXGrab" = "N"
"TextCP" = "850"
[fonts]
"Resolution" = "96"
"Default" = "-adobe-helvetica-"
"DefaultFixed" = "fixed"
"DefaultSerif" = "-adobe-times-"
"DefaultSansSerif" = "-adobe-helvetica-"
[FontDirs]
"dir1" = "/usr/X11R6/lib/X11/fonts/TTF"
[serialports]
"Com1" = "/dev/ttyS0"
"Com2" = "/dev/ttyS1"
"Com3" = "/dev/ttyS2"
"Com4" = "/dev/modem"
[parallelports]
"Lpt1" = "/dev/lp0"
[spooler]
"FILE:" = "tmp.ps"
"LPT1:" = "|lpr"
[registry]
"LoadGlobalRegistryFiles" = "Y"
"LoadHomeRegistryFiles" = "Y"
"LoadWindowsRegistryFiles" = "Y"
"WritetoHomeRegistryFiles" = "Y"
[Tweak.Layout]
"WineLook" = "Win95"
[Clipboard]
"ClearAllSelections" = "0"
"PersistentSelection" = "1"
[afmdirs]
"1" = "/usr/share/ghostscript/fonts"
"2" = "/usr/share/a2ps/afm"
"3" = "/usr/share/enscript"
"4" = "/usr/X11R6/lib/X11/fonts/Type1"
[WinMM]
;; Concesión para los fans de KDE, yo lo tengo con wineoss.drv
"Drivers" = "winearts.drv"
"WaveMapper" = "msacm.drv"
"MidiMapper" = "midimap.drv"
[AppDefaults\\notes.exe\\x11drv]
"Managed" = "Y"
"Desktop" = "N"
[AppDefaults\\nlnotes.exe\\x11drv]
"Managed" = "Y"
"Desktop" = "N"
[AppDefaults\\setup.exe\\x11drv]
"Desktop" = "800x600"
"Managed" = "N"
[AppDefaults\\install.exe\\x11drv]
"Desktop" = "800x600"
"Managed" = "N"
[AppDefaults\\instalar.exe\\x11drv]
"Desktop" = "800x600"
"Managed" = "N"
[AppDefaults\\setup.exe\\DllOverrides]
"msvcrt" = "native"
Se puede reemplazar los hasefrosh por windows o winnt si se prefiere, así como los chaos por system o system32. También se puede cambiar el silhouettes\\officer por profiles\\administrator o incluso dejar la definición a la 2K/XP: Profile = C:\\Documents and Settings\\Administrator.
Tal como lo he puesto simula ser un Windows 98, pero se puede hacer que simule ser otras versiones. Se trata de cambiar la clave "windows" de la sección [version] por cualquiera de los valores soportados: win95, win98, winme, nt351, nt40, win2k, winxp, win20, win30, win31. Incluso se puede hacer que para un programa en particular se emule una versión diferente:
Ejecutar el Solitario en un entorno XP:
[AppDefaults\\sol.exe\\Version]
"Windows" = "winxp"
Ahora pasaríamos a crear la estructura de directorios del falso Windows:
$ mkdir $HOME/.wine/falso_disco
$ mkdir $HOME/.wine/falso_disco/hasefrosh
$ mkdir $HOME/.wine/falso_disco/hasefrosh/chaos
$ mkdir $HOME/.wine/falso_disco/hasefrosh/silhouettes
$ mkdir $HOME/.wine/falso_disco/hasefrosh/silhouettes/officer
El siguiente paso es inicializar el registro del Windows. Para ello nos vamos al directorio del código fuente del Wine, y dentro de él al subdiretorio programs/regedit, en el que tiene que haberse compilado un ejecutable con el nombre de regedit.exe.so y un enlace a ..
/../tools/winewrapper. Entonces ejecutamos el comando ./regedit ../../winedefault.reg.
Copiamos algunos de los ejecutables (nativos Linux) que simulan un entorno Windows:
$ set WINE_SOURCE=directorio_del_codigo_fuente_del_Wine
$ cd $HOME/.wine/falso_disco/hasefrosh
$ cp $WINE_SOURCE/programs/notepad/notepad.exe.so notepad.exe
$ cp $WINE_SOURCE/programs/regedit/regedit.exe.so regedit.exe
$ cp $WINE_SOURCE/programs/rundll32/rundll32.exe.so rundll32.exe
$ cp $WINE_SOURCE/programs/uninstaller/uninstaller.exe.so uninstall.exe
$ cp $WINE_SOURCE/programs/winhelp/winhelp.exe.so winhelp.exe
$ ln -s $HOME/.wine/falso_disco/hasefrosh/winhelp.exe winhlp32.exe
$ set WINE_LIBS=/usr/local/lib/wine
$ cd $HOME/.wine/falso_disco/hasefrosh/chaos
$ ln -s $WINE_LIBS/control.exe.so control.exe
$ ln -s $WINE_LIBS/help.exe.so help.exe
$ ln -s $WINE_LIBS/notepad.exe.so notepad.exe
$ ln -s $WINE_LIBS/regsvr32.exe.so regsvr32.exe
$ ln -s $WINE_LIBS/wcmd.exe.so wcmd.exe
$ ln -s $WINE_LIBS/winmine.exe.so winmine.exe
$ ln -s $WINE_LIBS/winver.exe.so winver.exe
Ahora ya tenemos nuestro Hasefrosh'98 totalmente operativo, tal como demuestra el ejecutar desde un xterm el comando "wine notepad.exe" (fijarse que no es el auténtico Notepad de Windows).
El suiguiente paso es instalar el Lotus Notes. Simplemente metemos el CD en la lectora, montamos la unidad de CD-ROM (cosa que no hace falta si tenemos Supermount o Automount), y desde un xterm iríamos al directorio del CD en el que esta el programa de instalación y ejecutaríamos wine setup.exe tras lo cual se nos abriría una ventana de 800x600 que simularía ser la pantalla completa de un Windows y en la que veríamos el proceso normal de instalación del programa. Tras los típicos "siguiente, siguiente, siguiente..." y seleccionando como carpeta de destino del Notes la C:\Notes\ acabaríamos teniendo el Notes cliente instalado en nuestro Wine.
Para ejecutar ahora el Notes, simplemente desde nuestro $HOME y dentro de un xterm, ejecutaríamos el comando wine c:\\notes\\notes.exe, tras lo cual tendríamos una ventana controlada por nuestro windows manager con el Notes tal cual.
Finalmente quedaría asociar algunas de las extensiones habituales a los programas nativos, para que desde dentro del Notes pudiesemos abrir automáticamente los documentos insertados. Para ello crearíamos ficheros de texto con la extensión reg y que contengan las claves necesarias. Por ejemplo, para registrar los DOC y asociarlos al OpenOffice:
REGEDIT4
[HKEY_CLASSES_ROOT\doc_auto_file]
@="Hasecorp Word Document"
[HKEY_CLASSES_ROOT\doc_auto_file\shell]
[HKEY_CLASSES_ROOT\doc_auto_file\shell\open]
[HKEY_CLASSES_ROOT\doc_auto_file\shell\open\command]
@="\"C:\\openoffice\\oowrite.exe\" %1"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\doc_auto_file]
@="Hasecorp Word Document"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\doc_auto_file\shell]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\doc_auto_file\shell\open]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\doc_auto_file\shell\open\command]
@="\"C:\\openoffice\\oowrite.exe\" %1"
[HKEY_CLASSES_ROOT\.doc]
@="doc_auto_file"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.doc]
@="doc_auto_file"
Para lo cual el fichero $HOME/falso_disco/openoffice/oowrite.exe sería el script de Perl que ha propuesto jamarier (no probado todavía):
#!/usr/bin/perl -w
$fichero=shift; #obtenemos el nómbre del fichero
$fichero=~s(C:)($HOME/.wine/c); #cambio de la ruta del fichero
$fichero=~s(\\)(/)g; #cambio de orientacion de las barras inclinadas
`oowrite $fichero`; #ejecución con el nombre adecuado