Запуск DOS-приложения в Linux
Необходимость запуска DOS-приложений под Linux возникает нечасто, но случается. Вот как-то и со мной случилось, решил поделиться опытом, может, кому пригодится.
А нужно было запустить кем-то, когда-то написанное приложение для поликлиники, работающее на Foxpro под DOSом, в Linux, т.к. денег на покупку Windows лицензий не нашлось.
Исходные данные:
Suse Linux Enterprise Desktop 10.3 — рабочие станции.
Suse Linux Enterprise Server 10.3, на нем шара на Samba (я же до этого и расшаривал для работы с Windows рабочих станций, т.к. на лицензию для Win-сервака тоже денег не было), имя шары, как ни странно, — SHARE.
Происходило всё 2-3 года назад, поэтому версии SLED и SLES на момент установки были не такие уж и древние.
Т.к. сервер уже настроен, то все нижеописанные манипуляции производим на десктопе.
Ставим из репозитория, или отдельно скачиваем dosemu-xxx.rpm.
Ещё нам понадобятся кириллические шрифты (далее по тексту папка XFonts), не помню уже где я их взял, приложу в архиве к статье.
Создаём папку, куда смонтируем шару, прописываем монтирование в fstab и монтируем:небольшое пояснение: 192.168.0.130 — IP сервера, user и userpassword берём из пользователей на сервере, которым разрешён доступ к Samba-шаре.su mkdir /mnt/dos chmod 777 /mnt/dos echo "//192.168.0.130/SHARE /mnt/dos cifs iocharset=utf8,codepage=cp866,noperm,forcemand,direct,nounix,nolock,username=user,password=userpassword,rw 0 0" >> /etc/fstab mount /mnt/dos
Дальше копируем шрифты:прописываем папку подобно остальным шрифтам в файле /etc/X11/xorg.conf, и добавляем их в систему командой:cp -rf XFonts /usr/X11R6/lib/X11/fonts/
/usr/sbin/fonts-config
В /etc/dosemu.conf добавляем или изменяем в соответствующих разделах следующие опции (у меня в итоге только эти опции и остались):
## Terminal related settings # Character set used externally to dosemu $_external_char_set = "utf8" #кодировка в Linux # Character set used by dos programs $_internal_char_set = "cp866" #кодировка в DOS ## Keyboard related settings $_layout = "ru" #задаём раскладку ## Printer and parallel port settings $_lpt1 = "lp -o media=a4 -o cpi=11" #подключаем принтер, в моём случае матричник на LPT порту #или #$_lpt1 = "iconv -f cp866 -t utf8 | lp -o media=a4 -o cpi=11 -d printername" ## Setting specific to the X Window System (xdosemu, dosemu -X) $_X_font = "vgacyr" #подключаем кириллические шрифты
В файл autoexec.bat, находящийся в папке /usr/share/dosemu/drive_z пишем следующее (!!! при копировании # и пояснения убрать!!!):
@echo off rem autoexec.bat for DOSEMU + FreeDOS path z:\bin;z:\gnu;z:\dosemu;p:\ovl1;p:\ovl;p:\prv # ovl1;p:\ovl;p:\prv - папки запуска программы в DOS; set HELPPATH=z:\help set TEMP=c:\tmp blaster prompt $P$G unix -s DOSDRIVE_D if "%DOSDRIVE_D%" == "" goto nodrived lredir d: linux\fs%DOSDRIVE_D%:nodrived lredir p: linux\fs/mnt/dos # назначение соответствия папки Linux диску DOS unix -s DOSEMU_VERSION echo "Welcome to dosemu %DOSEMU_VERSION%!" unix -e xmode -fullscreen on # запуск Dosemu в полноэкранном режиме lin.bat # батник запуска программы в DOS
Для полной ясности вот содержание lin.bat (!!! при копировании # и пояснения убрать!!!):
@ echo off p: # переходим на диск p: cd ovl1 # далее в рабочую папку p:\ovl1\reg01.fxp # запускаем программу (расширение .fxp у меня, у Вас скорее всего будет .exe, если не Foxpro) xmode -fullscreen off # после окончания работы программы выходим из полноэкранного режима exitemu # выходим из досэмулятора
Делаем первый запуск, командем:получим фигвам, потому что нет файла lin.bat, исправляем созданием в домашней директории, в папке .dosemu/drive_c (папка создаётся при первом запуске эмулятора) этого файла с вышеприведённым содержанием.dosemu
Ещё раз запускаем dosemu и вуаля, наша досовская прога работает, показывает текст на русском языке и даже распечатывает под Linux.
Мои изыски относились к определённой программе, но, думаю, таким способом, с заменой путей и имён файлов, запустятся если не все, то многие приложения работающие под DOS.
P.S.
Если при запуске dosemu ловим:
>LOWRAM mmap: Недопустимый аргумент
То дописываем в /etc/sysctl.conf
vm.mmap_min_addr=0
Ну и перезагружаемся.
Обещанный архив.
суббота, 10 октября 2015 г.
Запуск DOS-приложения в Linux / Хабрахабр
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий