Linux 作为工作环境桌面

作者:Mark Stacey

正如我们在过去 18 个月左右看到的那样,Linux 在服务器端操作系统方面迅速攀升排行榜。事实上,许多人现在开始意识到,除了少数几家传统上在高端操作系统市场占据主导地位的大公司之外,还有其他选择。

Linux 发展的下一个逻辑步骤是从后端服务迁移到桌面,它在后端服务中已经出色地证明了自己。这种转变更难实现,因为 Linux 传统上是为服务器端处理而开发的。直到最近,还没有人齐心协力为最终用户开发可以与主要竞争对手竞争的应用程序。

虽然许多人认为 Linux 仍然没有准备好充当桌面操作系统,但在这种情况变得可行之前,已经不远了。在本文中,我旨在让您感受到 Linux 爱好者在努力使这个环境更符合他们的喜好时可能会遇到的一些挑战,并提供一些解决这些挑战的技巧。

我在一家小型办公室环境中担任开发人员。我现在正在从事的项目使我处于一个理想的环境中,可以试验将 Linux 作为严肃的桌面环境。我承认这种情况可能不适合所有人,但我尝试处理 Linux 下的一些更常见的任务。

该项目涉及 Java 开发,主要开发平台是 Solaris。我必须执行的任务包括设计项目、开发和测试代码、跟踪项目缺陷以及日常管理,例如邮件、研究以及文档阅读和编写。

设计工具

办公室中进行的大部分设计工作都涉及使用 UML 作为建模语言。在 UML 中,有许多约定用于表示面向对象程序设计的不同方面。虽然 Windows 环境中有大量的图表工具可用,但 Linux 环境的工具通常鲜为人知,更难获得,并且可能不如 Microsoft 世界中的同类工具那样完善。由于我工作的开发环境主要以 Java 为主,因此我具有不必完全在 Linux 应用程序领域进行搜索的优势;用 Java 编写的优秀工具本质上是跨平台的。在搜索合适的工具时,我遇到了两个可能的候选工具。

其中一个工具称为 ArgoUML。该工具的网站(列在“资源”中)将 ArgoUML 描述为认知设计工具。它试图检查您的设计,并就可能缺少的内容提供建议,或指出设计中的差异。从网站获得的 ArgoUML 版本只是一个开发版本。他们似乎最近已迁移到一个新站点并改进了他们的开发工作。

在 Windows 上,Rational Rose UML 工具在面向对象设计领域占有非常强大的地位。能够读取和写入与 Rose 兼容的项目文件是一个很大的优势。MagicDrawUML 是一款商业 UML 设计工具。它用 Java 编写,完全跨平台,并且通过以 Rational Rose 格式导出您的项目,您还可以与他人共享您的工作。作为旁注,许多人声称 Java 可能很慢,因此开发人员使用此工具所做的工作非常令人印象深刻。用户界面与您在 Windows 或 Linux 环境中可能使用的任何界面一样响应迅速。该产品的缺点是它不是免费的。但是,许可费用仅为 Rational Rose 的一小部分,并且在商业开发环境中,这可能是一项值得的投资。

开发工具

在本节中,我将尝试向您介绍一些可用于 Linux 的工具,这些工具可用于开发和构建 Java 项目。

我们使用的构建环境已使用 Make 设置。此工具在 Linux 安装中非常标准。Make 可在各种平台上使用,因此它是跨平台项目的不错选择。平台无关宏和目标的大部分可以在标准 Makefile 中定义。通过使用以下策略,您可以最大限度地减少在多个平台上构建所涉及的麻烦。

首先,定义一个环境变量 ARCH,它设置为 uname 命令返回的任何内容。这可以在登录时完成,方法是将以下命令添加到您的 .bash_profile(对于 bash 用户)

export ARCH=<\#145>uname'

然后,将所有平台特定的 Make 例程和定义移动到名为 Makefile.$ARCH 的 makefile 中,其中 $ARCH 是 uname 在特定平台上返回的内容。最后,在您的主 makefile 中,添加以下行以在您的 make 命令中包含平台特定的定义

