Fluxbox指南

来自Ubuntu中文
跳到导航跳到搜索

引自fluxbox官方网站 原文地址: [1]

Fluxbox 文档

Fluxbox 文档

Tobias Klausmann

Rando Christensen

“安装 Fluxbox”: Jason Gillman, Jr.

“主题入门”: Justin Rebelo

文档简体中文翻译: Colville Mei

修订历史
修订 0.42003-09-16eg
New editor in charge. Add revision history. Revisite Key Actions (crosscheck with FbCommandFactory.cc).

章 1. 简介

关于此文档

这是 Fluxbox -- 一个 X11 窗口管理器 -- 的更新文档。 该文档的早期版本只有HTML格式,目的是为了较为容易的 移植到其他输出格式。源文件是用 DocBook 4.1编写的,此格式是专为为编写文档而量身定做的。

到目前为止已经有一些 Fluxbox 的文档维护人员了。 您现在阅读的文档大部分都是基于 Rando Christensen 的工作成果,或最初由他发起,之后 协同其他几位人员共同完成的。如果遗漏了哪位,请告知 予以修正。

如果您对这篇中文版文档有什么疑问,或者建议和意见,请发邮件给, 共同探讨简体中文版的文档的各种问题。

有关 Fluxbox 本身的问题最好投到邮件列表上。 您可以在 Fluxbox 官方主页 上找到相关的订阅信息。

提交和翻译

只要用户认为有价值,任何书写清晰,可读性强,而此处未能涵盖的 文档,我都可以接受;如果您想帮助我们而无从下手或者想添加文档的话,只要按上面的邮箱地址给我发电子邮件 就可以了。

本文档的源文件和各种转换后的格式如 HTML 和 PostScript 都可以从 Fluxbox 站点上获得。如果您想用不同的 DTD 或别的输出格式,别忘了源文件这个 老伙计,但是您可能需要一些 DocBook 的知识才能修改 DTD。如果您想转换的格式在 Fluxbox 站点上没有提供,docbook2x 软件包也许能派上用场。

关于 Fluxbox

Fluxbox 是何物?

Fluxbox 是 X 平台上的另一个窗口管理器。基于 Blackbox 0.61.1 代码。Fluxbox 外观和 Blackbox 相似,在 外观,颜色,窗口放置等类似事情的处理上则和 Blackbox 完全一样(主题/样式 100%的兼容)。

那么 Fluxbox 和 Blackbox 到底有什么区别呢? 回答是:太多了!下面这张表中列出了 Fluxbox 已经具备,或 正在研发的功能...

功能

已实现的:

  • 可配置的窗口标签

  • 反锯齿支持(Xft)

  • UTF-8 支持

  • 图标栏(对窗口进行最小化/图标化窗口)

  • 窗口/标签的自动分组

  • 用滚轮鼠的滚轮切轮换 workspace

  • 可配置的标题栏(放置按钮,新按钮等等)

  • KDE 和 Gnome(including Gnome 2)支持

  • Extended Window Manager Hints(ewmh)支持

  • 内置集成的 keygrabber(支持类似 emacs 中的 keychains)

  • 可覆盖 slit 的最大化操作

  • Slit 中 dockapps 的排序

计划中的:

  • Session 管理

  • Windows snapping

  • 可配置的工具栏

  • 其它次要功能

除此之外,代码也有很多修改和改进的地方。

获取 Fluxbox

Fluxbox 源码可以从 Fluxbox 主站点处下载, http://fluxbox.sourceforge.net/。 大多数 Linux 发行版以及其它免费 Unix 包含了 Fluxbox 的源代码和二进制软件包。 实在拿不准的话,就使用发行版提供的最新软件包。

提问和获取支持

Fluxbox 使用和配置都相当简单,但有时候您也会遇到一些疑问和问题。 它们中的大部分以前都有人问到或解决了。所以,当您在邮件列表或 Fluxbox 的 IRC 频道上提问时,请先看一看附录 B, Frequently asked questions (FAQ)

章 2. 起步

安装 Fluxbox

此节由 Jason Gillman Jr. aka “Ircaddict”撰写。

许多发行版都提供了 Fluxbox 的二进制软件包(或者 像 Gentoo 和 FreeBSD 那样采用 ports/ebuilds 的),使得安装 Fluxbox 十分轻松。 然而某些情况下您也许不得不从源代码开始编译。例如,Fluxbox 的大多数 最新版本或许并没有以发行版的软件包形式提供。另外,有些人更喜欢采用自己 的一套编译器标志,以达到量身定制的目的。如果您想采用发行版提供的软件包, 请咨询相关发行版的文档。在 Fluxbox 站点上,我们为某些发行版同时提供了源代码 和二进制软件包。

此文档的目的在于帮助那些还不是十分熟悉X11窗口系统(或一般的 Linux)的人们编译并安装Fluxbox。

获取源代码

您要做的第一件事就是前往下载页面 去下载源代码包(扩展名是.tar.gz)。

我们也会不定期的放出所谓的 developer releases。从中您可以了解到日后正式版 里可能会引入的新功能。鉴于 developer-release 的特性,所以它们在功能性及稳定性上难免有不足之处。 但想要体验 Fluxbox 的最新特色的话不妨一试--利益与风险并存。在 Fluxbox 官方站点上的 News 区可以找到如何获取它们的方法。

解压缩和编译

很好,既然您已经将源代码包弄到手,该是拆开一探究竟的时候了。 运行下面的命令即可,注意文件名要和您实际下载的文件相符:

    $ tar xzvf fluxbox-0.1.12.tar.gz

其间屏幕上的列出的文件名对应于正在解压的文件。之后,进入 刚刚创建的目录(它的名称应该是类似于 fluxbox-0.1.12/这样,但具体要依版本而定)。 接下来就要对 Fluxbox 进行 configure 和 make 了。在 configure 运行的时候,您可以选择启用或者禁用 Fluxbox 中的某些功能。对于大多数人而言,采用默认配置就可以了。如果您想在 Fluxbox 的 slit 中看到 KDE 的面板图标,就要加上 --enable-kde 选项。要了解 configure 脚本 提供的其他选项,使用 --help 即可。如果您不想启用 KDE, 照着下面做就够了:


    $ ./configure
    $ make

待 Fluxbox 编译好后,切换到 root 用户,运行:

    # make install

恭喜恭喜,您已经顺利完成了编译和安装。

运行 Fluxbox

顺利装好固然不错,但如果无法运行的话,又有什么用呢?

通常有两种启动X11的方式(然后就是 Fluxbox)。传统方法是使用 startx 命令。另一种方法是使用图形登录管理器(也称为“显示管理器”)。 最常见的显示管理器是 xdm ,它是XFree86发行版中的一部分。 Gnome提供的显示管理器称为 gdm ,KDE提供的则名为 kdm

如果是用前一种方法(通过 startx )启动 X11, 那么有个非常重要的文件值得关注,就是 位于您主目录下的 .xinitrc。利用显示管理器来启动 X11 的话,您就得留意 .xsession 了,同样也是位于您的主目录下。

下一步就是要找到 Fluxbox 的可执行文件。对大多数人而言,都是/usr/local/bin/fluxbox。 现在,您需要编辑(或者创建)我在上一段所提到的那个文件了。就把下面这行语句添加到文件 最后面:

   exec /usr/local/bin/fluxbox

/usr/local/bin/fluxbox 替换成您系统里Fluxbox可执行文件 实际所在的位置,从源代码编译的话,默认位置就是 /usr/local/bin/fluxbox。添加完后,保存您所做的修改并退出编辑器。如果您是用 startx 的话,请运行下面的命令:

   $ chmod 700 .xinitrc

如果使用 .xsession 的话,上面这个步骤就不需要了。但不管您采用 哪种方法,都必须新创建一个目录,用来存放 Fluxbox 的配置文件:

   $ mkdir .fluxbox

如果您漏掉了上面这一步,那么当您退出 Fluxbox 并重新启动的话,先前采用的设置就 全部丢失了(遗憾的是,系统无法自动创建此目录)。

其它事项

如果您需要帮助,直接到 Fluxbox 论坛上提出您的问题 就可以了,我相信一定会有人乐意解答的。 您也可以到邮件列表上提出您 的问题。在Fluxbox站点上有指向邮件列表的链接。最后一点, 我建议您把 /usr/local/share/fluxbox 目录下的 init menu,和 titlebar 文件拷贝到您的主目录下的 .fluxbox/ 里。

章 3. 工具

简介

