www.linux.org.ru
Назад Вперед Оглавление

2. Параметры конфигурации

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.

2.1 Формат /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

Поддержка X

Когда 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'

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)# задержка перед печатью

Работа с сетью под DOSEMU

Включите следующий параметр в '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)
                          # (пока не реализовано)


Назад Вперед Оглавление
Перевод: Валерий Груздев (grue@vpti.vladimir.ru)