Wine 用户指南(三)

发表于:2007-07-04来源:作者:点击数: 标签:
Wine 用户指南(三) 翻译:寒蝉退士 译者声明:译者对译文不做任何形式的担保,译者对译文不拥有任何权利并且不负担任何义务。 原文: http://www.winehq.com/Docs/wine-user/ 第 3 章. 安装/编译 Wine 目录 3.1. WWN #52 特征: 替代 Windows 3.2. 安装 Win

Wine 用户指南(三)

翻译:寒蝉退士
译者声明:译者对译文不做任何形式的担保,译者对译文不拥有任何权利并且不负担任何义务。
原文:http://www.winehq.com/Docs/wine-user/

    第 3 章. 安装/编译 Wine
    目录
    3.1. WWN #52 特征: 替代 Windows
    3.2. 安装 Wine 而无须 Windows
    3.3. 处理 FAT/VFAT 分区
    3.4. SCSI 支持
    如何安装 Wine...


    
    3.1. WWN #52 特征: 替代 Windows
    编写: Ove K鍁en <ovek@winehq.com>
   
    3.1.1. 安装概述
    一个 Windows 安装由许多不同部分组成。
    ★ 注册表。即使在一个新安装的 Windows 系统中,都假定存在许多键并包含着有意义的数据。
   
    ★ 目录结构。应用程序期望在指定的预先决定的位置找到和/或安装东西。期望多数这些目录存在。但与 Unix 目录结构不同,多数这些位置是硬编码的(hardcode),并通过 Windows API 和注册表来查找。在 Wine 安装上这提出了额外的要求。
   
    ★ 系统 DLL。在 Windows 中,它们通常驻留在 system (或 system32)目录中。一些 Windows 应用程序在尝试装载它们之前在这些目录中检查它们的存在。当应用程序要求一个 DLL 而 Wine 不能装载它们自己的内部 DLL(.so 文件)时,Wine 不模拟不存在文件的存在。
   
    ★ 尽管用户可以自由的自己设置所有的东西,Wine 小组仍将制作自动 Wine 安装脚本 tools/wineinstall,做我们认为必要的所有事情;除非你知道正在做什么,否则不推荐运行常规的 configure && make depend && make && make install 周期。此时,可使用 tools/wineinstall 来建立一个配置文件、安装注册表、并建立自己的目录结构。
   
    3.1.2. 注册表
    缺省的注册表在文件 winedefault.reg 中。它包含目录路径、类 ID、及其他东西;在多数 INSTALL.EXE 或 SETUP.EXE 运行之前必须安装它。在以前的文章中有对注册表非常详细的介绍。
   
    3.1.3. 目录结构
    下面是 Windows 应用程序和安装器所期望的基本格局。没有它,这些程序不能正确操作。 
    C:            主磁盘驱动器的根目录
    Windows       Windows 目录,包含 .INI 文件、附件等
    System        Win3.x/95/98/ME 给公用 DLL 的目录 WinNT/2000 给公用 16-bit DLL 的目录
    System32      WinNT/2000 给公用 32-bit DLL 的目录
    Start Menu    程序启动项目录结构
    Programs      到应用程序的程序启动项连接(.LNK 文件)
    Program Files 应用程序二进制文件(.EXE 和 .DLL 文件)
     
    Wine 通过把它们的虚拟驱动器根放置到 Unix 文件系统中用户可配置点上来模拟驱动器,所以你自己选择 C: 的根应该在哪(tools/wineinstall 会问你的)。如果你选择了,比如 /var/wine 作为你的虚拟驱动器 C 的根,则你应该把它放置到你的 ~/.wine/config 文件中:
   
    [Drive C]
    "Path" = "/var/wine"
    "Type" = "hd"
    "Label" = "MS-DOS"
    "Filesystem" = "win95"

    使用这个配置,被 windows 应用程序当作为 "c:windowssystem" 的目录将被映射为 UNIX 文件系统中的 /var/wine/windows/system 。注意你必须指定 "Filesystem" = "win95" 而不是 "Filesystem" = "unix",来使 Wine 模拟 Windows-相容的(大小写不敏感)文件系统,否则多数应用程序将不能工作。
   
    3.1.4. 系统 DLL
    Wine 小组决定需要建立伪 DLL 文件来欺骗那些通过检查文件存在来确定是否可获得一个特征(比如 Winsock 和它的 TCP/IP 连网)的应用程序。如果你也有这个问题,你可以在 system 目录中建立一个空文件来让应用程序认为它存在,而在应用实际要求它的时候 Wine 将装载它的内置的 DLL。(不幸的是, tools/wineinstall 自身不建立这样的空文件。)
   
    应用程序有时还尝试从物理文件中检查资源的版本(例如,要确定 DirectX 版本)。在这种情况下空文件就不起作用了,必须有完整版本资源的安装文件。当前正在处理这个问题。目前,你仍需获取一些真实的 DLL 来欺骗这些应用程序。
   
    对于那些 wine 目前未很好实现(或根本未实现)的 DLL。如果不拥有一个真实的 Windows,则有的人将会窃取所需的 DLL,总是可以从象 http://solo.abac.com/dllarchive/ 这样的地方得到一个 DLL 归档。

    第 3 章. 安装/编译 Wine
    目录
    3.1. Wine 特征: 替代 Windows
    3.2. 安装 Wine 而无须 Windows
    3.3. 处理 FAT/VFAT 分区
    3.4. SCSI 支持
    如何安装 Wine...
   
    3.1. Wine 特征: 替代 Windows
    编写: Ove K鍁en <ovek@winehq.com>
   
    3.1.1. 安装概述
    一个 Windows 安装由许多不同部分组成。
    ★ 注册表。即使在一个新安装的 Windows 系统中,都假定存在许多键并包含着有意义的数据。
   
    ★ 目录结构。应用程序期望在指定的预先决定的位置找到和/或安装东西。期望多数这些目录存在。但与 Unix 目录结构不同,多数这些位置是硬编码的(hardcode),并通过 Windows API 和注册表来查找。在 Wine 安装上这提出了额外的要求。
   
    ★ 系统 DLL。在 Windows 中,它们通常驻留在 system (或 system32)目录中。一些 Windows 应用程序在尝试装载它们之前在这些目录中检查它们的存在。当应用程序要求一个 DLL 而 Wine 不能装载它们自己的内部 DLL(.so 文件)时,Wine 不模拟不存在文件的存在。
   
    ★ 尽管用户可以自由的自己设置所有的东西,Wine 小组仍将制作自动 Wine 安装脚本 tools/wineinstall,做我们认为必要的所有事情;除非你知道正在做什么,否则不推荐运行常规的 configure && make depend && make && make install 周期。此时,可使用 tools/wineinstall 来建立一个配置文件、安装注册表、并建立自己的目录结构。
   
    3.1.2. 注册表
    缺省的注册表在文件 winedefault.reg 中。它包含目录路径、类 ID、及其他东西;在多数 INSTALL.EXE 或 SETUP.EXE 运行之前必须安装它。在以前的文章中有对注册表非常详细的介绍。
   
    3.1.3. 目录结构
    下面是 Windows 应用程序和安装器所期望的基本格局。没有它,这些程序不能正确操作。 
    C:            主磁盘驱动器的根目录
    Windows       Windows 目录,包含 .INI 文件、附件等
    System        Win3.x/95/98/ME 给公用 DLL 的目录 WinNT/2000 给公用 16-bit DLL 的目录
    System32      WinNT/2000 给公用 32-bit DLL 的目录
    Start Menu    程序启动项目录结构
    Programs      到应用程序的程序启动项连接(.LNK 文件)
    Program Files 应用程序二进制文件(.EXE 和 .DLL 文件)
     
    Wine 通过把它们的虚拟驱动器根放置到 Unix 文件系统中用户可配置点上来模拟驱动器,所以你自己选择 C: 的根应该在哪(tools/wineinstall 会问你的)。如果你选择了,比如 /var/wine 作为你的虚拟驱动器 C 的根,则你应该把它放置到你的 ~/.wine/config 文件中:
   
    [Drive C]
    "Path" = "/var/wine"
    "Type" = "hd"
    "Label" = "MS-DOS"
    "Filesystem" = "win95"

    使用这个配置,被 windows 应用程序当作为 "c:windowssystem" 的目录将被映射为 UNIX 文件系统中的 /var/wine/windows/system 。注意你必须指定 "Filesystem" = "win95" 而不是 "Filesystem" = "unix",来使 Wine 模拟 Windows-相容的(大小写不敏感)文件系统,否则多数应用程序将不能工作。
   
    3.1.4. 系统 DLL
    Wine 小组决定需要建立伪 DLL 文件来欺骗那些通过检查文件存在来确定是否可获得一个特征(比如 Winsock 和它的 TCP/IP 连网)的应用程序。如果你也有这个问题,你可以在 system 目录中建立一个空文件来让应用程序认为它存在,而在应用实际要求它的时候 Wine 将装载它的内置的 DLL。(不幸的是, tools/wineinstall 自身不建立这样的空文件。)
   
    应用程序有时还尝试从物理文件中检查资源的版本(例如,要确定 DirectX 版本)。在这种情况下空文件就不起作用了,必须有完整版本资源的安装文件。当前正在处理这个问题。目前,你仍需获取一些真实的 DLL 来欺骗这些应用程序。
   
    对于那些 wine 目前未很好实现(或根本未实现)的 DLL。如果不拥有一个真实的 Windows,则有的人将会窃取所需的 DLL,总是可以从象 http://solo.abac.com/dllarchive/ 这样的地方得到一个 DLL 归档。


    3.2. 安装 Wine 而无须 Windows
    编写:James Juran <juran@cse.psu.edu>
   
    (提取自 wine/documentation/no-windows)
   
    Wine 的一个主要目标是允许用户运行 Windows 程序而无须在它们的机器上安装 Windows。Wine 实现了通常由 Windows 提供的主要 DLL 的功能。所以,一旦完成了 Wine,使用 Wine 将不需要拥有一个安装好的 windows。
   
    Wine 已经进行到足够的程度,它已经可以运行你的目标程序而无须安装好的 Windows。如果你要尝试,请依从下列步骤:
   
    1、建立空 C:windows、C:windowssystem、C:windowsStart Menu、和 C:windowsStart MenuPrograms 目录。不要把 Wine 指向充满了旧有安装和不干净的注册表的 Windows 目录。(Wine 在你的 home 目录中建立一个特殊的注册表,在 $HOME/.wine/*.reg 中。你可能需要删除这些文件)。
   
    2、把 ~/.wine/config 中的 [Drive C] 指向你希望 C: 所在的地方。参照 Wine 手册页来的得到更详细的信息。记住使用 "Filesystem" = "win95"!
   
    3、使用 tools/wineinstall 来编译 Wine 并安装缺省注册表。或者如果你偏好自己做,编译 programs/regapi,并运行: programs/regapi/regapi setValue < winedefault.reg
   
    4、运行和/或安装你的应用程序。
   
    因为 Wine 仍未最终完成,一些应用程序与固有 Windows DLL 一起运行要比与 Wine 的替代品一起运行更好。Wine 被设计为使之可能。Juergen Schmied (和其他人)关于如何进行有一些提示。这里假定在配置文件中你的 C:windows 目录不指向一个固有 Windows 安装而是指向一个独立的 Unix 文件系统。(例如, "C:windows" 是位于"/home/ego/wine/drives/c" 下的一个真实的子目录 "windows")。    
   
    ★ 运行应用程序并加上 --debugmsg +module,+file 参数来找出所须的文件。把所须的文件逐个复制到 C:windowssystem 目录中。但不要复制 KERNEL/KERNEL32、GDI/GDI32、或 USER/USER32。它们实现了 Windows API 的核心功能,而必须使用 Wine 的内部版本。
   
    ★ 编辑 ~/.wine/config 中的 "[DllOverrides]" 段,为你要使用的 Windows DLL 在 "builtin" 之前指定 "native"。详情请参见 Wine 手册页。
   
    ★ 注意尽管 Wine 寻找一些网络 DLL 但不需要它们。Windows MPR.DLL 目前不能工作;你必须使用内部实现。
   
    ★ 把 SHELL/SHELL32 和 COMDLG/COMDLG32、COMMCTRL/COMCTL32 成对的复制到你的 Wine 目录中(使用这些 DLL 是"干净的")。确保在 ~/.wine/config 的"[DllPairs]"段中指定了这些。
   
    ★ 要一致: 只一起使用同一个 Windows 版本的 DLL。
   
    ★ 把 regedit.exe 放置到 C:windows 目录中。(Office 95 与一个空注册表一起工作时导入一个 *.reg 文件,对 Office 97 不清楚)。
   
    ★ 如果你要浏览程序的帮助功能还要添加 winhelp.exe 和 winhlp32.exe 。

    3.3.处理 FAT/VFAT 分区

    编写:Steven Elliott <elliotsl@mindspring.com>
    (提取自 wine/documentation/linux-fat-permissions)
   
    本文描述工作在 Linux 中对 FAT 和 VFAT 文件系统的权限,焦点是为 Wine 配置它们。
   
    3.3.1. 介绍
    Linux 可以使用 FAT (老的 8.3 DOS 文件系统) 或 VFAT (新的 Windows 95 或后来的长文件名文件系统) 模块访问 DOS 和 Windows 文件系统。在双引导(Linux + Windows)系统上,要通过 Wine 访问现存的应用程序和它们的数据,挂装 FAT 或 VFAT 文件系统是提供的主要的方式。
   
    按照 ~/.wine/config 文件的指示,Wine 把挂装的 FAT 文件系统比如 /c,映射成驱动器字母比如 "c:"。下列摘录自一个 ~/.wine/config 文件:
   
    [Drive C]
    "Path" = "/c"
    "Type" = "hd"
              
    尽管在长文件名支持上 VFAT 文件系统优于 FAT 文件系统,在本文剩余部分中使用术语 "FAT" 来参照 FAT 文件系统和它的衍生品。还有,本文通篇使用 "/c" 作为 FAT 挂装点的例子。
   
    多数现代 Linux 发布要么检测现存的 FAT 文件系统要么允许配置现存的 FAT 文件系统,这样,可以要么持久的(在引导时)要么在需要的时候,在一个位置上如 /c 挂装它们。在任何一种情况下,缺省的,权限可能被配置成:
   
    ~>cd /c
    /c>ls -l
    -rwxr-xr-x   1 root     root           91 Oct 10 17:58 autoexec.bat
    -rwxr-xr-x   1 root     root          245 Oct 10 17:58 config.sys
    drwxr-xr-x  41 root     root        16384 Dec 30  1998 windows
   
    这里所有的文件都属于 "root",都在 "root" 组中并只能被 "root" 写(755 权限)。 这限制了应用程序要想写文件系统的任何部分,只能以 root 运行 Wine。
    有三种主要的途径来克服上面段落提及的受限制的权限:
       
    1、以 root 运行 Wine
   
    2、用更少受限制的权限来挂装 FAT 文件系统
   
    3、通过完全或部分复制它来隐蔽 FAT 文件系统
   
    在下面的小节中将讨论每种方式。

   
    3.3.2. 以 root 运行 Wine
    要给予 Wine 所运行的应用程序无限制的对 FAT 文件系统访问,以 root 运行 Wine 是最简单和最直接的方式。以 root 运行 wine 还允许应用程序做与 FAT 文件系统无关的事情,比如监听小于 1024 的端口。 以 root 运行 Wine 是危险的,原因是对应用程序在系统上的所作所为没有限制。
   
    3.3.3. 挂装 FAT 文件系统
    可以用比缺省更少受限制的权限挂装 FAT 文件系统。要么变更挂装 FAT 文件系统的用户,要么显式的变更挂装的 FAT 文件系统的权限。 FAT 文件系统从挂装 FAT 文件系统的进程继承权限。因为挂装 FAT 文件系统的进程通常是以 root 运行的一个启动脚本,FAT 文件系统继承 root 的权限。这导致在 FAT 文件系统上的文件有类似于用 root 建立的文件的权限。例如:
   
    ~>whoami
    root
    ~>touch root_file
    ~>ls -l root_file
    -rw-r--r--   1 root     root            0 Dec 10 00:20 root_file
              
    它匹配属主、组和除了缺少‘x’之外在 FAT 文件系统上见到的文件权限。在 FAT 文件系统上的权限可以通过改变 root 的 umask (unset permissions bits)来变更。例如:
   
    ~>umount /c
    ~>umask
    022
    ~>umask 073
    ~>mount /c
    ~>cd /c
    /c>ls -l
    -rwx---r--   1 root     root           91 Oct 10 17:58 autoexec.bat
    -rwx---r--   1 root     root          245 Oct 10 17:58 config.sys
    drwx---r--  41 root     root        16384 Dec 30  1998 windows

    用 umask 码 000 挂装 FAT 文件系统给予所有用户对它的完全控制。在挂装的时候提供额外的控制,显式的指定 FAT 文件系统的权限。与 FAT 权限相关的有三个挂装选项: uid、gid 和 umask。在手动挂装文件系统的时候可以指定它们。例如:
   
    ~>umount /c
    ~>mount -o uid=500 -o gid=500 -o umask=002 /c
    ~>cd /c
    /c>ls -l
    -rwxrwxr-x   1 sle      sle            91 Oct 10 17:58 autoexec.bat
    -rwxrwxr-x   1 sle      sle           245 Oct 10 17:58 config.sys
    drwxrwxr-x  41 sle      sle         16384 Dec 30  1998 windows
   
    给予 "sle" 在 /c 上完全控制权限。可以通过在上面列出的选项添加到 /etc/fstab 文件中而使之成为永久:
   
    ~>grep /c /etc/fstab
    /dev/hda1  /c  vfat  uid=500,gid=500,umask=002,exec,dev,suid,rw 1 1
    
    注意 umask 码 002 一般用于用户私有组文件权限中。在 FAT 文件系统上这个 umask 确保在指定组(gid)中的所有用户可以完全访问所有文件。
   
    3.3.4. 隐蔽 FAT 文件系统
    隐蔽提供了精细的控制粒度。通过复制部分最初的 FAT 文件系统,应用程序可以安全的在复制的这部分上工作,而继续直接读其余的部分。这是通过符号连接完成的。例如,考虑一个叫 AnApp 的应用程序必须能读写 c:windows 和 c:AnApp 目录而可读整个 FAT 文件系统的的一个系统。在这个系统中 FAT 文件系统有缺省的权限,出于安全的原因或缺乏 root 访问权限而不应该被改变。在这个系统上可以用下列方式设置一个隐蔽目录:
   
    ~>cd /
    />mkdir c_shadow
    />cd c_shadow
    /c_shadow>ln -s /c_/* .
    /c_shadow>rm windows AnApp
    /c_shadow>cp -R /c_/ .
    /c_shadow>chmod -R 777 windows AnApp
    /c_shadow>perl -p -i -e 's|/c$|/c_shadow|g' /usr/local/etc/wine.conf

    上述命令给予所有用户对 windows 和 AnApp 目录完全的读写访问,而只有 root 可以写访问其他目录。

    3.4. SCSI 支持
    编写: Bruce Milner;补充:Andreas Mohr <amohr@codeweavers.com>
   
    (提取自 wine/documentation/aspi)
   
    这个文件描述设置 Windows ASPI 接口。
   
    警告/警告/警告!!!!!!
    如果不正确使用可能会使你的系统报废
    如果正确使用可能会使你的系统报废

    我已经说过,ASPI 是从 windows 程序到 SCSI 设备的直接连接。ASPI 只转发程序发送到 SCSI 总线上 SCSI 命令。
   
    如果在你的设置文件中使用了错误的 SCSI 命令,你可以向不合适的设备发送完全伪造的命令 - 例如格式化你的硬设备(假定这个设备给予你权限 - 如果你以 root 运行,所有赌注都将失去)。
   
    所以请确保把程序不需要的所有 SCSI 设备的权限设置为尽可能的受限制!
   
    设置扫描仪的指导: (至少让扫描仪工作起来) (同样适用于其他设备如 CD 刻录机, MO 驱动器,...,诸如此类)

 
    3.4.1. Windows 要求
    扫描仪软件需要使用 "Adaptec" 兼容驱动器(ASPI)。至少与 Mustek 一起,它们允许你选择使用内置卡或 "Adaptec (AHA)" 兼容驱动器。任何其他方式都不能工作。支持通过 DOS ASPI 驱动器(例如, ASPI2DOS) 访问扫描仪的软件。 [AM]
   
    你可能需要这个软件的一个真实的 windows 安装来正确设置 LUN's/SCSI id。我也不是非常确定。
   
    3.4.2. LINUX 要求
    在 linux 下必须支持你的 SCSI 卡。对未知 SCSI 卡将不能工作。甚至对廉价的垃圾 "扫描仪专用" 控制器在网上都有特定的 Linux 驱动程序。如果你要使用你的 IDE 设备,你需要使用 ide-scsi 模拟器。阅读 http://www.linuxdoc.org/HOWTO/CD-Writing-HOWTO.html 来获得 ide-scsi 设置指导。把 SCSI 驱动程序编译到你的内核中。
   
    对于最新的(2.2.x)内核好象不要求别的什么了: Linux 缺省使用比 Windows 小的 SCSI 缓冲区。定义了 SG_BIG_BUFF(在 sg.h 中)的内核建造缺省设置太低。SANE 计划推荐 130560 好象就工作的很好。这要求重新建造系统内核。
   
    为扫描仪建造一个设备(一般 SCSI 设备) - 关于设备编号请参见 http://www.linuxdoc.org/HOWTO/SCSI-Programming-HOWTO.html 的 SCSI 编程 HOWTO。
   
    我建议让扫描仪设备对一个组可写。我建立了一个叫 scanner 的组并添加上了我自己。以 root 运行会增加向不适当的设备发送错误 SCSI 命令的危险。使用常规用户,你将受到更好的保护。
   
    对于 Win32 软件(WNASPI32),Wine 在适当的位置进行自动检测。对于 Win16 软件(WINASPI),你需要在 ~/.wine/config 中为你的特定扫描仪添加一个 SCSI 设备条目。格式是 [scsi cCtTdD],这里的 "C" = "controller"、"T" = "target"、D=LUN
   
    例如,我设置扫描仪为 controller 0、Target 6、LUN 0。 [scsi c0t6d0]
    "Device" = "/dev/sgi"

    对你的特定的 SCSI 设置可能不同。
   
    3.4.3. 一般信息
    我使用一个包 "ipplus" 承载 mustek 扫描仪。这个程序使用 TWAIN 驱动器规定来访问扫描仪。
   
    (TWAIN 管理器)
   
    ipplus.exe <---> (TWAIN INTERFACE) <---> (TWAIN DATA SOURCE . ASPI) -> WINASPI
 
    3.4.4. 注意/缺陷
    最大的缺陷是目前只能在 linux 下工作。
   
    ASPI 代码只在下列扫描仪上进行了测试: 
   
    在 Linux 下一个 Mustek 800SP 加上在一个 Buslogic 控制器[BM]
    在 Linux 下通过 DOSASPI 访问的一个 Siemens Nixdorf 9036 加上 Adaptec AVA-1505。注意我有颜色问题,通过(少见可读的结果)[AM]
    一个 Fujitsu M2513A MO 驱动器 (640MB) 使用一般 SCSI 驱动器。格式化和弹出(eject)工作良好。为访问硬件而感谢 Uwe Bonnes! [AM]
    我不担保 ASPI 代码。它可以使我的扫描仪工作。但可能使你的驱动器爆炸。我无法确定。我承担零责任!

原文转自:http://www.ltesting.net