include Makefile.$(ARCH)
这会导致 make 在运行时自动加载正确的 makefile 定义。

构建环境的下一阶段是找到已移植到 Linux 的 Java 编译器。目前,有许多 Java 编译器和解释器项目正在进行中。但到目前为止,对于生产工作,选择是 Blackdown 团队移植的 Java 开发工具包,或者是 IBM 提供的 JDK。根据您的情况,可能会偏向于任一 JDK。这两种 JDK 都支持 Sun 的最新规范。

使用 Java 的另一个优势是源代码编译成的字节码的跨平台特性。这意味着如果您需要使用额外的类库或 jar 文件,则无需去寻找平台特定的实现。但是,许多 Java 应用程序实际上确实包含本机库,这会将这些应用程序的执行限制在它们已移植到的平台上。根据您需要运行这些应用程序的程度,这可能不是问题。例如,我正在从事的项目使用了 Sun 定义的 Java 消息传递规范 (JMS)。Java 消息队列 (JMQ) 是 Sun 发布的实现 JMS 的产品。JMQ 尚未移植到 Linux,因此,我无法在 Linux 中针对它测试我的代码。我确实需要针对它编译我的代码,并且由于库主要采用 jar 格式,因此我可以将 jar 库复制到我的本地计算机上,并且仍然可以成功地针对它构建我的应用程序。

帮助您开发代码的应用程序随处可见。每个编辑器或 IDE 都有其拥护者,因此在这个领域提出建议始终是一个棘手的问题,但我将提到我最喜欢的编辑器。由于工作要求,几年前我被迫学习 vi。从那时起,我转到了 vimgvim,并且从未回头。我偶尔也尝试过其他 IDE,例如 JBuilder 甚至 Microsoft 的 Developer Studio,但在它们实现 vi 键映射之前,这些 IDE 永远只能得到我的匆匆一瞥。这些 IDE 比 vi 具有优势的地方在于调试方面,但有时一个放置得当的 println() 方法也能起到同样好的作用。

Vim 和 gvim 具有颜色语法高亮、自动缩进和其他许多功能,这里无法一一列举。如果设置正确,这些编辑器甚至可以处理写入-构建-调试。vi 克隆的一个极其强大且易于使用的功能是宏。对编辑器中重复性任务进行少量思考可以产生一个简单但功能强大的宏,以帮助您完成在功能较弱的编辑器中可能花费更长时间才能完成的工作。

那么,我们剩下的是两个更偏向项目管理类型的功能,这些功能通常在任何有自尊心的项目中都留到最后:源代码管理和错误/缺陷跟踪。最广泛使用的源代码管理包是 SCCS、RCS 和 CVS。SCCS 不作为开源应用程序提供,这留下了 CVS 和 RCS。RCS 适用于较小的项目。我最近有机会使用 CVS。虽然在很大程度上,它使用与 RCS 相同的格式历史文件,但 CVS 的用户界面要优雅得多。除此之外,您还拥有多开发人员支持和远程客户端支持。最后一个功能在我的设置中非常方便。我们的 CVS 存储库存储在 Solaris 计算机上。为了实现我使用所有 Linux 功能并证明它实际上可以实现的愿望,我在我的 Linux 机器上安装了 CVS 客户端(这可能在某些安装中是标准的)。通过设置 CVSROOT 环境变量以远程访问 Solaris 机器上的 CVS 存储库,我可以在本地管理我的源代码。CVS 使用 rlogin 远程执行 CVS 命令,因此请确保您已在远程机器上设置了适当的访问权限。CVSROOT 环境变量需要遵循以下格式才能访问远程存储库

export CVSROOT=:ext:hostname:CVSRepository

好的开源错误/缺陷跟踪软件很难找到。我只能找到两个看起来比较稳定的。其中一个被放弃了,因为它没有完全满足我们的要求。我们唯一真正可用的选择是 Mozilla 团队使用的错误跟踪应用程序。此应用程序具有基于 Web 的良好用户界面,带有 MySQL 数据库后端。它具有高度可配置性,一旦我们克服了一些怪癖,它就可以合理地快速运行起来。

实用程序