Fluxbox 搭配使用的一些小工具提供了一些俏皮功能,也可以让您 用起 Fluxbox 更顺手。默认情况下,它们是和 fluxbox 程序 安装在同一个目录下的,一般都是/usr/local/bin, 如果在安装配置时你选择的是别的路径前缀。大多数发行版使用的也不是上述默认位置,所以 您如果是从二进制软件包安装的话,可能会在/usr/bin 里找到它们。

fbrun

fbrun 基本上和其他桌面环境中的“Run...”对话框是一样 的功能。这是一个用来启动未在菜单项里出现的(或需要调用特殊参数)程序的简便方法。

fbrun 另外还可以从菜单中调用,由此自动载入一个事先设定好 的命令行来运行(当然这个命令行是可以编辑的)。比如说以 ssh 方式连接到一个名字很长的主机,而参数选项又不断 变化。在这种情况下,您可以在菜单中添加一个 fbrun 项,用以包含所需的主机名和全部参数选项。 当用到上述项时,做些必要的修改然后运行就可以了。

fbrun 有多个选项:


   -font [font name]           文本字体
   -title [title name]         设定标题
   -text [text]                文本输入
   -w [width]                  以像素计的窗口宽度
   -h [height]                 以像素计的窗口高度
   -display [display string]   Display名称
   -pos [x] [y]                以像素计的窗口位置
   -fg [color name]            文本的前景色
   -bg [color name]            背景色
   -a                          开启反锯齿
   -hf [history file]          历史文件载入(默认是 ~/.fluxbox/history)
   -help                       显示帮助信息

大多数选项的用法应该是不言自明的。-text-hf 选项也许还要说明一下。前者用于指定 fbrun 窗口中预先载入的文字。如果您想指定多个 参数(像 ssh -X -f ),别忘了给它们套上双引号:

	fbrun -text "ssh -X -f"

-hf 选项用来指定历史文件 -一个fbrun 存放您用过的命令行 的地方(就像 bash 所做的)。正常情况下您不需要这个选现,用默认值就可以了。我们建议您在菜单中使用多个 fbrun 项,然后为每一项配一个历史文件。

fluxbox-generate_menu

FIXME:本节有待完成。

fluxspace

