Correr programas DOS en Molinux con Dosemu

Molinux

Aunque parezca mentira, no pocas empresas u oficinas tienen algún programa DOS hecho a medida que las hacen depender de MS-DOS, y por tanto de MS Windows. Esto puede ser un gran problema a la hora de una posible migración a GNU/Linux. Con esta receta aprenderemos cómo ejecutar estos programas en una Molinux Sancho gracias al emulador dosemu.

Instalación de dosemu

Dosemu es un emulador de DOS para GNU/Linux, licenciado bajo la GPL, que permite correr un DOS (MS-DOS, FreeDOS...) y aplicaciones DOS. Utilizaremos además FreeDOS. FreeDOS es un proyecto que aspira a crear un sistema operativo libre que sea totalmente compatible con las aplicaciones y los controladores de MS-DOS.

Ni dosemu ni FreeDOS están en los repositorios de Molinux Sancho, así que añadire unos repositorios de Ubuntu Breezy (no olvides que Sancho es en realidad una Breezy). Para ello debes editar el fichero /etc/apt/sources.list y añadir la siguiente línea:

deb http://archive.ubuntu.com/ubuntu breezy main multiverse

y ejecutar posteriormente aptitude update como de costumbre. A continuación instala los paquetes:

  • dosemu
  • dosemu-freedos
  • xfonts-dosemu

sudo aptitude install dosemu dosemu-freedos xfonts-dosemu

Ajustes post-instalación

El paquete es casi perfecto, sólo necesita un par de ajustes para tener dosemu completamente operativo y funcional.

Violación de segmento al ejecutar dosemu

Si al ejecutar Dosemu te da una violación de segmento con el siguiente error:

ERROR: cpu exception in dosemu code outside of VM86()!
trapno: 0x0e  errorcode: 0x00000004  cr2: 0x468a5b2d
eip: 0x468a5b2d  esp: 0xbf8fffc5  eflags: 0x00210286
cs: 0x0073  ds: 0x007b  es: 0x007b  ss: 0x007b
Page fault: read instruction to linear address: 0x468a5b2d
CPU was in user mode
Exception was caused by non-available page
/usr/bin/dosemu: line 218: 16058 Violación de segmento  $SUDO $BINARY $XFLAG "$@"

es un problema con versiones del kernel Linux posteriores a la 2.6.12. Es debido a cambios en la ¿generación de direcciones virtuales? (virtual address randomization) del kernel. La solución es ejecutar

sudo echo 0 > /proc/sys/kernel/randomize_va_space

la primera vez que ejecutes dosemu. Lo ideal es hacer un script y ponerlo en el arranque de la máquina.

Cuando ejecuto xdosemu no encuentra la fuente vga, y muchos carácteres están mal

Si miras el contenido del paquete xfonts-dosemu:

[00:11:47][david@minipimer]:~$ dpkg -c /var/cache/apt/archives/xfonts-dosemu_1.2.1-3_all.deb
drwxr-xr-x root/root         0 2004-10-06 16:23:25 ./
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./etc/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./etc/X11/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./etc/X11/fonts/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./etc/X11/fonts/misc/
-rw-r--r-- root/root       425 2003-06-23 02:02:07 ./etc/X11/fonts/misc/xfonts-dosemu.alias
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/X11R6/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/X11R6/lib/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/misc/
-rw-r--r-- root/root      4626 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/misc/vga.pcf.gz
-rw-r--r-- root/root      5648 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/misc/dosemu-vga11x19.pcf.gz
-rw-r--r-- root/root      4783 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/misc/vga-cp866.pcf.gz
-rw-r--r-- root/root      5255 2004-10-06 16:23:24 ./usr/X11R6/lib/X11/fonts/misc/vga10x20-cp866.pcf.gz
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/share/
drwxr-xr-x root/root         0 2004-10-06 16:23:24 ./usr/share/doc/
drwxr-xr-x root/root         0 2004-10-06 16:23:25 ./usr/share/doc/xfonts-dosemu/
-rw-r--r-- root/root      3740 2004-10-06 16:22:27 ./usr/share/doc/xfonts-dosemu/copyright
-rw-r--r-- root/root     93715 2004-03-06 15:03:08 ./usr/share/doc/xfonts-dosemu/changelog.gz
-rw-r--r-- root/root      6490 2004-10-06 16:22:27 ./usr/share/doc/xfonts-dosemu/changelog.Debian.gz

observarás que el fichero de la fuente vga lo guarda en el directorio /usr/X11R6/lib/X11/fonts/misc/. Por defecto Molinux no busca fuentes ahí:

[00:12:46][david@minipimer]:~$ grep misc /etc/X11/xorg.conf
FontPath "/usr/share/X11/fonts/misc"

La solución es por tanto sencilla; debes añadir la línea

        FontPath        "/usr/X11R6/lib/X11/fonts/misc/"

justo después de la línea que nos salió anteriormente. Reinia el servidor X posteriormente.

Invocación

Si ejecutamos dosemu desde una emulación del terminal tendremos bastantes menos problemas que si lo hiciésemos desde un terminal normal y corriente. Además, dependiendo del programa, será posible que necesitemos derechos de superusuario para acceder a determinados puertos y tal.

Para programas DOS normales, la mejor solución sin duda será usar xdosemu:

$ xdosemu programa.exe

porque nos ahorraremos un montón de problemas tanto de carácteres como de tamaño del terminal y demás. xdosemu de hecho nos abre una ventana con el programa DOS al igual que si lo hubiésemos ejecutado en MS Windows.

Referencias

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de magmax

Mi problema es el touchpad

Hola!!

No te preocupes por la edición múltiple. Es la ventaja de usar Drupal.

De cara a tu artículo, tengo un problemilla: mi ratón no quiere funcionar con dosemu. No hay manera, y siempre me toca reiniciar las X. ¿Alguien sabe cómo hacer funcionar el touchpad con dosemu?

Miguel Ángel García
http://magmax.org

Imagen de Geronimo

Creo que hay algún problema

Creo que hay algún problema con la previsualización de las entradas en las bitácoras porque no me salía el artículo entero excepto el título. Ahí la razón de editar el artículo n veces, perdón por el porculo al administrador porque va a ver las n ediciones en los logs de Drupal O:-)

Por ahí he puesto una traducción entre interrogaciones, no sé si está bien así. ¿Cómo se debería traducir?

¡Bytes! Smiling