一些典型的 Linux 实用程序在开发项目时非常方便。不仅用于编码和测试所涉及的工作,还用于使生活更轻松的实用程序。例如,命令 findcatawkegrep 往往会大量用于常规系统管理、在源文件中查找路径以及编写使工作更轻松的小脚本。如果不为 Windows 安装类似 Cygwin 的东西,您将很难在 Microsoft 平台上找到类似的“改善生活”的实用程序。

与代码开发更直接相关的一类实用程序将是“漂亮打印机”,或可以为您整理代码的实用程序,以便它们符合特定标准,例如 Sun Microsystems Java 编码标准或您自己公司的编码标准。indent 实用程序在大多数 Linux 系统上都可用,通过指定一系列选项,您可以控制最终输出的格式。目前,我们的项目符合 Sun Microsystems 编码标准。当我第一次查找 indent 的选项,以便将 Java 代码格式化为正确的标准时,我遇到了 Jindent 实用程序。这是一个用 Java 编写的缩进器,因此它又是完全跨平台的。默认情况下,它格式化为 Sun 标准,并且在创建您自己的配置文件时,您可以修改其输出。

系统设置

出于备份目的,我们将大部分开发工作保存在 UNIX 服务器上。我们的大部分客户端机器都是 Windows NT。我们使用的 UNIX 机器配备了 NFS 和 SAMBA。通过共享这些驱动器,我们可以在本地访问这些资源,而无需登录到远程机器。Linux 机器可以挂载已共享的 NFS 和 SAMBA 驱动器。通过保持与远程机器上相同的目录结构,您可以减少生成机器特定的 makefile 的需要。例如,如果所需的 jar 库位于远程机器上的 /opt/FSUNjmq/lib/jms.jar 下,则您开发的 makefile 可以在远程 UNIX 机器和本地 Linux 机器上运行,而无需进行任何修改,方法是将本地机器上的 /opt/FSUNjmq 映射到 /opt/FSUNjmq。用于共享远程驱动器的命令类似于以下内容。对于 NFS

share /opt/FSUNjmq

对于 SAMBA,编辑 /etc/smb.conf 文件,复制其中一个示例共享,对其进行修改以指向正确的目录,并确保授予您的用户名访问权限。并非总是可以在本地机器上单独工作;有时您需要登录到远程机器以运行各种进程,例如当您希望测试的应用程序没有可用端口时,或者当您需要复制、移动或访问大量数据时。此外,登录到远程机器将为您提供更好的网络性能。rlogin 命令比 telnet 更容易访问远程机器。使用 rlogin,您可以设置访问权限,以便您每次登录时都不需要输入用户名和密码。通过在您的远程主目录中创建一个 .rhosts 文件,并通过添加您的本地机器名称,您将能够轻松进入远程机器。只需确保您的 .rhosts 设置为仅所有者具有读/写权限,并且不允许组或全局访问。否则,您的自动身份验证将不起作用。

我发现登录远程机器最烦人的事情之一是您必须第二次设置所有 shell 首选项。这可以通过配置一个通用的配置文件并使其可用于您的本地机器和远程机器来克服。在您的远程主目录中创建一个 .commonProfile 文件,并在本地挂载您的远程主目录。因此,除了您的 /home/username 目录之外,您还有一个 /remote/username 目录。在您的本地和远程配置文件中,您可以然后获取您的 .commonProfile。现在您需要进行的任何更改都只需进行一次,它们将反映在两个环境中。

关于远程访问您的 UNIX 服务器的一个要点是,在您的本地机器上为您自己设置用户帐户时,您应该设置与您在远程机器上分配的相同的用户名、uid 和 gid。这在写入、挂载和登录权限方面使生活变得更加轻松。一些更有经验的用户可能熟悉 NIS;这是一种在多台 UNIX 机器上保持用户和密码中央存储库的方法。通过一些研究和合适的网络配置,可能可以将您的 Linux 机器设置为使用 NIS 以允许其他用户访问您的机器。这避免了在向您的机器添加新用户时重复每个用户 ID 和组 ID 的需要。

