This section of the document by Hans, <lermen@fgan.de>. Last updated on January 31, 1998.
Основную часть конфигурирования DOSEMU производит при запуске, и по умолчанию ищет общесистемную конфигурацию в файле /etc/dosemu.conf, которая может быть дополнена пользовательской в /.dosrc и дополнительными параметрами командной строки (ключ -I). Встроенная конфигурация DEXE-программ передается с использованием техники -I, и использует те же правила, что и ключ -I.
На самом деле /etc/dosemu.conf входит как составная часть в глобальный конфигурационный скрипт /var/lib/dosemu/global.conf, но нормальному пользователю не стоит даже задумываться о его редактировании, достаточно одного dosemu.conf Структура файла global.conf детально описана в README-tech.txt, и здесь опущена. Однако, /.dosrc и -I используют тот же синтаксис, поэтому, если вы делаете нечто особое (после того, как достаточно познакомились с DOSEMU), вам может потребоваться заглянуть и туда.
Первым ищется (и интерпретируется до любого другого конфигурационного файла, например, global.conf или dosemu.conf) файл /etc/dosemu.users. В нем устанавливаются основные права:
Каждая строка в dosemu.user соответствует ровно одному пользователю, специальный пользователь 'all' обозначает любого ранее не упомянутого пользователя. Формат:
[ <login> | all ] [ confvar [ confvar [ ... ] ] ]
Ниже приведен пример из etc/dosemu.users.secure, который можно скопировать в /etc/dosemu.users.
root c_all # root-у можно все
nobody guest # переменная 'guest' помечена в global.conf
# to allow only DEXE execution
guest guest # пользователь guest аналогичен `nobody'
all restricted # все остальные имеют стандартные ограничения
Отметим, что 'restricted' проверяется в global.conf и отключает все
возможности, могущие повлиять на безопасность. Установка 'guest'
автоматически устанавливает 'restricted'.
Тем не менее, при первом знакомстве с DOSEMU лучше использовать etc/dosemu.users.easy, который содержит просто
root c_all
all c_all
и позволяет все всем. Подробнее о безопасности читайте во второй главе
README-tech.txt.
После /etc/dosemu.users интерпретируется /etc/dosemu.conf (через global.conf) и только при анализе global.conf дается доступ ко всем параметрам конфигурации.
dosemu.conf (global.conf) проверяет переменные конфигурации, установленные в etc/dosemu.users и может при необходимости включать дополнительные файлы конфигурации. Но как только интерпретация /etc/dosemu.conf (global.conf) закончена, при последующей интерпретации .dosrc и параметров ключа -I доступ к элементам, влияющим на безопасность, ограничивается сообразно классу доступа.
Подробности настройки и функционирования системы безопасности смотрите в README-tech.txt, а пока вам понадобится только описание /etc/dosemu.conf.
Все установки в dosemu.conf - это просто переменные, которые интерпретируются в /var/lib/dosemu/global.conf и имеют вид
$_xxx = (n)
или
$_zzz = "s"
где 'n' это числовое или булевское значение, а 's' - строка. Учтите, что скобки нужны, т.к. иначе парсер не сможет разобрать числовое выражение. Для чисел можно использовать выражения ( например, (2*1024) ), а строки могут сливаться (конкатенироваться) как в этом примере:
$_zzz = "This is a string containing '", '"', "' (quotes)"
Здесь конкатенируется список строк, разделенных запятыми.
DOSEMU поможет вам найти ошибки, если вы включите отладочную информацию. Она будет выводиться в файл, определенный опциями '-o file' либо '-O' (в последнем случае выводит в stderr). В dosemu.conf можно предустановить этот параметр через
$_debug = "-a"
где строка содержит то, что обычно передается через ключ командной строки
'-D' (подробнее см. man).
Чтобы задействовать прерывания таймера типа INT08, установите параметр в on или off
$_timint = (on)
Показывать ли сопроцессор задачам DOS
$_mathco = (on)
Какой тип процессора эмулировать (ВНИМАНИЕ: это не обязательно тот, на котором вы работаете, но установки не должны превышать возможности имеющегося CPU). Разрешенные значения: 80(345)86
$_cpu = (80386)
Чтобы позволить DOSEMU использовать счетчик циклов Pentium для лучшей обработки времени
$_rdtsc = (on) # or off
Для использования 'rdtsc' DOSEMU нужно знать точную тактовую частоту CPU. Обычно она определяется автоматически, но в случае ошибок можно указать ее явно:
$_cpuspeed = (166.666) # 0 = разрешить определение DOSEMU
Если у вас есть карта PCI, вы можете разрешить DOSEMU доступ к конфигурированию PCI
$_pci = (on) # or off
Распределение памяти, которое видно DOS-у:
$_xms = (1024) # in Kbyte
$_ems = (1024) # in Kbyte
$_ems_frame = (0xe000)
$_dpmi = (off) # in Kbyte
$_dosmem = (640) # in Kbyte, < 640
Учтите, что (в отличие от настоящего DOS) эти сегменты памяти выделяются
по-отдельности, поэтому DOS, вероятно, покажет другие значения для
'расширенной' памяти. Включение DPMI и выделение ему памяти может вызвать
проблемы с безопасностью, поэтому следует либо не давать доступа к
DOSEMU обычным пользователям (через /etc/dosemu.users), либо присвоить им
аттрибут 'restricted' (см. выше).
У DOSEMU есть некоторые возможности, которые могут нарушить систему безопасности и которые поэтому не следует использовать на "открытых" машинах. Для хотя бы минимальной защиты используйте следующее:
$_secure ="ngd" # secure for: n (normal users), g (guest), d (dexe)
# empty string: depending on 'restricted'
В строке выше указано то, что может присутствовать либо отсутствовать, например
$_secure ="d"
будет влиять только на выполнение DEXE-файлов. Если вы не относитесь к
'restricted' пользователям (что задается в /etc/dosemu.users), эти
установки действовать не будут.
Чтобы полностью отключить проверки на безопасность установите
$_secure ="0"
Аналогично можно "вычеркнуть" какой-либо хост, с которого нежелательно давать доступ к DOSEMU
$_odd_hosts = "" # черный список вида
# "lucifer.hell.com billy.the.cat"
$_diskless_hosts="" # черный список "hacker1 newbee gateway1"
Элементы в списке разделяются пробелами, "odd_hosts" - проверка на
удаленный логин, 'diskless_hosts' означает машины, которые монтируют
полное дерево каталогов, следовательно, указанный компьютер - тот, на
котором работает dosemu, а не удаленный. Подробнее читайте в README-tech.txt .
Если вы хотите иметь смешанный доступ к файловой системе, с которой запускается dosemu ("натуральный" и через dosemu), может потребоваться два отдельных набора из 'config.sys,autoexec.bat,system.ini'. DOSEMU умеет подменять расширения имен файлов, поэтому DOS получит другие файлы при запуске из-под эмулятора.
$_emusys = "" # empty or 3 char., config.sys -> config.XXX
$_emubat = "" # empty or 3 char., autoexec.bat -> autoexec.XXX
$_emuini = "" # empty or 3 char., system.ini -> system.XXX
Как можно заметить с первого взгляда, DOS не получит CPU в собственное распоряжение. А как много ему отдаст Linux, зависит от параметра 'hogthreshold'. Его значение определяет, насколько Dosemu будет любезно предоставлять возможность выполнения другим программам.
$_hogthreshold = (1) # 0 == максимум для DOSEMU
# 1 == максимум для Linux
# >1 чем выше, тем медленнее DOSEMU
Если у вас есть оборудование, не поддерживаемое Linux, но для которого есть DOS-драйвер, то может потребоваться разрешить передачу IRQ в DOS
$_irqpassing = "" # список номеров IRQ (2-15) для передачи DOS
# например,"3 8 10"
Здесь вы сообщаете dosemu что делать, когда DOS захочет сыграть на спикере:
$_speaker = "" # or "native" or "emulated"
При помощи следующих установок можно получить управление реальными портами машины. Но: ВНИМАНИЕ: РАЗРЕШЕНИЕ ДОСТУПА К ПОРТАМ НАРУШАЕТ БЕЗОПАСНОСТЬ, КРОМЕ ТОГО, НЕКОТОРЫЕ ПОРТЫ ОПАСНО ИСПОЛЬЗОВАТЬ. ПРОПУСТИТЕ ЭТОТ РАЗДЕЛ И НЕ ИЗМЕНЯЙТЕ НИЧЕГО В ЭТОЙ СЕКЦИИ, ЕСЛИ НЕ УВЕРЕНЫ АБСОЛЮТНО В ТОМ, ЧТО ДЕЛАЕТЕ.
$_ports = "" # список портов, например "0x1ce 0x1cf 0x238"
# или "0x1ce range 0x280,0x29f 310"
# или "range 0x1a0,(0x1a0+15)"
Этот раздел отностися к запуску dosemu на удаленной машине или в xterm. Теперь поддержка цветных терминалов встроена в DOSEMU. Этот раздел стоит пропустить и пользоваться установками по умолчанию, пока не настроите DOSEMU.
$_term_char_set = "" # отсутствие == automatic, иначе 'ibm' или 'latin'
$_term_color = (on) # терминал с поддержкой цвета
$_term_updfreq = (4) # промежуток между обновлениями (единицы: 20 ==1 секунда)
$_escchar = (30) # 30 == Ctrl-^, special-sequence prefix
'term_updfreq' - это число, обозначающее частоту обновления экрана терминала. Чем меньше число, тем чаще это происходит. Значение 20 дает частоту 1 раз в секунду, что очень мало. 'escchar' - число (ascii код меньше 32) задающее управляющий символ, используемый как префикс при посылке alt, shift, ctrl и функциональных клавиш. По умолчанию используется 30, т.е. Ctrl-ˆ. Например:
F1 is 'Ctrl-^1', Alt-F7 is 'Ctrl-^s Ctrl-^7'.
For online help, press 'Ctrl-^h' or 'Ctrl-^?'.
При запуске DOSEMU из консоли (в том числе удаленной) или X может понадобиться определить подходящую раскладку клавиатуры. Это делается либо выбором одной из внутренних таблиц клавиатуры, либо загрузкой внешной таблицы из /var/lib/dosemu/keymap/* (котоые вы можете модифицировать под свои нужды). Оба набора имеют одинаковые имена (хотя в /var/lib/dosemu/keymap/ вы можете добавлять свои):
be es-latin1 hu-latin2 sg
de finnish it sg-latin1
de-latin1 finnish-latin1 keyb-no sw
dk fr no-latin1 uk
dk-latin1 fr-latin1 po us
dvorak hu sf
es hu-cwi sf-latin1
Внутренняя таблица клавиатуры определяется как:
$_layout = "name"
где 'name' - одно из определенных выше. Для загрузки внешней таблицы нужно
префикс load:
$_layout = "load de-latin1"
Обратите внимание, что потребуется установить
$_X_keycode = (on)
для использования этих возможностей под X, поскольку по умолчанию
устанавливается нейтральная (us) клавиатура. Обычно правильные
установки клавиатуры выдаются X-сервером.
На консоли может потребоваться непосредственный доступ к клавиатуре, особенно для игр, которые не используют BIOS/DOS для обработки нажатий.
$_rawkeyboard = (1)
Однако, будте внимательны, если приложение зависнет, у вас может не
получиться переключить консоль и выйти из этой ситуации. Детали
восстановления см. в README-tech.txt (раздел Recovering the console after
a crash).
'keybint (on)' позволяет более аккуратную обработку прерываний клавиатуры. Этот режим немного нестабилен, но клавиатура работает заметно лучше, когда он включен.
$_keybint = (on) # emulate PCish keyboard interrupt
Когда dosemu работает в собственном X-окне (не в xterm), может потребоваться дополнительная настройка. Далее следует список установок и краткое описание их назначения. Более подробное описание можно найти в главе 2.2.14 (X Support settings) файла README-tech.txt
$_X_updfreq = (5) # интервал обновления (единицы: 20 == 1 секунда)
$_X_title = "DOS in a BOX" # Заголовок окна программы
$_X_icon_name = "xdos" # Текст минимизированной иконки
$_X_keycode = (off) # on == трансляция клавиатурных кодов через таблицы dosemu
$_X_blinkrate = (8) # частота мерцания курсора
$_X_font = "" # basename from /usr/X11R6/lib/X11/fonts/misc/*
# (without extension) e.g. "vga"
$_X_mitshm = (on) # Использовать разделяемую память
$_X_sharecmap = (off) # использовать общую палитру с другими задачами
$_X_fixed_aspect = (on) # Сохранять отношение сторон при растягивании окна
$_X_aspect_43 = (on) # Использовать отношение сторон 4:3 в графике
$_X_lin_filt = (off) # Линейная фильтрация для >15 bpp interpol.
$_X_bilin_filt = (off) # Билинейная фильтрация для >15 bpp interpol.
$_X_mode13fact = (2) # начальный множитель для видеорежима 0x13 (320x200)
$_X_winsize = "" # "x,y" начального размера окна
$_X_gamma = (1.0) # коэффициент гамма-коррекции
$_X_vgaemu_memsize = (1024) # размер (в Kbytes) фрейм-буфера
# для эмуляции vga
$_X_lfb = (on) # использовать линейный фрейм-буфер для VESA режимов
$_X_pm_interface = (on) # использовать protected mode interface для VESA режимов
$_X_vesamode = "" # "xres,yres ... xres,yres"
# Список добавляемых vesa режимов. Представляет
# собой разделенный запятыми список пар "xres,yres"
!!ВНИМАНИЕ!!: ЕСЛИ ВЫ ВКЛЮЧИТЕ ГРАФИКУ НА НЕСОВМЕСТИМОМ АДАПТЕРЕ, ТО МОЖЕТЕ ПОЛУЧИТЬ ПУСТОЙ ЭКРАН ИЛИ МУСОР ДАЖЕ ПОСЛЕ ВЫХОДА ИЗ DOSEMU. См. в README-tech.txt (раздел Recovering the console after a crash).
Начинайте в текстовом режиме, используя следующие установки в dosemu.conf
$_video = "vga" # один из: plainvga, vga, ega, mda, mga, cga
$_console = (0) # использовать видео на консоли
$_graphics = (0) # использовать BIOS карты для установки режима
$_videoportaccess = (1) # разрешить доступ к видеопорту в граф. режиме
$_vbios_seg = (0xc000) # адрес видео-BIOS (e.g. 0xe000)
$_vbios_size = (0x10000)# размер BIOS (e.g. 0x8000)
$_vmemsize = (1024) # размер буфера регенерации
$_chipset = ""
$_dualmon = (0) # если у вас один vga _и_ один hgc (2 монитора)
После того, как это заработает, и если у вас поддерживаемая DOSEMU видеокарта, можно переключиться в графику изменив настройку так:
$_graphics = (1) # использовать BIOS карты для установки режима
Если у вас 100% совместимая с VGA карта, это может работать, но лучше результат будет, если вашу карту поддерживает DOSEMU, и вы скажете ему об этом:
$_chipset = "s3" # одна из: plainvga, trident, et4000, diamond,
# avance, cirrus, matrox, wdvga, paradise
S3 - это только пример, вы должны установить правильный тип, иначе скорее всего снесете себе видеорежим.
Установки параметров в dosemu.conf подгоняются под рекомендованное использование диска и доступа к ГМД. Существуют и другие способы, подробнее о них можно посмотреть в README-tech.txt (и может потребоваться модификация global.conf). Мы настоятельно рекомендуем использовать предлагаемый здесь подход. Вот типовые установки:
$_vbootfloppy = "" # для загрузки с виртуальной дискеты:
# имя образа диска в /var/lib/dosemu
$_floppy_a ="threeinch" # или "fiveinch" или пусто, если отсутствует
$_floppy_b = "" # то же для B:
$_hdimage = "hdimage.first" # список образов диска в /var/lib/dosemu
# расположенных в порядке
# "hdimage_c hdimage_d hdimage_e"
$_hdimage_r = $_hdimage # образы дисков для режима 'restricted' (если они отличаются)
При установке DOSEMU (make install) в файл /var/lib/dosemu/hdimage.first записывается образ загрузочного диска. Он содержит урезанную вырсию FreeDos, просто для демонстрации работоспособности. Это файл, содержащий виртуальный образ файловой системы DOS-FAT. Загрузившись с него, вы (или autoexec.bat) можете использовать 'lredir' для доступа к любому каталогу Linux как к досовскому диску (в том числе и к примонтированным через -t msdos). См. главу 6 (Using lredir), а дополнительные детали создания собственного (лучшего) образа диска см. в главе 4.3 данного README (Making a bootable hdimage for general purpose). Глава 4.4 описывает также, как записывать файлы на образ диска и читать их оттуда.
Теперь, что же означает vbootfloppy? Альтернативой загрузки с виртуального "диска" может служить загрузка с виртуальной "дискеты", которая создается просто командой 'dd if=/dev/fd0 of=floppy_image'. Если это загрузочная дискета DOS, то
$_vbootfloppy = "floppy_image"
будет загружаться как с этой дискеты. После запуска в DOS вы сможете получить доступ к дисководу виртуально "вынув диск" через 'bootoff.com'
Мы уупростили настройку мыши и последовательных портов и проверили зависимости между ними. Если все строки в в примере ниже пусты, то ни мышь, ни последовательные порты не доступны. Учтите, что вам не нужна установка драйвера mouse.com в DOS-е, DOSEMU имеет встроенный драйвер. Ниже приводится пример установки.
$_com1 = "" # т.е. "/dev/mouse" или "/dev/cua0"
$_com2 = "/dev/modem" # т.е. "/dev/modem" или "/dev/cua1"
$_mouse = "microsoft" # одна из: microsoft, mousesystems, logitech,
# mmseries, mouseman, hitachi, busmouse, ps2
$_mouse_dev = "/dev/mouse" # один из: com1, com2 or /dev/mouse
$_mouse_flags = "" # пустой список или один и более из:
# "emulate3buttons cleardtr"
$_mouse_baud = (0) # baudrate, 0 == не устанавливать
Этот пример позволяет работать модему на COM2, COM1 свободен (например, в настоящем DOS-е к нему подсоединена мышь, и вы не хотите менять конфигурацию модемных программ при перезагрузках между DOS и Linux)
Тем не менее, вы можете использовать свой любимый досовский драйвер мыши и разрешить ему прямой доступ к COM1 изменив следующие переменные (остальные остаются неизменными)
$_com1 = "/dev/mouse"
$_mouse_dev = "com1"
И наконец, если в Linux работает мышь PS2, используйте встроенный драйвер (не ваш mouse.com). Как и раньше, прочие параметры не меняются:
$_mouse = "ps2"
$_mouse_dev = "/dev/mouse"
Если используется мышь PS2 либо имеется более 2 последовательных портов, можно назначить любое последовательное устройство на COM1 и COM2. Порядок значения не имеет:
$_com1 = "/dev/cua2"
$_com2 = "/dev/cua0"
Принтер эмулируется передачей печатаемых данных на обычный Linux принтер. Настройки ниже говорят DOSEMU, какой из принтеров использовать. 'Timeout' сообщает DOSEMU, сколько времени ждать после последней выдачи в LPT1 перед тем, как счесть работу завершенной и сбросить данные в очередь печати.
$_printer = "lp" # имя (из /etc/printcap) принтера, который будет LPT1
$_printer_timeout = (20)# задержка перед печатью
Включите следующий параметр в 'on' если нужна эмуляция IPX/SPX. Загружать IPX.COM в DOS-сессии не требуется (но эта опция не эмулирует LSL.COM, IPXODI.COM и т.п.). И учтите: ядро должно быть сконфигурировано с поддержкой протокола IPX.
$_ipxsupport = (on)
Разрешение трансляции Novell 8137->raw 802.3 в новом пакетном драйвере.
$_novell_hack = (on)
Если вы используете драйвер dosnet, включите поддержку 'multi' пакетного драйвера:
$_vnet = (on)
Дополнительная информация в главе 24 (Net code)
Звуковой драйвер в настоящее время неработоспособен. Однако, вот установки, которые потребуются для эмуляции SoundBlaster при помощи звуковой подсистемы LINUX.
$_sound = (off) # поддержка звука on/off
$_sb_base = (0x220) # базовый IO-адрес (HEX, шестнадцатеричное)
$_sb_irq = (5) # IRQ
$_sb_dma = (1) # канал DMA
$_sb_dsp = "/dev/dsp" # путь к звуковому устройству
$_sb_mixer = "/dev/mixer" # путь к управлению микшером
$_mpu_base = "0x330" # базовый адрес MPU-401 (HEX)
# (пока не реализовано)