一个功能完整的 Dosemu 需要 suid root 权限,例如才能访问端口。然而,大多数 dos 程序不需要这个权限,因此在 X 环境下运行时,通常不需要以 root 身份运行 dosemu。Dosemu 仅在必要时以 suid “root” 身份运行,并在之后立即释放此权限。但是,使用 DPMI 时,Dos 客户端程序可以访问整个用户空间,因此也可以修改 dosemu 代码本身。在 /etc/dosemu.conf 中使用 'secure' 选项可以禁用此功能。在 README.txt 文件的“安全”部分中讨论了其他几个重要的安全注意事项。
如果您的程序使用 DPMI 并且您没有启用 DPMI,则会发生这种情况。尝试更改行
$_dpmi = (off)在 /etc/dosemu.conf 中为
$_dpmi = (nnnn)其中 nnnn 是您希望分配给 DOS 程序的内存大小(以千字节为单位)(例如,Doom 大约需要 4000 千字节)。如果您这样做,则不应以 root 身份运行 dosemu(请参阅“安全问题”部分) - 在任何情况下,最好不要尽可能以 root 身份运行 dosemu。
另一个可能的原因是您的程序使用 VCPI(有关更多详细信息,请参阅 EMUfailure.txt)或其他一些切换到保护模式的方式(DPMI 除外),在这种情况下,它永远无法在 dosemu 下工作。
如果都不是这种情况,请参阅 1.14 节 我有一个程序失败,但未在 EMUfailure.txt 中列出。
Dosemu 依赖于 hdimage 上的 Dos 版本和您映射的驱动器包含相同的 command.com。如果不是这样,dosemu 迟早会崩溃。使用 Win95 在按下 F4、F5 和 F8 键并显示 “Starting Win95” 文本时提供的双启动选项,Win95 驱动器上的版本可能会交换。请特别注意 command.com。让您的 config.emu 中的 shell 变量指向正确的静态版本的 command.com,例如:shell=c:\win95\command.com c:\ /P /E:1024 (97/02/28)
切换到另一个控制台并键入 dosdebug,然后键入 kill(可能需要一段时间,但最终会起作用)。
Daniel Barlow(jo95004@sable.ox.ac.uk) 报告 (95/4/8):
如果您没有终端或网络访问权限可以用来登录,您可能需要按下复位按钮。如果您仍然可以通过某种方式获得可用的 shell,请运行 “kbd_mode -a
” 以将键盘切换出原始模式,和/或在控制台上运行 “stty sane
”,以便您可以看到您正在键入的内容。
一个有用的方法是使用脚本来运行 dosemu,并在 dosemu 之后立即自动运行 “kbd_mode -a
”。当 dosemu 崩溃时,脚本通常会恢复运行,并执行 “kbd_mode -a
” 命令。
Rob Janssen (rob@pe1chl.ampr.org) 报告 (94/7/11):
不要忘记从 config.sys 文件中加载提供的 ems.sys。
(94/8/11)
获取并安装 klogd
。尝试
sunsite.unc.edu:/pub/Linux/system/Daemons/sysklogd1.2.tgz
Aldy Hernandez (aldy@sauron.cc.andrews.edu) 报告 (94/7/8):
您应该禁用您的视频和/或 BIOS 缓存。
JyiJiin Luo (jjluo@casbah.acns.nwu.edu) 报告 (94/4/19):
我以前也遇到过完全相同的问题。我发现我的 AMI BIOS 中的所有视频阴影都必须禁用。现在 dosemu 在我的系统上运行良好。
在某些情况下,调整 dosemu.conf
文件中 HogThreshold
变量的值很有用。
Daniel Barlow(jo95004@sable.ox.ac.uk) 报告 (95/4/8):
HogThreshold 现在应设置为系统启动时报告的 BogoMips 值的大约一半。
Vinod G Kulkarni (vinod@cse.iitb.ernet.in) 报告 (94/4/7):
当从 linux 挂载 CDROM 并在 dosemu 中使用(映射驱动器)时,可能会出现一些问题。内核中的 CD-ROM 驱动程序 (iso9660) 尝试找出文件的类型(即二进制文件或文本文件)。如果找不到,它会尝试使用启发式方法猜测文件的类型。当(几乎)文本文件被视为二进制文件时,此启发式方法在某些情况下会失败。(我不知道这是一个错误还是一个特性。)
这样做的结果是,如果您从 CD-ROM 复制此类文件(从 linux 本身,而不一定是 dosemu),则生成的文件通常会比原始文件更大。(在 ^J
,^M
之前添加空格。)因此,在 dosemu 中运行的程序会给出错误或挂起,这可能会被误认为是 dosemu 的问题。
Rob Janssen (pe1chl@rabo.nl) 报告 (94/8/10):
解决此问题的方法是完全关闭转换。将选项 “-o conv=binary” 传递给挂载 CD-ROM 的 mount 命令,或在 /etc/fstab 中使用以下内容
/dev/cdrom /cdrom iso9660 conv=binary,ro不需要对内核进行任何补丁。
Daniel Barlow(jo95004@sable.ox.ac.uk) 报告 (95/4/8):
从 dosemu 0.60 开始,调试输出被重定向到命令行上指定的文件。使用 “dos -D+a -o /tmp/debug” 将所有调试输出记录到 /tmp/debug。不再需要重定向 stderr
。
Nick Holloway (alfie@dcs.warwick.ac.uk) 报告 (94/2/22):
在玩过一些 stty 设置后运行 dos,我得到了双重按键。我现在可以揭示原因了!
它仅在 dos 在控制台上以设置 'istrip' 的情况下运行时发生。这是(我认为)因为原始扫描码被 'istrip' 破坏,因此按键释放事件看起来像按键按下事件。
因此,在使用控制台上的扫描码时,需要关闭输入处理(对于 tty 行来说,这样做不是一个好主意)。
对于那些在 dosemu 中未完全支持的显卡,如果允许控制台图形,dosemu 崩溃可能会使您的控制台处于混乱且几乎无法使用的状态。为了应对这种情况,Spudgun <spudgun@earthlight.co.nz> 发布了以下解决方案。首先,在控制台上运行时保存您的寄存器 ~> cat /usr/bin/savetextmode ~> restoretextmode -w /etc/textregs ~> restorefont -w /etc/fontdata 然后,当崩溃发生时,运行以下脚本:restoretextmode -r /etc/textregs restorefont -r /etc/fontdata restorepalette
如果它不能修复它,那就没什么能修复了 我还发现运行 X 服务器有时会将我的显卡寄存器置于一种奇怪的状态,在这种状态下,此脚本使情况变得更糟,我认为自从更改 X 服务器和/或在 X 运行时在 vt 上运行 savetextmode 之后,情况有所改善。(97/04/08)
FoxPro 2.6 无法在网络驱动器上运行。Alexey Naidyonov <growler@growler.tsu.tula.ru> 在这个问题上指出:我猜您的 FoxPro 文件在 lredir'ed 磁盘上,是吗?问题是 FoxPro 在这样的磁盘上无法运行,但是当我在 /etc/dosemu/conf 中说 disk { partition ... } 时,它可以运行。