(摘自:http://fluxspace.sourceforge.net):

Fluxspace 在 Fluxbox 已有的窗口管理功能上又融合了桌面管理的能力。它利用已有的组件和强大的 Python 语言来为 Fluxbox 及其它轻量级的窗口管理器打造一个灵活的桌面环境。

  • 通过集成 Rox Filer 和 Idesk 工具,为 Fluxbox 中的每个 workspace 定制各自的图标和面板。

  • 用不同的壁纸去装点每个 workspace。

  • 管理您的启动程序。

  • 在您进入和离开 workspaces 时自动运行和终止 applets,允许每一个 workspace 有自己特定的工具和 dockapps。

wmctrl

http://http://sweb.cz/tripie/utils/wmctrl/

wmctrl 程序是一个和 EWMH/NetWM 兼容的 X 窗口管理器交互的命令行工具。

Pagers

Pager 可以辅助管理多个 workspace 环境。诸如以缩略图的方式显示 workspace, 并在其中完成窗口的拖放。但与多个 workspace 打交道时,并非一定要用 paper,窗口管理器一样可以胜任,比方说 workspace 名称 和内容可以在工具栏上看到;通过窗口菜单或配置 apps 文件将窗口传送到其他 workspace 中去。

但是借由 pager,我们的选择余地更大,比如显示窗口的边框,其他窗口内容的画面,或者正在运行中的程序的图标。

  • bbpager: blackbox 的 paper,配置风格类似,只能显示窗口的边框。 bbtools

  • fluxter: bbpager 的改进版, 配置方式接近于 fluxbox。 fluxter

  • Rox pager: ROX 桌面环境的 pager。 ROX

  • 3d-Desktop: 用3D方式显示 workspace 的 OpenGL pager。 desk3d

  • 还有很多 ...

章 4. 标签

标签入门

Fluxbox 的标签并不是什么新玩意儿。它的实现方式 和 PWM Window Manager 中的标签非常相似。它的工作方式无非就是: 将多个窗口组合到一起,共享相同的几何性质 - 大小相同,位置也一模一样,移动其中一个 窗口导致所有窗口都一起移动。假想有一叠报纸,标签就像是插在报纸中塑料突起物,您可以借助它 轻松而迅速的翻到某一页。

在 0.1.14 版本以前,标签是贴在窗口上的,自 0.9.x 版本起,标签已嵌入到 窗口的标题栏中了。

Fluxbox 中的标签就是这么回事。只需简单的选择您要的窗口的标签,那个窗口 就会弹到所有窗口的最上面。在我们来试试。

基本的标签操作

要记住的第一点是所有的标签操作都要借助于鼠标的第三键。 首先,挑选两个您想组合到一起的窗口。在第一个窗口的标签上单击第三键,然后拖到第二个窗口的 标签上去。恭喜,这样它们就粘合到一起了!现在您可以用标签来完成窗口间的切换了。

要移除标签的话,也是一样的做法。在组合的标签上单击第三键并把它拖走。

标签的高级话题

Sloppy Window Grouping

"但我觉得想把标签拖到另一个小标签上去很不方便。"

我们照样有好消息告诉您。在 Fluxbox 'configuration' 菜单中,选择 'Sloppy Window Grouping' 。这样您就可以把标签拖到目标窗口的任意位置来完成 窗口组合了。

Tabbing single window classes

"好是好,但我只想给程序 X 贴上标签!"

依据您想让多少程序有标签,用两种方法来完成这个工作。 您可以通过窗口来开启/关闭标签。(右键单击标题栏,选择 'tab' 项), 或者 您还可以通过 'Configuration'->'Use Tabs' 来关闭所有窗口的标签。关闭之后, 您可以再用刚才介绍的方法分别开启每个窗口的标签。

完全禁用标签

"我对标签不怎么感兴趣。我可以禁用它们吗?"

当然可以了。从 Fluxbox 'Configuration' 菜单中选择 'Use Tabs'。因为它是一个切换选项,所以再选一次的话就会 开启标签功能。在 init 配置文件中也有相关的设置:

    session.tabs:   true

禁用标签功能可以通过把 true 替换为 false 来完成。

Tab Placement

在 0.1.14 版本以前,标签实际上是贴在窗口上的,自 0.9.x 版本起,标签已嵌入到 窗口的标题栏中了。

(0.1.14) 有一个称为 'Tab Placement' 的菜单配置选项。这里是标签在窗口上所处的位置。 鉴于大部分选项是很直观的,所以唯一值得提及的是 'Relative' 选项。这些选项使得窗口上所有标签的总长度 等于窗口的长度。也就是说,如果窗口上只有一个标签,那它的长度就是窗口的长度。如果有两个标签,每一个的长度 就是窗口长度的一半。该选项让标签看起来不是那么碍眼,因而倍受欢迎。

Tab Autogrouping

有时您希望一些程序在启动时能够自动组合到一起。 自然而然地我们称之为“自动组合”。这部分内容将会解释它的工作原理。 首先,您需要 0.1.11 以上的 Fluxbox 版本。在之前的版本中,没有“自动组合” 这个功能。接着您需要创建一个 ~/.fluxbox/groups 文件(如果不存在的话)。然后,编辑 ~/.fluxbox/init 文件,加上这一行(如果已有但却 不一样的话就改成此行):

         session.groupFile:		~/.fluxbox/groups

Okay,各就各位了。现在您要做的就只是填入组合文件了。

组合文件的格式

该文件中每一行对应一个组合,您只用加入要组合到一起的程序的名称就可以了。例如:

例子 4.1. groups file


    Navigator nedit
    xterm

以上将构造出两个组合,一个是 netscapenedit 的组合,另一个是 xterm 单独构成的一个组合。新建立的窗口只能和同一个 workspace 里的 窗口以及焦点最后所处的那个窗口组合到一起。用下面的方法来获取程序名以便写入分组文件:

    xprop |awk '/WM_CLASS/{print $4}'

再点击窗口即可。如果没有任何显示,试着把 $4 改成 $3

以标签来自动组合

这种方式允许您弹出根菜单,当您右击标签并选择了一个应用程序之后,就可以开始组合到标签上了。

用这种方式组合 (从标签) 可能会与正常的自动组合产生严重的冲突。

主题中的标签

我们用了整整一节(章 10, 主题) 来介绍如何控制标签在主题中的外观。如果感兴趣您可以看一看。 (主题中的标签在默认情况下和标题栏的外观是相同的;只不过有时人们希望变化一下。)

章 5. 按键绑定

Keygrabber

keygrabber 的工作方式和 bbkeys(也是一个非常棒的工具, 但功能上有其局限性,过去采用了不兼容的许可证)非常相似,但配置文件采用了全新的语法,所具有 的一些新功能甚至让 Fluxbox 变得更加强大。

其中之一就是,新的 keygrabber 支持类似于 emacs 中的 keychains... 也就是说您可以用:Mod1 + M + Mod1 + F 切换至下一个 workspace (不是每个人在实际中都会采用这个按键序列啦)。

如果您已经敲入了某个按键序列的部分按键但是决定不再继续(即退出) 那么只需敲入别的按键序列(必须是已在 keys-file 中配置了的)即可退出(使用: AbortChain)。

除此之外您还可以通过按键序列的绑定在已分组/贴标签的一组窗口中进行切换 (使用:NextTab 和 PrevTab)。

最后,为了让您的便利我们(或者说就是 vlaad 和 tarzeau二人)还提供了两个脚本( 它们的作用相同)用于将 bbkeys 配置文件转换成 Fluxbox 的 keys-file。(这两个脚本的用法已在脚本中予以描述)。 Download: convertkeys or convertkeys2.

例子 5.1. Fluxbox keysfile

    Mod1 Tab :NextWindow
    Mod1 F1 :Workspace 1
    Mod1 F2 :Workspace 2
    Mod1 F3 :Workspace 3
    Mod1 F4 :Workspace 4
    Control n Mod1 n :NextTab

就像您看到的那样,首先是一个修饰符,然后是一个按键 (如果您想要更长的按键序列就接着跟上修饰符和按键) 最后是一个分号跟上一个动作。

欲知合法的按键动作的详细情况请继续阅读此文档。

以上所讲的对您有什么用处呢?现在您就可以完全控制您的 xmms 了,例如:

例子 5.2. XMMS 按键绑定

    Mod1 P :ExecCommand xmms -p
    Mod1 F :ExecCommand xmms -f

如果您有一些附加的按键(例如多媒体键)的话,就可以通过这种方式来控制 xmms,但前提是 已在 XFree86 中正确配置了这些按键:

例子 5.3. Multimedia keys for XMMS


    None XF86AudioPlay :ExecCommand xmms -u
    None XF86AudioStop :ExecCommand xmms -s

我想说的是详细情况最好参见 xmms --help,但您现在应该完成得非常不错了...

按键名称

您或许在问自己怎样才能找出每个按键的名称。运行 xev,将鼠标移动到新创建的 窗口上,在键盘上随便按一个键,看看 xev 是怎么说的。这里有个例子说明的是按下右箭头键后的情况:

例子 5.4. 按下右箭头键后 xev 的输出

    KeyPress event, serial 18, synthetic NO, window 0x2c00001,
    root 0x60, subw 0x0, time 3745737930, (373,380), root:(504,526),
    state 0x10, keycode 102 (keysym 0xff53, Right), same_screen YES,
    XLookupString gives 0 characters:  ""

我们感兴趣的是按键的名称,也就是在括号中和 keysym 一起列出的 内容。在此例中,位于 (keysym 0xff53, Right)中。所以,对应的按键名称即 Right

特殊按键

这里有些方便您的特殊按键。注意在按下这些键之后 xev 立即就会 显示出它们(而不是作为其它按键的修饰符)。

KeyX11 Name
Control, StrgControl
AltMod1
Super, Meta, Win* KeysMod4

动作

以下是 Fluxbox 所能提供的动作。它们基本上对应了用户大部分所能想到的按键。 要注意的是在按键绑定的配置文件中,位于动作前的最后一个字符应该是 :

动作对于大小写是敏感的。

表格 5.1. Navigation

ActionResult
WorkspaceGo to a particular workspace. Use :Workspace 1, :Workspace 2, etc.
NextTabSwitch to the Next Tab in the current group.
PrevTabSwitch to the Previous Tab in the current group.
NextWindow NGo to Next Window. See Note 1.
PrevWindow NGo to previous window. Again, see Note 1.
NextWorkspaceGo to the Next Workspace.
PrevWorkspaceGo to the Previous Workspace.
NextGroup, PrevGroupGo to the next/prev window group.
LeftWorkspaceSame as PrevWorkspace.
RightWorkspaceSame as NextWorkspace.

1. NextWindow / PrevWindow

NextWindow/PrevWindow 有很多参数,想在上面这张表中全部都解释有点不太现实。这里只是它的基本工作原理。

用于配置行为的整数参数:

Parameter valueBehaviour
0 or unspecifiedDefault/current behavior - no skipping
1Skip lower tabs
2Skip stuck windows
3Skip lower tabs/stuck windows
4Skip shaded windows
5Skip lower tabs/shaded windows
6Skip stuck windows/shaded windows
7Skip lower tabs/stuck windows/shaded windows

表格 5.2. Window Operations

ActionResult
CloseClose the Window.
KillWindowThe equivalent of calling xkill and clicking on the window.
MinimizeAlso known as "iconify". Make the window iconified.
ShadeWindowPut window in the 'shaded' state, or restore from the 'shaded' state.
StickWindowToggle a Window's 'sticky' state.
ToggleDecorToggle whether or not current window has a border, buttons, and titlebar.
RaiseBring the window to the 'Top', it will appear 'Above' windows that it overlaps.
LowerOpposite of Raise.
NextTab, PrevTabActivate next, prev tab.
MoveTabLeft, MoveTabRightMove activate tab by the n tabs left/right.
DetachClientTake client out of tab-group.

表格 5.3. Window Sizing

ActionResult
MaximizeHorizontalMaximize the window horizontally.
MaximizeVerticalMaximize the window vertically.
MaximizeWindowMaximize the Window.
ResizeResize the active window by the specified delta, e.g. resize -8 -8.
ResizeToResize the active window to the specified geometry. resize -8 -8.
ResizeHorizontalResize horizontal by the specified delta.
ResizeVerticalResize vertical by the specified delta.
ArrangeWindowsTile Windows magically.
ShowDesktopIconify all windows.

在缩放的时候,"one unit" 对于不同的应用程序可能意义有所不同。 xterm/aterm/Eterm 会增加额外一个字符宽的空间,而不是以像素为单位缩放。

其它的程序应该都是以像素为单位进行缩放。

表格 5.4. 窗口移动

ActionResult
SendToWorkspaceSend current window to a specified workspace. Use :SendToWorkspace 1
Moveby delta-x delta-y.
MoveLeftGuess.
MoveRightGuess.
MoveUpGuess.
MoveDownGuess.

表格 5.5. 杂项

ActionResult
AbortKeychainIn Multi-binding keychains, cancel the keybinding.
ExecCommandExecute a command. Example :ExecCommand xmms -t.
RootMenuSummon the Root Menu.
WorkSpaceMenuSummon the Workspace Menu.
RestartRestart fluxbox.
ReconfigureReconfigure fluxbox, rereads configuration. e.g. if keys was changed, but init and slitlist might be written before read.
SetStyleLoad the specified file.
SetWorkspaceName.
SaveRCSave resource files.
QuitQuit fluxbox.

章 6. 桌面背景

像 Blackbox 一样,Fluxbox 为此也提供了两套 wrapper 工具--bsetroot fbsetbg 。 我们一道来看看它们是如何工作的。

bsetroot 几乎具备了xsetroot的所有功能。 只要是简单的背景它都可以设置, 例如单色的。另外,bsetroot 也可以设置渐变色的背景。

fbsetbg 之所以称为 wrapper,在于它尝试着去寻找 一个适合的背景设置程序,从而间接完成背景的设置。您不需要对 fbsetbg 进行配置。 它会自动采用最先找到的程序。

覆盖主题背景

Fluxbox允许您忽略 style 文件中指定的背景而另在您的 ~/.fluxbox/init 文件:

中指定:
        session.screen0.rootCommand: fbsetbg -f ~/backgrounds/zimdib_dark.png

为避免对 ~/.fluxbox/init 文件进行不必要的改动, fbsetbg 会将刚用过的壁纸保存在 ~/.fluxbox/lastwallpaper 里,然后在用-l选项的时候再重新载入此壁纸。rootCommand 应该是这样子

        session.screen0.rootCommand: fbsetbg -l

章 7. Slit

一直有人在问,“slit 是什么?”其实,当撰写此文档时,我就已经 把这个问题放到了 FAQ 的开头,并建议大家认真的阅读本节,以免在#fluxbox 频道上 再出现那种类似的问题每天不下十次的被问到的情形,或者是再将 slit 和工具栏 两个概念混为一谈。

Fluxbox 从 Blackbox 那儿继承了很多东西,slit 也是其中之一。 它是专门用来安放 WindowMaker Dockapps 的,(以及其余能够运行于“withdrawn”或 “swallowed”(较少出现)模式的程序)。这些应用程序一般都有 -w 选项,但有些是自动处于 withdrawn 模式的。

首先要确保这项功能已经编译进了你的 Fluxbox。通常情况下你可以放心的当做事实的确如此。 据我所知,针对各个发行版的 Fluxbox 软件包都附带有这项功能。如果你认为自己还是不要它为妙的话,大可以在编译时禁用掉。 但我要强调的是,一个空闲的 slit 不会占用任何 屏幕空间,同时也只仅需要一点点内存, 所以除非它和您系统上的其它程序发生了冲突, 否则我认为并没有什么理由禁用它。

除此之外,您可以运行任意一个“dockable”程序。 (这也称为运行于“withdrawn”模式)。举例来说,xmms 安装时就 附带着 wmxmms 这个程序。运行wmxmms &,xmms 就会出现在 slit 里了。 上面已经提到过,有些应用程序(例如 gkrellm )需要开启 -w 命令行开关才能在 slit 中出现。

我到哪儿去找 dockapps ?

起步的最好地方当然是 Dockapp warehouse 了。那里几乎就是 dockapps 的大仓库,各种门类应有尽有。 另外,您还可以在 Freshmeat 站点上搜索,或者检查您的发行版。

bbtools 页面上也有不少 Blackbox/Fluxbox 工具,其中大多数都是可以在 slit 中运行的。

同样地,如果您启用了KDE支持,KDE dock applets 也会在 slit 中看到的。

Dockapps.Org 则是一个专门讨论dockapps的新站点。

我可以改变 slit 的行为吗?

当然可以啦。只要鼠标右键单击 slit 的可视区域,然后点选弹出的选项就可以了。 大多数弹出选项和任务栏上的是一模一样的。唯一不同的是,slit 多了一个 Direction 选项。因为您的 slit 可以运行于 Horizontal Vertical 方式。

在 configure 菜单中还有个 Maximize Over Slit 选项,可以让最大化的窗口盖住 slit。

我想让我的 slit 程序记住它们的顺序!

从 Fluxbox 0.1.10 开始,这不再是奢望,利用 slitlist 文件 就可以实现。 这里是一些用法指导。

dockapps的当前摆放顺序是由一个配置文件控制的,默认情况下是 ~/.fluxbox/slitlist。在把 dockapps 载入到 slit 的过程中,该文件试图维持原先的摆放顺序,按照名称和原先的 dockapps 进行匹配。

想按照您喜欢的顺序进行安排的话,这里有个很简单的方法:

过程 7.1. dockapps 排序

  1. 在不预先载入任何 dockapps 的情况下运行 Fluxbox。

  2. 按照您希望的顺序一个一个的运行 dockapps。

  3. 把这些 dockapps 添加到您的自动启动脚本里,例如 .xinitrc 或者 .xsession。 顺序在这里就无关紧要了。

默认情况下摆放顺序保存在 ~/.fluxbox/slitlist 文件里,并且在以后的 Fluxbox 会话中 也将继续维持这个顺序不变。

您可以自由的手动编辑 slitlist 文件。它列出了 一系列窗口的名称,每行对应一个 dockapp。您应该在关闭Fluxbox的时候再编辑 此文件,否则刚刚做出的改动随时都有可能被覆盖掉。

您也可以选择别的文件路径来作为 slit list。下面这个例子中的 init 就对默认路径 做了调整:

例子 7.1. 指定 Slitlist


    session.slitlistFile: /home/me/etc/slitsort

注意,您是无论如何也找不到哪个选项用来彻底禁用排序的。 在补丁制作者看来,随心所欲的乱堆乱放一点好处都没有!

章 8. 工具栏

工具栏是 Fluxbox 用来显示信息的一块小区域,比如时钟啦,或者代表要运行的程序的按钮。

它由 init 和 style 文件负责配置。Init 中的设置一般可以经由工具栏菜单予以改变。

通过设置 init 文件里的 session.screen0.toolbar.visible: false 这一行,您可以关闭 工具栏(也就是让其不可见)。

显示哪些工具是由资源文件(通常是 .fluxbox/init 中的 toolbar.tools 这一条)负责配置的,

例子 8.1. 工具栏的工具示例

session.screen0.toolbar.tools: clock, iconbar, workspacename

可能用到的工具:workspacename,prevworkspace,nextworkspace,iconbar, systemtray,prevwindow,nextwindow,clock

工具栏的宽度,透明度以及层次皆可通过工具栏的菜单予以配置。在工具栏中的时钟或工作区名上 右键单击均可以弹出工具栏菜单。

通过配置,可以在图标栏中显示下述功能项之一:None,Icons from all workspaces,Workspace Icons, all windows from Workspace,All Windows from all workspaces

它的显示方式由style文件负责配置。

章 9. 菜单编辑

装好 Fluxbox 后,在桌面上右击鼠标键后您就 可以看到那个称为“菜单”的程序启动器了。如果不能通过编辑它而启动您的 程序的话就没毫无用处了。这一节试图回答所有与此相关的问题。

先说明一下,Fluxbox 附带了一个很棒的工具,叫做 fluxbox-generate_menu 。 它试着找出系统中已安装的常见程序(如浏览器,终端模拟器等)的执行路径,然后再构造一个 菜单文件。fluxbox-generate_menu "fluxbox-generate_menu"中有详述。

设置菜单文件位置

默认情况下 Fluxbox 菜单位于 ~/.fluxbox/menu。但 这个配置可以通过您的 init 文件加以修改。这里有一个示例:

例子 9.1. 设置菜单文件


    session.menuFile:       ~/.fluxbox/menu

如果您希望采用别的文件作为菜单文件,只需修改 ~/.fluxbox/menu 即可。但默认的配置应该符合大多数人的口味。

可用的命令

Fluxbox 菜单文件是一个普通的文本文件。您可以通过它来构造 subfolders, 启动程序,控制 workspaces,配置 Fluxbox 和退出 X。它采用的命令如下所示:

    # menu file 2004-06-22
    [begin] (MenuTitle)
    [submenu]  (SubMenuName) {SubMenuTitle}
    [exec] (ApplicationName) {/path/to/program}
    [include] (/path/to/menufile) <icon file>
    [end]
    [nop] (--------)
    [workspaces] (SubMenuName)
    [stylesdir] (/path/to/stylesdir)
    [config] (FluxboxConfiguration)
    [reconfigure] (Reconfigure)
    [restart] (Restart)
    [exit] (Exit)

  • 注释以 # 起头,到行末的所有字符都将忽略。

  • []中的文字是 fluxbox 执行的命令。

  • ()中的文字是菜单上显示的文字。

  • {}中的文字是此项如果点选后启动的程序。

  • <> 中指定了一个图标文件。它必须是一个绝对路径且为 xpm 格式。

  • 要包含指令的那个参数如果是目录的话,目录里的每个文件就都会包含进去。

    被包含的文件必须以[begin]开头,以[end]结尾。

以上的所有项不是在任何情况下都需要的,比如[end]对图标而言就没有任何意义。

注意子菜单的嵌套深度并没有一个硬性限定。但实际使用时可能会有。

[nop] - 如果不想执行任何命令而只是作为菜单中的一个分隔 项的话,您可以用它来填入文字或空行。

[reconfigure] - 如果您用菜单来更改 Fluxbox 的配置, 在退出 Fluxbox 之后,所做出的更改就自动失效了。必须写到They need to be written to the init 文件里才能让更改固定下来,您可以在更改配置后再点击 reconfigure 来 达到这个目的。

[restart] - 我只想确保人人都知道,restart 只是重启 Fluxbox,而不是整个系统。

例子 9.2. 菜单文件


       # Fluxbox menu file
       [begin] (Fluxbox)
         [exec] (rxvt) {rxvt -ls}
         [exec] (netscape) {netscape -install}
         [exec] (The GIMP) {gimp}
         [exec] (XV) {xv}
         [exec] (Vim) {rxvt -geometry 132x60 -name VIM -e screen vim}
         [exec] (Mutt) {rxvt -name mutt -e mutt}
         [submenu] (mozilla)
           [exec] (browser) {mozilla -browser}
           [exec] (news) {mozilla -news}
           [exec] (mail) {mozilla -mail}
           [exec] (edit) {mozilla -edit}
           [exec] (compose) {mozilla -compose}
         [end]
         [submenu] (Startup)
           [exec] (gkrellm) {gkrellm -w}
           [exec] (xmms) {xmms -p}
           [exec] (galeon) {galeon -s}
           [exec] (kdeinit) {kdeinit}
         [end]
         [submenu] (Window Manager)
           [exec] (Edit Menus) {nedit ~/.fluxbox/menu}
           [submenu] (Style) {Which Style?}
             [stylesdir] (~/.fluxbox/styles)
             [stylesmenu] (Fluxbox Styles) {/usr/local/share/fluxbox/styles}
           [end]
           [config] (Config Options)
           [reconfig] (Reconfigure)
           [restart] (Restart)
         [end]
         [exit] (Log Out)
       [end]
       # end of menu file

完整的配置请查阅 Fluxbox 附带的 menu 文件样本。

章 10. 主题

主题的入门

本节由 Justin Rebelo aka "demerol" 贡献。

style 是什么以及它的工作原理?

style 主要就是指 Fluxbox 的主题。它其实就是一个简单的 ASCII 文本文件,用来指示 Fluxbox 来如何生成窗口管理器各个组件的外观的。 它们通常位于 ~/.fluxbox/styles 和 Fluxbox 的全局共享目录下, 至于具体位置,要依据您是如何安装 Fluxbox 而定了。

我自己该怎么制作主题?

用您最拿手的文本编辑器打开一个 style (我推荐 vim),从这里起步。看看这个 style,它的结构是什么样子, 它是如何组织的。稍加观察,您所有的疑问差不多就都能得到解答了。

style 的构成

style 由几个主要组件构成,每个组件又有自己独立的指令。其中, toolbarmenuwindow 是 三个最主要的组件。window.* 指令用于控制窗口框架 的外观,window.tab.* 控制窗口标签的外观。menu.* 则控制您右击 桌面后弹出的菜单的外观。toolbar.* 是位于屏幕顶部或底部的那一栏。 如果您没有明确设置 Slit (在其他窗口管理器中也称为 dock,wharf 等等) 的 style,它也同样由 toolbar 来控制。

我该如何改变 slit 的外观呢?

slit 通常和工具栏的 style 设置选项相同。大多数情况下这种方式运转的相当良好。 如果您要明确的设置 slit 的style,由三种 style 指令可供使用:


    slit: [texture option]
    slit.color: [color value]
    slit.colorTo: [color value]

这些命令的工作方式就像在菜单、窗口中那样,比如在给 Slit 配上纹理图案的时候。

我可以设置背景图案或颜色吗?

在 style 文件的某处,您或许会发现有一行以 rootCommand 打头,然后紧接着是一个设置 style 背景颜色或图案的命令。 Fluxbox 中的 bsetroot 程序是专门用来设置颜色和渐变式背景,而 fbsetbg 则是专门 用于设置图像背景的。

我可以在我的 style 文件中添加注解/注释吗?

当然可以啦,要注释的那一行用哈希(#)符号和一个感叹号(!)开头, 或者用 C++风格的注释方法(//)就可以了。

我还有更多的问题...

瞧一下 Fluxbox 提供的 styles,您应该就能找到答案了,要么试试其他的设置。如果 还是还是摸不着北,到 OPN 上的#fluxbox 频道上来。我的昵称是 demerol。

主题的高阶编辑

本节的大部分内容取自 Fluxbox 0.1.13版 manpage 内容,或深受其影响。 通常,manpage 就是这方面的绝对权威,但这一节或许对刚起步的 style 设计人员来说 更有启蒙价值吧。

要理解 style 的工作机制,有一点对 X11 中的“资源”概念的了解是很有裨益的。

X11 的资源由键和键值组成。键由更小的键组成 (有时称为子键),每个子键用点 (.) 隔开。键也可以 包含星号(*) 以作为通配符,意思是说已输入的某行文字将和多个键匹配。 在某些 styles 仅仅基于一或两种颜色的时候,这种方用法很有用。

Fluxbox 允许您对其三个主要组件进行配置: 工具栏,菜单,窗口修饰。slit 自动从工具栏继承了 style,但如果需要的话也可以另外设置。 拖拉窗口时用于显示坐标位置的小窗口,它的 style 则是从被拖拉窗口的标题栏那儿借来的。

这里有些容易上手的例子,说明了一些基本语法:

例子 10.1. Toolbar Clock style


    toolbar.clock.color:  green

这一项可将工具栏上时钟的“颜色”资源设置成 绿色。另一个例子:

例子 10.2. Menu style

    menu*color: rgb:3/4/5

这个则是将菜单及所有子菜单的颜色设置成 rgb:3/4/5。有关颜色命名的描述,请 请参见 X11 manpages。当然对于 menu.title.colormenu.frame.color 也是适用的。再看一个:

例子 10.3. Font style

    *font: -b&h-lucida-medium-r-normal-*-*-140-*

所有键的“字体”资源的设置,像这样,一步即可到位。有关系统中所安装的字体的信息,您可以使用像 xfontselgfontselxlsfonts 这样的程序来了解。

其实 Fluxbox 之所以吸引人的一个重要特色在于它的纹理实时渲染功能。纹理描述直接由它们所适用的键来指定,例如:

例子 10.4. Texture style


    toolbar.clock:   Raised Gradient Diagonal Bevel1
    toolbar.clock.color: rgb:8/6/4
    toolbar.clock.colorTo: rgb:4/3/2

别急,我们马上就会解释这些指令的工作原理。一个纹理的描述由五个域组成,分别是:

表格 10.1. Texture directives

DirectiveDescription
Flat / Raised / Sunken / Tiled

让组件的外观分别是 flat, raised 或者 sunken。

Tiled 只对 pixmaps 起作用而且并不产生缩放效应。

Gradient / Solid绘制单色或渐变色的纹理。
Horizontal / Vertical / Diagonal / Crossdiagonal / Pipecross / Elliptic / Rectangle / Pyramid选择其中一个纹理类型。只有同时指定了 Gradient,它们才有效。
Interlacedinterlace the texture (darken every other line). 此选项常和渐变色纹理搭配使用,但自 Blackbox 0.60.3版后,(即所有的 Fluxbox 版本),同单色纹理也可一起使用。
Bevel1 / Bevel2使用 bevel 的种类。Bevel1 是默认值,阴影处于图像边缘处。Bevel2 是替代选项,阴影处于图像边缘内侧 一像素内。

除了纹理描述以外,还可以使用 ParentRelative 选项,可以让某个组件看起来就像 是其上一级的一部分。

所有渐变色纹理都有两个颜色值组成: colorcolorTo。 在 Solid 模式 中使用 interlace 时,colorTo r用于查找 interlace 颜色。

提供了哪些键,每个键的取值情况怎样,这些问题的完整答案都可以在 附录 C, Theme Reference 中找到。

乍一看,那么冗长的一张清单,但别忘了,要构造您自己的 style ,有时候用一条指令就可以轻松设置许多键的,例如:

例子 10.5. Typical short style


    *color:             slategrey
    *colorTo:           darkslategrey
    *unfocus.color:     darkslategrey
    *unfocus.colorTo:   black
    *textColor:         white
    *unfocus.textColor: lightgrey
    *font:              lucidasans-10

附录 A. 建立 .xinitrc/.xsession

Verin 撰写

xinit 的地位

窗口管理器只是又一个 X11 应用程序而已,就像 netscapegimpxterm 那样。许多刚刚接触 X11 的人以为是 X11 在执行窗口管理器,窗口管理器再执行其它程序。但这种看法是 其实是错误的。如果配置得当的话,您可以在运行各个应用程序的同时,退出正在使用的 窗口管理器,再运行另一个窗口管理器。

X11 真正执行的程序,也就是用于执行其它程序的, 是您的 .xinitrc.xsession 脚本。在启动 X11 的时候, .xinitrc.xsession 脚本就开始运行,当脚本运行完毕后,X11 也就完成使命了。鉴于它的重要性,我再重复一次: .xinitrc 执行完毕之时,也就是 X11 结束使命之日。 窗口管理器 是否退出与此毫无干系。

脚本布局

好吧,首先回顾一下您已经了解的知识。 在 shell 中敲入一条命令后,您就什么事都做不了了,除非等到该命令 执行完毕并退出。您的 .xinitrc.xsession 脚本也是如此。当脚本开始执行时, 凡遇到任何一个需要很长时间运行的程序(多数 X11 程序都是这样的), 它就停在那儿等到该程序执行完毕为止。

理想情况下,脚本里应该只有一处使得 X11 挂起。并且您多半都希望它位于脚本的末端。 所以,如果您希望 X11 下的程序在未到达此“挂起点”前先运行,您应该将它们置于后台。 即在行尾添上一个&。假设在运行其它程序的同时,您 还想执行 xclock,将下面这行放在“挂起点“之前:

    xclock &

接下来就是您所看到的那个 exec 玩意儿, 很多参考资料在讲解如何将窗口管理器时添加到脚本中时都谈到了它。 但老实说,并不是非要它不可。如果您把窗口管理器放到脚本的最末端,即使不用 exec,X11 也会自动挂起。

那么要 exec 还有什么用呢?好吧,比方说您要在脚本里 放置多个窗口管理器的启动行,但只想使用一个。那么,您就可以利用 exec 将所选的启动行放到其它启动行前面。因为 exec 的意思就是:

"用这个程序代替我,换言之,启动这个程序,等它一结束马上就终止我自己。"

您要是把 exec wmaker 放到 exec enlightenment 的前面,那么当 wmaker 结束后,脚本也就执行完毕了,而不会继续执行下一行。

如果说不必要的话,您懂我的意思吗?用一组注释的窗口管理器启动行,也可以实现刚才的功能。

Another way to do things

As an alternative, 您可以启动窗口管理器,然后将它的进程 ID 保存到某个环境变量中:

        wmaker & wmpid=$!

上面这一句代码将 wmaker 置于后台(&)运行 并将其进程 ID($!)保存到变量(wmpid)中。 之后要构造“挂起点”时,只需 wait

    wait $wmpid

要么也可以把您想要挂起的程序,如 gkrellm 之类的,置于前台来达到目的。 但要记住,当此程序一结束,X11 会话也就关闭了。

现在,我采用的是 wait 方法,因为我想在执行 dockapps 等等程序前 先执行我的窗口管理器。同样,在做其它事之前,我想先更改一下 X11 服务器的设置,比如 dpms,屏保,甚至是 扩充一下我的字体路径内容(安装一些我不想让别人使用的字体)。然后万事俱备后,我还想清理一下我的字体路径, 主要是因为在运行 display 管理器的时候,重置字体路径的效果一直不太好。

例子 A.1. .xinitrc


    # turn off screen blanking and turn on energy star features
    xset s off
    xset dpms 600 60 60

    # add my optional fonts to the font path
    xset +fp "$X_FONTPATH"
    xset fp rehash

    # export the current environment, in case it needs to be debugged
    env > ~/.xenv

    # window manager
    fluxbox & wmpid=$!

    bbrun &
    wmCalClock &
    wmxmms &

    # HANG POINT - wait for window manager to exit
    wait $wmpid

    # restore the x fontpath
    xset fp default

附录 B. Frequently asked questions (FAQ)

B.1. Slit 是什么?
B.2. 有没什么方法可以让 Slit 中的 dockapps 按某种顺序摆放?
B.3. 我怎么改变工具栏的时间显示格式?
B.4. 我改动了我的 ~/.fluxbox/init,但是之后就被覆盖掉了。
B.5. 标签的工作方式是怎样的?
B.6. 在打开反锯齿功能后,我的字体就变得硕大无比!我该怎么解决这个问题?
B.7. 看起来像 Snap 这样的老式字体不能用 AA... 这是怎么回事?
B.8. 我一直听到有人在讨论什么 Artwiz 字体。能给点提示吗?
B.9. 我如何设置我的背景?
B.10. 当我更改主题时,背景变得惨不忍睹了。
B.11. 我可以在 Fluxbox 中使用现有的 .blackboxrc 吗?
B.12. 怎样才能在 Fluxbox 启动时自动运行应用程序?
B.13. 我可以在 Fluxbox 中使用 Blackbox 的风格(主题)吗?
B.14. 我该如何设置我的 .xinitrc/.xsession?
B.15. 支持 KDE 吗?
B.16. 支持 Gnome 吗?
B.17. BBtools 没有采用我当前的风格设置,即使重启后仍旧如此。
B.18. 使用某些主题时,标签看起来好恶啊,怎么办啊?
B.19. 怎样把图标放到 Fluxbox 的桌面上来呢?
B.20. Fluxbox 0.9.6 跑起来好慢啊...
B.1.

Slit 是什么?

首先要明确的是 Slit 不是Fluxbox 的工具栏。

Slit 是 dockable applications 用来‘落脚’的地方。我们有专门的一章用来讲述 Slit: 章 7, Slit。在提出有关 “slit 是什么”以及“slit 如何工作”之类的问题时,先读完那一章。

B.2.

有没什么方法可以让 Slit 中的 dockapps 按某种顺序摆放?

在 Fluxbox 0.1.10之后的版本里,可以。章 7, Slit中有解释。

B.3.

我怎么改变工具栏的时间显示格式?

在您的 init 中修改下面这一行:

session.screen0.strftimeFormat: %a %d %H:%M

欲知此格式的信息,在电脑上运行 man 3 strftime

B.4.

我改动了我的 ~/.fluxbox/init,但是之后就被覆盖掉了。

在 0.1.8-bugfix2 之前的版本中这个 bug 一直存在。在通报这个问题前请先升级到最新的版本或打上最新补丁。

B.5.

标签的工作方式是怎样的?

参见 章 4, 标签

B.6.

在打开反锯齿功能后,我的字体就变得硕大无比!我该怎么解决这个问题?

在 Xft 中,字体的处理方式与以往不同。对For starters, 在您的主题(style)文件中列出下面一行:


*.font: Verdana:size=7

用别的字体或尺寸当然也行,但上面提到的例子应该可以让菜单还用的过去。关于您想用的字体的种类信息,看 下面这个问题。

B.7.

看起来像 Snap 这样的老式字体不能用 AA... 这是怎么回事?

只要您在 Fluxbox 中激活 AA,它就依赖 Freetype2 渲染文字。如果您不用 AA,X11自身的字体渲染 就会启用。因为 FT2 支持 X11 所支持的全部格式,所以在 Fluxbox 中字体的选择余地非常有限。在本文档撰写之时,FT2 支持下列格式:

  • TrueType 文件(.ttf) 和集合 (.ttc)

  • ASCII (.pfa) 或 二进制(.pfb)格式的 Type 1 字体文件。

  • Type 1 Multiple Master 字体

  • Type 1 CID-keyed 字体

  • OpenType/CFF (.otf) 字体

  • CFF/Type 2 字体

  • Adobe CEF 字体 (.cef)

  • Windows FNT/FON 位图字体

另一方面,Freetype 1 只支持 TrueType 字体,即使通过使用第三方库可以启用对 GX 和 OTF 字体的支持。详细情况可以到 Freetype 主页上查找。

B.8.

我一直听到有人在讨论什么 Artwiz 字体。能给点提示吗?

附录 D, 在 Fluxbox 中使用 Artwiz 字体 中给出了解释。

如果你喜欢 Artwiz 字体,但是不喜欢它们在终端里的样子,可以考虑一下 LFP 字体包,网址是 Linux Font Project。那儿有两套字体,一套是 LFP 宽度固定字体 (适合终端里采用),另一套是宽度可变字体 (适合其他场合)。前者在 Linux 控制台下也可以使用。

B.9.

我如何设置我的背景?

这个问题在章 6, 桌面背景中有解答。

B.10.

当我更改主题时,背景变得惨不忍睹了。

章 6, 桌面背景中有一种解决方法。

B.11.

我可以在 Fluxbox 中使用现有的 .blackboxrc 吗?

当然可以,但别忘了给工具栏和 keygrabbing 添加相应的设置。将您的 blackboxrc~/.fluxbox/init 用符号链接关联起来是个蛮聪明的做法。

B.12.

怎样才能在 Fluxbox 启动时自动运行应用程序?

参见 附录 A, 建立 .xinitrc/.xsession

B.13.

我可以在 Fluxbox 中使用 Blackbox 的风格(主题)吗?

可以。两者的 tarballs 应该是 100% 可以呼唤使用的。对 Waimea 和 Openbox 项目来说也是如此,但我不敢担保。我也没有从两个项目中任何一方 处得到过这种承诺,但 Fluxbox 的一个目标就是保持和 Blackbox 风格的兼容。

B.14.

我该如何设置我的 .xinitrc/.xsession

参见 附录 A, 建立 .xinitrc/.xsession

B.15.

支持 KDE 吗?

是的,在 configure 中使用 --enable-kde 选项。这样就确保 KDE 托盘图标可以出现在 slit 中。

B.16.

支持 Gnome 吗?

是的,在 configure 中使用 --enable-gnome 选项。 这样便会启用 Gnome 提示。 在 Fluxbox 0.1.12 以上的版本中,默认情况下就是开启 Gnome 支持的。

B.17.

BBtools 没有采用我当前的风格设置,即使重启后仍旧如此。

将您的 ~/.blackboxrc 做一个到 ~/.fluxbox/init 的简单链接就可以了,例如用如下命令:

    $ ln -s ~/.fluxbox/init ~/.blackboxrc
B.18.

使用某些主题时,标签看起来好恶啊,怎么办啊?

0.1.14 或之前的版本。

要想标签看起来 (甚至更) 漂亮,您需要给您的风格(主题)添加额外的几项。但要注意, 你可以不必这么做,因为 Fluxbox 本身就足以调整到一个合适的颜色/风格。但如果想更进一步参与到外观的控制 上来,您或许需要添加下面几行:

例子 B.1. 在 style 文件中自定义标签

    ! -- tab style (for Fluxbox)
    window.tab.justify:                     Right
    window.tab.label.unfocus:               Flat Solid
    window.tab.label.unfocus.color:         rgb:AC/AC/AC
    window.tab.label.unfocus.textColor:     black
    window.tab.label.focus:                 Raised Solid
    window.tab.label.focus.color:           rgb:CC/CC/CC
    window.tab.label.focus.textColor:       black
    window.tab.borderWidth:                 1
    window.tab.borderColor:                 rgb:10/10/10
    window.tab.font:                        fixed
    ! --- end, tab style

那好,上面这些是做什么的呢?主题制作都是和这类似的东西。如果曾经做过 Blackbox 主题的话,我相信对此您一定 不会陌生 (否则 章 10, 主题 或许会有用)。

同样要注意的是,经过添加修改后的主题在 Blackbox 中仍旧可以完好的使用,所以您什么都不会损失。

B.19.

怎样把图标放到 Fluxbox 的桌面上来呢?

Fluxbox 中有个程序可以完成此功能,就是 fbdesk. 现阶段 fbdesk 还没有随 fluxbox 一同打包。还有其他一些选择:RoxFiler 项目,ideskxdesk

B.20.

Fluxbox 0.9.6 跑起来好慢啊...

在您 .xinitrc 文件中 exec fluxbox 语句前加上下面一行:

export LC_ALL=C

应该可以帮的上新的 Redhat 用户。

附录 C. Theme Reference

Theme directives

这张表完整的记录了可用的主题指令,以及它们可以赋予的值。用法细节参见 章 10, 主题

表格 C.1. Toolbar styles

toolbarTexture
toolbar.heightNumber
toolbar.colorColor
toolbar.colorToColor
Buttons
toolbar.buttonTexture or ParentRelative
toolbar.button.colorColor
toolbar.button.colorToColor
Color of unpressed button arrows
toolbar.button.picColorColor
Buttons in pressed state
toolbar.button.pressedTexture (e.g. Sunken) or ParentRelative
toolbar.button.pressed.colorColor
toolbar.button.pressed.colorToColor
Color of pressed button arrows
toolbar.button.pressed.picColorColor
Workspace label
toolbar.labelTexture or ParentRelative
toolbar.label.colorColor
toolbar.label.colorToColor
toolbar.label.textColorColor
Workspace label
toolbar.workspaceTexture or ParentRelative
toolbar.workspace.pixmapPixmap
toolbar.workspace.colorColor
toolbar.workspace.colorToColor
toolbar.workspace.textColorColor
toolbar.workspace.fontFont
Window label
toolbar.windowLabelTexture or ParentRelative
toolbar.windowLabel.colorColor
toolbar.windowLabel.colorToColor
toolbar.windowLabel.textColorColor
Clock
toolbar.clockTexture or ParentRelative
toolbar.clock.pixmapPixmap
toolbar.clock.colorColor
toolbar.clock.colorToColor
toolbar.clock.textColorColor
toolbar.clock.fontFont
Iconbar if empty
toolbar.iconbar.emptyTexture or ParentRelative
toolbar.iconbar.empty.pixmapPixmap
toolbar.iconbar.empty.colorColor
toolbar.iconbar.empty.colorToColor
toolbar.iconbar.emptyTexture or ParentRelative
Iconbar focused and unfocused
toolbar.iconbar.focusedTexture or ParentRelative
toolbar.iconbar.focused.pixmapPixmap
toolbar.iconbar.focused.colorColor
toolbar.iconbar.focused.colorToColor
toolbar.iconbar.focused.textColorColor
toolbar.iconbar.focused.fontFont
Text
toolbar.justifycenter, left, or right
toolbar.fontFont

表格 C.2. Menu styles

Title
menu.titleTexture
menu.title.colorColor
menu.title.colorToColor
menu.title.textColorColor
menu.title.fontFont
menu.title.justifycenter, left, or right
Frame
menu.frameTexture
menu.frame.colorColor
menu.frame.colorToColor
menu.frame.textColorColor
menu.frame.disableColorColor
menu.frame.fontFont
menu.frame.justifycenter, left, or right
Submenu bullets
menu.bulletempty, triangle, square, or diamond
menu.bullet.positionright or left
menu.submenu.pixmapPixmap
Highlighted item
menu.hiliteTexture (e.g. Raised)
menu.hilite.colorColor
menu.hilite.colorToColor
menu.hilite.textColorColor
menu.selected.pixmapPixmap
menu.unselected.pixmapPixmap

表格 C.3. Window styles

Title
window.title.focusTexture
window.title.focus.colorColor
window.title.focus.colorToColor
window.title.unfocusTexture
window.title.unfocus.colorColor
window.title.unfocus.colorToColor
window.title.heightNumber
Label
window.label.focusTexture or ParentRelative
window.label.focus.colorColor
window.label.focus.colorToColor
window.label.focus.textColorColor
window.label.unfocusTexture or ParentRelative
window.label.unfocus.colorColor
window.label.unfocus.colorToColor
window.label.unfocus.textColorColor

表格 C.4. Handlebar styles

window.handle.focus.colorColor
window.handle.focus.colorToColor
window.handle.unfocusTexture
window.handle.unfocus.colorColor
window.handle.unfocus.colorToColor

表格 C.5. Resize grip styles

window.grip.focusTexture
window.grip.focus.colorColor
window.grip.focus.colorToColor
window.grip.unfocusTexture
window.grip.unfocus.colorColor
window.grip.unfocus.colorToColor

表格 C.6. Window button styles

window.button.focusTexture or ParentRelative
window.button.focus.colorColor
window.button.focus.colorToColor
window.button.focus.picColorColor
window.button.unfocusTexture or ParentRelative
window.button.unfocus.colorColor
window.button.unfocus.colorToColor
window.button.unfocus.picColorColor
window.button.pressed Texture
window.button.pressed.colorColor
window.button.pressed.colorToColor

表格 C.7. Window frame styles

window.frame.focusColorColor
window.frame.unfocusColorColor

表格 C.8. Tab styles

window.tab.justifyright, left or center
window.tab.label.unfocusTexture
window.tab.label.unfocus.colorColor
window.tab.label.unfocus.textColorColor
window.tab.label.focusTexture
window.tab.label.focus.colorColor
window.tab.label.focus.textColorColor
window.tab.borderWidthNumber of Pixels
window.tab.borderColorColor
window.tab.fontFont

表格 C.9. Font on window label styles

window.fontFont
window.justifycenter, left, or right

表格 C.10. Miscellaneous styles

Border drawn around all components
borderWidthNumber of pixels
borderColorColor
bevelWidthNumber of pixels
handleWidthNumber of pixels
frameWidthNumber of pixels
Command to be executed whenever the style is loaded
rootCommandShell command, e.g. fbsetbg nicepiccy.jpg
Old BB 0.51 resources
menuFontFont
titleFontFont

附录 D. 在 Fluxbox 中使用 Artwiz 字体

简介

所谓的 Artwiz 字体其实是一个自称为 Artwiz 的家伙创造的一套字体(真够难以置信的)。 您可以前往 sf 下载与 gtk2/kde3 应用程序兼容的 aleczapka 的字体或是可能原始一点的 Han 的字体。

如果手头上有 mandrake 的 RPM 包的话,您就不必手动安装这些字体了,因为它们包含在其中了。 否则的话,嗯,没关系,让我来告诉你怎么办。有两种方法可供安装 artwiz 字体: system-wide 和 user-only。

System-wide 安装

如果您要为系统中的所有用户都装备上这套字体,请把源码包下载到 /tmp 然后像 这样做:

    # cd /usr/X11R6/lib/X11/fonts
    # tar xjf /tmp/artwiz-fonts.tar.bz2
    # cd fluxbox-artwiz-fonts
    # mkfontdir
    # chkfontpath -q -a /usr/X11R6/lib/X11/fonts/fluxbox-artwiz-fonts:unscaled

然后重启字体服务器即可。值得注意的是,您所用的发行版 可能会使用别的位置来存放系统范围的字体,像 /usr/share/fonts。但通常上面所列出的默认位置应该不会有问题。

User 安装

如果您只想为单独一个用户配备的话,就更容易了。下载源码包到其主目录下,然后再:


    $ tar xjf artwiz-fonts.tar.bz2
    $ mv fluxbox-artwiz-fonts .fonts
    $ mkfontdir $HOME/.fonts

编辑 .xinitrc .xsession 文件(依赖于您启动 X11 方式而定),在启动 其它程序前先写上下面一行:

    xset +fp $HOME/.fonts

然后(重)启动 X11 并用xlsfonts xfontsel 命令来检查系统是否已经识别 出了这套字体。

Bugs

artwiz 字体有时会与您的 locale 设置相冲突。要让它们正常工作的话,您得把下面这两句代码放到 您的 .xinitrc .xsession 文件开头:


    export LC=C
    export LC_ALL=C

这些设置是专门针对 locale 的。如果发现您的字体丢失或者其它与 locale 相关的问题,再把它们 去掉即可。而 aleczapka 提供了另外一种解决方案:

下面的方案可以让您在继续保留区域设置的同时也可以在 Fluxbox 中使用 Artwiz 字体。

Locale 设置的修正

解决方案其实很简单。你所要做的只是修正 fonts.alias (和/或 fonts.dir )文件。

这种方法也适用于其他的一些程序(比如 Evolution 和 UTF-8 )。首先您需要构造一个合适的 fonts.dir 文件。它应该位于 Artwiz 字体的安装目录。不然,就改到那个目录 并运行 mkfontdir

该文件的语法简单易懂。第一行列出上述目录下的字体数目。接下来的每一行都是这种形式


     font_filename fontname

我们在这里举一个 fonts.dir 文件的例子:

例子 D.1. fonts.dir

14
glisp.pcf.gz -artwiz-glisp-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
gelly.pcf.gz -artwiz-gelly-medium-r-normal--10-100-75-75-p-90-iso646.1991-irv
edges.pcf.gz -artwiz-edges-medium-r-normal--10-100-75-75-m-50-iso646.1991-irv
nu.pcf.gz nu
drift.pcf.gz drift
cure.pcf.gz cure
aqui.pcf.gz aqui
lime.pcf.gz -artwiz-lime-medium-r-normal--10-100-75-75-m-50-iso646.1991-irv
snap.pcf.gz -artwiz-snap-medium-r-normal--10-100-75-75-p-90-iso646.1991-irv

我们感兴趣的是那些由字体的简要描述所构成的条目,在此例中描述的是 Nu,Drift,Cure 和 Aqui 字体。 问题是它们缺乏完整的 X11 字体名称。

把文件改成:

14
glisp.pcf.gz -artwiz-glisp-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
gelly.pcf.gz -artwiz-gelly-medium-r-normal--10-100-75-75-p-90-iso646.1991-irv
edges.pcf.gz -artwiz-edges-medium-r-normal--10-100-75-75-m-50-iso646.1991-irv
nu.pcf.gz -artwiz-nu-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
drift.pcf.gz -artwiz-drift-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
cure.pcf.gz -artwiz-cure-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
aqui.pcf.gz -artwiz-aqui-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv
lime.pcf.gz -artwiz-lime-medium-r-normal--10-100-75-75-m-50-iso646.1991-irv
snap.pcf.gz -artwiz-snap-medium-r-normal--10-100-75-75-p-90-iso646.1991-irv

最后要做的是修正您的 fonts.alias 文件(以便在 iso646 之外 的其他 encoding 里也可以使用这些字体)。

语法是字体别名 字体名。例如,想在和 ISO-8859-2 encoding 下使用 Artwiz 字体的话,起个这样的别名(都只占用行)。


-artwiz-anorexia-medium-r-normal--11-110-75-75-p-90-iso8859-2 
-artwiz-anorexia-medium-r-normal--11-110-75-75-p-90-iso646.1991-irv 

您也可以瞧瞧我的 fonts.dir fonts.alias 文件,可以支持 ISO-8859-1,ISO-8859-2 和 iso10646-1 (UTF-8)。如果按照上面的方法设置的话,您就不需要将 LC_* 标志改成 C 或 POSIX 了。之后所有的应用程序(不只是 Fluxbox )都可以正常工作了; 而不再抱怨“can't convert character set”之类的了。

附录 E. 调试

一般信息

调试是一项可以通过学习来掌握的技艺。教你如何写好 bug 报告的优秀材料 很有一些,在动笔前请一定要先阅读一下,bug 终究逃不掉的,何况读读材料也不会要你的命。 我们是很想除掉 bug 的,而这离不开你的帮助 :-) 那么让我们全副武装直奔战场吧。 同时介绍两篇不错的文档 Bugzilla Bug Reporting HOWTO 和 Simon Tathams 的 How to Report Bugs Effectively

鉴于有些非官方补丁的性质,我们无法逐一给予支持。 这意味着(对你而言)你应该检查一下 Fluxbox 是否 是在没有用这些补丁的情况下出现的崩溃现象。 如果采用的 Fluxbox 补丁是由发行版维护人员打上的, 你应该找他商量这个问题。

如果需要比这篇指南里提供的还要多的有关调试的帮助,你可以 看看 irc.freenode.net 的 #fluxbox 频道里的人能否帮得上忙。主开发人员和一大群 可胜任的人一般都在那儿,所以你的问题基本上都可以得到解决。

Fluxbox 相关的东西

Fluxbox 的输出信息

像其他应用程序一样 Fluxbox 从哪个控制台下启动就会把信息发送到哪里。问题是在正常情况下所有的输出信息都会流向 文本控制台。将你的 Fluxbox 启动行改为 exec xterm 或者其它你喜欢的终端模拟器。启动 X11 时 Fluxbox 就会从那个 xterm 中自动运行,仔细瞧好, 你很容易就能看到 Fluxbox 放出的信息了。

我们需要的信息

我们要知道很多东西。确保你对它们都清楚。

  • 你所用的操作系统 / 发行版以及版本。

  • Fluxbox 版本,如果是从 CVS 上安装的,那么是哪一天?

  • 什么时候出的问题?你之前做了什么吗?你可以重现这个问题码?

  • 你的配置。在 ~/.fluxbox/init 中可以找到。

怎么处理 core dumps。

要是你使用 Fluxbox 的时候总是收到 core dump ,照着下面的指示来: 前往 OPN 上的 #fluxbox 频道,告诉 fluxgen(译注:fluxgen 就是 Henrik Kinnunen) 的你收到了一个 core dump。 它要什么信息你就提供给它。他可能会要你下面的事情。过程可能有些繁琐,但只要你稍微有点 常识和一些 Unix 的经验,其实并不难。对了,你需要 GNU 调试器,名称是 gdb

重新编译 Fluxbox

对,你没有看错!要成为一名真正的调试员,你必须带上调试符号重新构造一遍 Fluxbox 。

像平常那样去 Build Fluxbox,在 make 的时候加上以下选项:


    $ CFLAGS=-Wall -g3 CXXFLAGS=-Wall -g3 make

如果你使用的是 Fluxbox 站点或者你的发行版提供的源码包 RPMs,你可以这样:

    $ su
    # rpm -ivh fluxbox-0.1.11.1mdk.src.rpm
    # cd /usr/src/RPM/SPECS
    # env DEBUG=true rpm -ba fluxbox.spec
    # rpm -Uvh --force /usr/src/RPM/RPMS/i686/fluxbox*
    # exit
    $ mkdir -p ~/src/fluxbox
    $ cp -R /usr/src/RPM/BUILD/fluxbox* ~/src/fluxbox

进入 Fluxbox 目录(这样我们就不会搞错 core dump 了)。shell 有个俏皮功能用于禁止生成 core 文件。所以请确保 你真的得到了 core 文件:

    $ ulimit -c unlimited

启动 X11 让我们调试吧。怎么样可以让 Fluxbox 产生 core dump 就怎么做。 现在我们正式开始调试:

    $ gdb fluxbox core

先在 gdb (开头部分是 gdb 的提示符,不必敲入)里执行这个命令:

    (gdb) where

屏幕马上会给出许多输出。在这些信息中,凡是以 # 开头的,Fluxgen 都需要知道。

然后将它们粘贴到邮件里,并把~/.fluxbox/目录下的 4个设置文件作为附件一并发送给 Fluxgen。

但请先不要删除 core 文件和源代码目录。Fluxgen 可能要向你询问一些额外的问题,到那时你还要 用到它们的。如果 Fluxgen 没有明确地索要,就不要把 core 文件发送给他-- 因为它是你的系统特有的,对他而言,很可能并没有多大用处,况且它体积还不小。