一个非常有用的能力是能够从本地机器上的远程机器运行 X Window 客户端。这使您可以在图形环境中访问远程机器。但是,即使您可以在本地 X Window 显示的窗口中运行远程应用程序,在某些情况下,远程应用程序对 UNIX X Window 系统的期望与您的本地 X Window 服务器提供的功能之间存在不兼容性。一个典型的例子是,如果您的 X Window 服务器以 16 位颜色运行,但远程应用程序只能以 8 位颜色运行。您可以选择启动第二个本地 8 位颜色 X Window 会话,或者您可以运行远程窗口管理器,使其显示在您的本地机器上,而不是必须关闭您的 X Window 会话并在 8 位颜色下重新启动。此命令为

X :1 -query remotehost

“:1”表示您希望 X 作为您的第二个显示器运行。这要求您在远程机器上将显示变量设置为您的第二个显示器

export DISPLAY=yourhost:1
一般建议

关于如何处理通常在 Windows 中完成的日常任务的一般建议,我提供以下内容

当今任何办公室中最通用的功能可能都是阅读和编写 Microsoft 文档,无论是 Word、Excel 还是 Powerpoint。StarOffice 提供了一整套应用程序,这些应用程序能够读取和编写 Microsoft 格式的文档。在他们的最新版本中,他们为 Microsoft 集成提供了更多支持。

对于电子邮件,有很多邮件客户端可供选择。但是,这可能会受到您使用的邮件服务器类型的限制。您应该可以轻松找到用于 POP 和 IMAP 邮件的邮件客户端。由于我已经提到了 StarOffice,我想指出它带有一个内置的邮件客户端,用于 POP 和 IMAP 邮件。Netscape 也包括 POP 和 IMAP 支持。如果您的公司选择使用 Microsoft Exchange 作为其电子邮件服务器,并且尚未打开对其的 IMAP 或 POP 访问权限,则可能会出现困难。目前,没有适用于 Linux 的 IMAP 兼容客户端。据我所知,您在这里的选择仅限于仅在 Windows 中运行的电子邮件客户端(如果有人知道任何不同的客户端,请告诉我!)。有关如何解决此问题的更多信息,请参见下文。

不幸的是,Linux 并没有提供当今办公室所需的所有功能。我们通常不得不与 Microsoft 产品共享我们的机器。WINE 提供了在 Linux 中本机运行 Microsoft 产品的能力;但是,它还有很多不足之处。对于这些情况,VMWare 是一款智能应用程序,允许您在 Linux 操作系统中运行另一个操作系统的实例。如果您还没有遇到过它,请查看一下。对我而言,VMWare 提供了运行 Microsoft Outlook 从我们的 Exchange 服务器读取电子邮件的能力。为了仅仅读取邮件而运行另一个操作系统似乎有点过分,但我们并不总是能得到我们想要的东西。

打印是在设置 Linux 操作系统时可能导致许多麻烦的领域;但是,打印机设置工具和驱动程序支持正在迅速改进。如果您遵循规则,在 Linux 下设置网络打印机可能非常简单。需要注意的一件事是,当您的打印机似乎没有自己的驱动程序时。Web 上有大量资源详细介绍了如何设置特定的打印机,即使它似乎不受支持。例如,我们在办公室里有一台 Gestetner PCL 打印机,但通过使用 HP LaserJet III 打印机驱动程序,我现在可以访问这台打印机。

总之,在尝试在不一定支持 Linux 操作系统的环境中成功运行 Linux 操作系统时,必须处理许多领域。我试图向您介绍一下我是如何解决我遇到的问题的。“资源”部分列出了一些网站,这些网站在我研究如何在 Linux 中完成通常在 Windows 中完成的事情时为我提供了帮助。但请记住,并非所有事情都可以通过 Linux 完成,有时您将不得不退回到非 Linux 应用程序。

资源

Linux as a Work Environment Desktop
Mark 目前在位于都柏林的 ICL 工作。他的技术兴趣包括 Linux 和 Java。工作之余,他喜欢长时间休假去其他国家旅行。可以通过 mark.stacey@e-merge.ie 与他联系
加载 Disqus 评论