xinyoo's profile城堡BlogLists Tools Help

城堡

欢迎浏览xinyoo的个人日志-------另外,www.xinyoo.net是我的另外一个Blog

Debian下通过路由器上网

原先一直通过pppoeconf拨号上网,换了用路由器以后需要做一些调整,pppoeconf自然就用不上了。
鼓捣了一下,也不知道科学不,做个笔记以备不时之需。

首先需要修改/etc/resolv.conf,设置路由器的IP:

内容:

nameserver 192.168.1.1

然后修改/etc/network/interfaces,给机子分配IP,可以用动态的:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp

或者静态的IP:

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.1.199
netmask 255.255.255.0
gateway 192.168.1.1

Swiftfox-3.04


一直用不惯Opera,虽然我一直很喜欢它的快速.然而用Firefox也不大爽,速度比windows下要慢很多…是不是要设置?反正我不会.喜欢Firefox又不大满意速度的可以试试.

我用swfitfox感觉速度比firefox还是有优势的.另外,Swiftfox只有Linux版本,英文版.注意选择自己的CPU类型.

软件主页:www.Getswiftfox.com

下载各种版本:http://getswiftfox.com/tarballs.htm
下载Deb安装包:http://getswiftfox.com/deb.htm

Debian或者Ubuntu可以通过源安装:
添加源

deb http://getswiftfox.com/builds/debian unstable non-free

sudo apt-get update

sudo apt-cache search swiftfox

选择适合自己(CPU)的swiftfox

sudo apt-get install swiftfox*

右键2个记事本打开方式

突然发现txt或者其他文档类型的文件右键-打开方式里居然有2个记事本[Notepad]的打开方式,这让我很是懊恼……先排除了病毒,然后上Google搜索了一下,好多答案都是牛头不对马嘴,基本上都搞什么修复工具,这也太麻烦了.最重要的是没说什么原因…

无聊搜索了一下Notepad.exe,除却一些备份的,居然有2个程序,一个在/Windows/,另外一个在/Windows/system32
注册表的路径在:
HKEY_CLASSES_ROOT\txtfile\shell\open\command

所以Google到的下面这个办法比较靠谱:

新建一个文本文件,内容如下,新建好了以后把文件后缀改为*.reg,双击导入就可以了

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\inifile\shell\open\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
00
[HKEY_CLASSES_ROOT\txtfile\shell\open\command]
@=hex(2):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,74,00,25,\
00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,4e,00,4f,00,\
54,00,45,00,50,00,41,00,44,00,2e,00,45,00,58,00,45,00,20,00,25,00,31,00,00,\
00

最懒人的办法:直接下载一个然后双击:

http://groups.google.com/group/xinyoo/web/twotxt.reg[点我右键另存为...]

注:其实我也看得不是很明白,应该就是消除一个路径,使用/Windows/system32下的这个notepad.exe

这个现象好像是装了ultraedit之后出现这个问题的的,估计就是这坨原因了,2个xx不影响使用,但是看着怪怪的.

Firefox-3.1


Opera应该是'常见'的浏览器中速度最快的了,不过字体设置太麻烦了,不像Firefox随便设置一下就能比较好的显示了,反正在我的机器上是这样,没经过设置的Opera显示的中文比较模糊,看起来比较累.
所以继续使用FF,如果想使用'TraceMonkey',就要下载测试版的Firefox(3.1).
打开方法:about:config,过滤jit,
javascript.options.jit.content
javascript.options.jit.chrome
2项都改成ture
现在3.1还是测试版,建议先下载3.1b1,就是第一个下载地址
Firefox 3.1 下载地址:
Firefox-3.1-b1   http://www.mozilla.com/en-US/firefox/all-beta.html
Firefox-3.1-b2preftp://ftp.mozilla.org/pub/firefox/nightly/latest-trunk/

新浪这流氓

啥也不说了,新浪这种货色不是流氓是什么?我就不信都开发了好几版了,会疏忽这个问题?

开机就运行…ilobbyupdater117.exe,网上搜索了下,都说是新浪收购了某XX软件,强行升级UTG的.

卸载的方法在google或者百度都能搜索到.

Pidgin-Tip

编译安装的Pidgin(2.52)无法打开,提示信息:

pidgin: error while loading shared libraries: libpurple.so.0: cannot open shared
object file: No such file or directory

可以通过以下方式解决:

$ sudo ldconfig

调整Gimp的菜单语言

Gimp默认根据系统设置的语言显示菜单,如果locale设置的是英文,那么Gimp显示的就是英文菜单.
Linux下的Gimp如果想调整语言,比如简体中文,可以输入
LANGUAGE=zh_CN gimp
同样,如果想调整为繁体中文的菜单就是:LANGUAGE=zh_TW gimp或者香港繁体:LANGUAGE=zh_HK gimp
想调整回去英文...LANGUAGE=en_US gimp
注意大小写.

FVWM简明使用指南

这篇文章的作者是王垠

为什么会出现在这里:原先的主页打不开了…而且我很喜欢这篇教程,所以就搬过来了.

其他:复制的时候有删节,省略了我不感兴趣的东西

Fvwm is a window manager for X11. It is designed to minimize memory consumption, provide a 3D look to window frames, and a virtual desktop.

— The FVWM(F? Virtual Window Manager) manual

    在看这个文档之前你最好对 Xwindow 的工作机制有一定了解。知道 X server 跟 WM 有什么关系。你可以参考我的 Xwindow 网页

01.FVWM 到哪里下载?有问题到哪里问?

先说正事吧。FVWM 的老巢在http://www.fvwm.org。那里有所有源码和各种按钮,菜单样式,图标,声音,抓图,……下载。

另外,你可能想要FVWM支持鼠标动作。你可以在 http://www.etla.net/libstroke/ 得到 libstroke. 下载那个为 FVWM 准备的版本,编译后安装,然后再编译 FVWM,它一般就会找到 libstoke,从而加入 stroke 的功能。

FVWM 的问题最好到 FVWM 邮件列表讨论,那里的人们都很热情。地址见 FVWM 的主页。

02.谁需要 FVWM?

并不是任何人都会喜欢 FVWM。使用 FVWM 显然不像用 KDE,Gnome 的桌面那么简单,你需要自己对它进行配置。它是一个老牌的,长久不衰的窗口管理器,它永远以一个忠实的 Xwindow 窗口管理器的方式工作。使用 FVWM,你可以学到很多有关 Xwindow 的东西,你会很快的明白 Xwindow 的工作原理,见识到 Xwindow 的强大和灵活。

如果你喜欢随意的控制自己窗口,让它们都乖乖听话,而不是老是跳出来挡在你面前。你喜欢随意定制自己窗口样式,喜欢快速高效的控制窗口,喜欢节省资源,…… 总之,你是一个挑剔的人。那么 FVWM 就是你最终的选择。

03.我与 FVWM 的故事

FVWM 的缺省配置是非常简陋的。当我第一次看到它时,"天哪!世界上还有这么难看的窗口啊!"我立即选择了 "quit"。然后我选择了 KDE 和 Gnome。

但是当我被 KDE,Gnome 华丽的难以忍受的不稳定性烦透了时候,当我快要放弃使用 Linux 和 Xwindow 的时候,我在 Knuth 的主页上看到了他的 Linux 系统下的漂亮的 FVWM 抓图。天哪!我忽略了世界上最强大的窗口管理器。它完全可以变得比任何其它窗口管理器漂亮,它让我领悟到了 Xwindow 的魅力。它不但很强大,而且可以和 KDE, Gnome 里的程序一起工作。

04.FVWM 是什么样子?

这个问题是永远不会有答案的。问这个问题就像在问:"Xwindow 是什么样子的?"也许勉强可以接受的回答是:"你想让它是什么样子,它就会成为什么样子。"

FVWM 是一个完全可 定制的窗口管理器。这是FVWM不同于很多其它WM的一个特点,它的一切行为方 式都是由一个配置文件: .fvwm2rc 决定的。没有了这个配置文件,FVWM 就成了一个废物: 鼠标和键盘几乎不起任何作用,没有菜单,没有窗口边框,没有按钮,甚至你根本不知道它其实正在运行!

但是一旦有了配置文件,FVWM就会变得威力无比,简单的配置文件可以实现基本的功能,复杂的配置文件甚至可以模拟很多其它WM甚至 Windows XP。

05.配置文件和它的位置

配置文件叫做 ~/.fvwm/.fvwm2rc, 在你的用户目录下。

配置文件有点像一个脚本语言。不要怕,这种脚本语言比起 Perl, awk 简单多了。你不需要学会编程。配置文件是在FVWM启动时读入并被FVWM执行的,你也可以在FVWM正在运行的时候与它"对话",即时执行命令和修改界面风格。

写配置文件,一个很好的出发点就是随 FVWM 源码发行的 system.fvwm2rc 文件。它的位置现在在源码包的 sample.fvwmrc/system.fvwm2rc。你也可以在这里下载一份 2.5.4 的system.fvwm2rc. 把它拷贝到你的 ~/.fvwm/ 目录下面, 改名为 .fvwm2rc. 作为我们的起始点。

注意sample.fvwmrc/ 这个目录下还有system.fvwm2rc-sample-95这样的配置文件,它们可以模拟 Windows 95 的操作方式,但是这个配置文件太大了,不适合用来修改成为自己的配置文件,你有兴趣可以自己看看,然后把里面某些你觉得很cool的东西贴到你的配置文件 里。

现在我们就来分析一下这个简单的配置文件里到底在说些什么。

06.什么是FVWM命令

一个配置文件里基本上是一些命令,与其它WM不同的是,FVWM并不区分样式命令和动作命令,你可以几乎在任何情况下使用任何命令。比如命令:

          Mouse 1 A CSM Style gvim TitleAtBottom

让你在任何时候按住 Ctrl-Shift-Alt 再点击鼠标左键(编号1),名叫gvim的窗口的标题栏就会跑到下面去。是不是很好玩?呵呵。这里 "Style" 是一个样式命令。

Mouse 2 A CSM All (rxvt) MoveToDesk 0

按住 Ctrl-Shift-Alt 再点击鼠标左键中键(编号2),所有的 rxvt 都会被移动到当前的桌面. 这里的 "All" 是一个可以附加条件和操作的条件动作命令,我们在后面会介绍。

07.怎样实验新的FVWM命令

实验一个命令的作用不需要重新启动FVWM,你可以先在 .fvwm2rc 里这样定义:

Key F3 A A Module FvwmConsole

然后启动fvwm, 这样你在任何时候按下 <F3> 键,就会启动一个叫做 FvwmConsole 的模块,你可以在里面输入Fvwm命令,回车它们就会执行,并且立即生效。这是直接与FVWM对话的方法。当然如果你想得到下面这么漂亮的 FvwmConsole, 还需要对 xterm/rxvt 的参数作一些设定。其实我的定义是:

Key F3 A A Module FvwmConsole -terminal rxvt -geometry 45x5-0+0 \
-bg gold -fg midnightblue \
-fn "-adobe-courier-medium-r-*-*-14-*-*-*-*-*-*-*"

08.常用命令

FVWM 可以有很多个虚拟桌面(desk)(几乎无穷多!),每个虚拟桌面可以被分成很多个页("page")。这些page相当于把你的屏幕扩大了很多倍。这一行就是设定每个desk包含多少page.
DeskTopSize 这类语句指定了整个FVWM的某种行为方式,类似的语句还有很多。下面列举一些,你第一次看本文可以草草略过这一节。

Read file. 插入另外一个文件file的内容。如果你会C语言,你就知道这个语句相当于 #include . 当你的配置文件在某一方面有很长内容时,比如我的配置文件里有大量stroke,你就可以把这些都写到另一个文件里,这样使主配置文件容易修改。

Exec app. 启动一个shell,并且在里面执行"app"命令。这时用菜单和按钮来启动程序时经常用到的命令。
如果你要启动一个X程序最好同时使用 exec, 比如

Exec exec rxvt

这样shell会执行"exec rxvt", 用rxvt替代自己的正文段,这样才不会出现很多shell在那里等待X程序返回。

Module FvwmXxx. 启动一个叫做 FvwmXxx 的模块。一个模块是一个程序,它直接通过管道与Fvwm通信,所以必须从Fvwm fork() 出来,而不能从一个 xterm 独立启动。模块可以无限制的扩展Fvwm的功能,只要 Xlib 允许。
ImagePath path. 指定一个路径,在配置文件里要用到的图标等文件就会到这个路径里去寻找。比如:

ImagePath +:/usr/share/icons:/usr/share/pixmaps:
$HOME/.fvwm/icons

加号是表示以前定义过的那个 ImagePath. FVWM 可以使用 .xbm, .xpm 和 .png 格式的图标。
Move, Raise, Lower, Resize, … 这些都是常用的操纵窗口的命令。
Close, Delete, Destroy, Iconify, Maximize, WindowShade. 关闭窗口,图标化窗口,最大化窗口,shade 化窗口. 你会发现Xwindow关闭窗口的方式有很多种,其中 Close 是最文明的一种,这会发给窗口一个消息让它收拾干净然后退出。Destroy 是立即杀死这个窗口,跟 xkill 的功能一样。Delete介于两者之间,先礼后兵,如果窗口不知道怎么收拾干净,那么就强行杀死它。
OpaqueMoveSize x. 如果一个窗口移动时显示内容,那么它必需占屏幕面积的 x%.
MoveToDesk, MoveToPage. 可以把任何窗口移动到指定的桌面和页面。
SnapAttraction. 设定在什么距离以内,满足什么条件的窗口就被吸附在一起。biaji~~~~~
WarpToWindow x[p] y[p]. 让鼠标移动到窗口范围以内。x,y是在窗口内的坐标,用百分比表示。后面如果有后缀"p", 就用像素来表示。
IgnoreModifiers. 你可以忽略某些键盘控制键。这将影响到你的鼠标和键盘热键定义。详细情况见鼠标和键盘一节。
DesktopName desk name. 定义第desk号桌面的名字叫 name.
Scroll. 移动你在桌面上的 viewport, 这样你可以把桌面当成一个整体来浏览。看到很大的范围。
Nop. 不操作,在有些时候需要用它来占位,下面我们会遇到这样的例子。
PipeRead. 从一个外部命令得到输入。这可以用来根据你的系统构造许多非常高级的控制方式。其中一种叫做"菜单式文件管理器"。我们在菜单一节会遇到这个用法。
SetEnv. 设置FVWM的环境变量。

就举这些吧……我只是举出了我有时会用到的,其实还有很多很多,你看看 FVWM 的manpage就知道了。

09.窗口上下文

Move, Close, WarpToWindow …这些命令如何知道作用于那个窗口呢?如果你因为点击了窗口上的按钮,边框,……而激发了这些命令,那么这些命令就会作用于这个窗口。或者你也可以用 条件选择命令确定一个或者一批窗口进行操作,见条件命令。 否则,这些命令不知道应该作用于哪个窗口,比如你在 FvwmConsole 里键入 "Close", Close 命令就没有窗口上下文,它缺省会出现一个"+"状的选择器让你选择一个窗口。如果你不希望命令在没有窗口上下文的时候自动让你选择一个窗口,那么你可以在 命令前面加上 "Silent".

10.鼠标和键盘

FVWM几乎可以以无穷的方式组合,来进行鼠标和键盘的操作。你还可以加入窗口上下文来进行更方便的动作。

键盘操作的定义:

Key Keyname Context Modifiers Function

它表示:在名叫 Keyname 的键在 Context 上下文按下时,如果控制键 Modifiers 组合按下,那么执行 Function. 键盘操作后面的部分跟鼠标一样的含义,我们下面只用鼠标操作来一起说明这些命令的用途。

鼠标操作的定义:

Mouse Button Context Modifiers Function

它表示:在鼠标编号为 Button 的键在 Context 上下文按下时,如果键盘控制键 Modifiers 组合按下,那么执行 Function.

鼠标键编号的方法是:1 左键,2 中键,3 右键。如果你的鼠标有轮子,那么一般4表示往上滚动,5表示往下滚动。

Context是鼠标按下的位置,它可以是:

  • R(Root Window) 根窗口
  • n (n 是0…9 之间的一个数)。第 n 号窗口按钮。按钮是这样编号的:
    1 3 5 7 9     0 8 6 4 2
    左边是奇数右边是偶数, 外面的大中间的小。
  • T(Title)标题栏
  • S(Sidebar)也就是边框. 也可以用 '[', ']', '-' , '_' 分别表示左,右,上,下的边框。
  • F(Frame)就是用来resize的那四个角落. 也可以用 '<', '^', '>' and 'v' 分别表示左上,右上,右下,左下的角落。
  • W(Working Area) 应用程序窗口工作区域
  • I(Icon window) 图标化的窗口。

这些上下文可以组合。比如 "FST" 表示在frame, sidebar, 或者 title.

Modifiers 是鼠标操作时同时的键盘控制键。M 表示 "Meta",在PC上就是Alt,S: shift, C: ctrl. 还有 A: any, N: none. 也可以组合,比如"MS" 表示同时按下Alt-Shift.

Function 就是任意的FVWM操作了,可以是一个直接的命令,也可以是一个 FVWM 函数。

现在我们分析一下下面这个定义:

Mouse 3 W       SC      CloseOrNot

这个定义是说,在窗口上点击鼠标右键,并且先按下 Shift-Ctrl,那么调用 CloseOrNot 这个FVWM函数。这个函数会作用与当前鼠标所在的上下文,也就是一个窗口。函数是这样定义的:

11.函数
DestroyFunc CloseOrNot
AddToFunc CloseOrNot
+ C Silent Close
+ M Nop

你可以把一系列的操作有条件的加入到一个叫做"函数"的结构里,以后这个函数就可以像命令一样被使用了。

AddToFunc 把动作附加到函数, 如果函数不存在就先创建这个函数。除了第一行,后面的行都以一个"+"号开头,这说明以下是上一个命令(AddToFunc)的继续。 DestroyFunc 是为了消除以前有可能定义过的函数体。这个函数 CloseOrNot 表示:

  • 如果是一个鼠标点击(C), 那么关闭这个窗口(Close), 但是如果现在不是在窗口上下文,也就是说,函数调用的时候没有一个确定的目标,那么不进行操作,而不是出现一个"+"字瞄准器让用户选择窗口。 这就是 "Silent" 的含义。
  • 如果鼠标点下去之后移动了,也就是"拖动"(M),那么不进行操作。

启动函数和退出函数

在 FVWM 启动和重新启动时都会调用 StartFunction, 而且在首次启动时会调用 InitFunction, 在重新启动时会调用 RestartFunction, InitFunction 和 RestartFunction 都是在 StartFunction 之后调用。每次重起和完全退出时都要执行 ExitFunction.

如果你有什么程序需要在FVWM启动时启动,那么就把它加到合适的函数里面去。比如,我的配置文件有这些内容:

DestroyFunc StartFunction
AddToFunc StartFunction
+ I Module FvwmButtons MainPanel
+ I Module FvwmAuto 500 Raise Nop
+ I Module FvwmAnimate
+ I Module FvwmTaskBar
+ I Exec exec xdaliclock
+ I Exec exec xloadimage -onroot -fullscreen ~/pic/cat_20.jpg
+ I Exec exec xsim

DestroyFunc InitFunction
AddToFunc InitFunction
+ I Exec exec xscreensaver -no-splash

DestroyFunc ExitFunction
AddToFunc ExitFunction
+ I All (xdaliclock) Close
+ I All (xscreensaver) Close
+ I All (xsim) Close

可见,我在第一次启动时会启动 xscreensaver 屏幕保护程序。-no-splash 是 xscreensaver 的参数。在每次重新启动和第一次启动时都要运行 FvwmButtons, FvwmAuto, FvwmAnimate, FvwmTaskBar 几个模块和 xdaliclock,一种 morph 数字的时钟,然后用 xloadimage 放一张漂亮的图片作为桌面背景,最后启动 xsim 中文输入法。

退出和重起时,我特意关闭了那几个启动时打开的程序,因为如果不关闭他们,像 xwin32, Exceed 这样的 Windows X server 不会 Reset.

每个命令前的 "I" 表示 Imediately, 立即执行,联想上面提到的 "C" 和 "M", 这个操作不等待任何鼠标动作。

12.窗口样式

Style 语句用于设定窗口的样式。你可以随心所欲的让不同的窗口有不同的样式。语法为:

Style stylename options

其中stylename是 你的窗口的名字,窗口的class名字,或者窗口的resource名字。如果你不知道这些 X window 的术语,那现在就姑且当作窗口的名字好了,以后多看看 Xlib 的说明书你就会明白这些东西。窗口的名字有可能不同于程序的名字,你不知道它叫什么名字可以用 xwininfo 程序或者 FvwmIdent 模块来查询。再次说明,FvwmIdent 是模块,不能从 xterm 的命令行运行。

stylename 里可以有 "*" 作为通配符。比如你可以说

Style *term TitleAtLeft

让所有以 "term" 结尾的那些窗口的标题拦都在左边。比如 "xterm", "cxterm", "qterm", … 都会采用这种样式。

options 是你想让满足条件的窗口以什么样的方式存在。options 的种类非常之多。比如:BorderWidth, HandleWidth, FocusFollowsMouse, TileCascadePlacement, … 它们有的需要参数,比如 BorderWidth 7, 指定边框宽度为7个像素。有些不需要参数,比如 FocusFollowsMouse/ SloppyFocus/ NeverFocus/ ClickToFocus 指明了几种互相排斥的键盘聚焦方式。 先举几个例子,这些都是 system.fvwm2rc 里的内容:

Style *           FocusFollowsMouse
Style * TileCascadePlacement
Style "Fvwm*" NoTitle, Sticky, WindowListSkip
Style "Fvwm*" BorderWidth 2, CirculateSkipIcon, CirculateSkip
Style "FvwmPager" StaysOnTop
Style "FvwmBanner" StaysOnTop
Style "FvwmButtons" Icon toolbox.xpm, ClickToFocus

开头的两行说明所有窗口,都是鼠标移进去的时候得到键盘聚焦,鼠标移出来就失去聚焦(FocusFollowsMouse),窗口出现的时候,先试图找一 个可以放下它而不挡住其它窗口的地方,如果不行再采用层叠放置的方式(TileCascadePlacement)。

下面是说明所有名字以 "Fvwm" 开头的窗口(在这里一般都是 FVWM 内部的模块),它们都没有标题栏(NoTitle),而且是sticky,也就是说即使桌面切换,它们也一直显示在屏幕上,边框宽度为 2, CirculateSkip 说明当FVWM要求轮询窗口进行批量操作时,这些窗口不被计算在内。第3,4行说明 FvwmPager, FvwmBanner 这两个模块一直显示在最上面。最后一行说明 FvwmButtons 模块使用 toolbox.xpm 的图标,需要鼠标点击才能得到键盘聚焦(ClickToFocus)。

总的说来,options指出了控制窗口的基本样式和政策,而不包括窗口各个部件具体的样式,它包括以下几个方面内容:

  • 窗口聚焦方式。是跟随鼠标(FocusFollowsMouse),还是需要点击才聚焦(ClickToFocus)…
  • 窗口标题栏。是否给窗口加上标题拦?如果加上,是放在左边,上边,还是下边?注意这里也不是设定具体标题样式的地方,参看 TitleStyle.
  • 窗口应该显示哪些按钮。FVWM可以为每个窗口设定最多10个按钮,但是你通常用不到10个,这样你可以设定对于某一个程序那些按钮应该出现。注意这里也不是设定按钮样式的地方,参看 ButtonStyle.
  • 窗口边框样式。边框宽度,handle(就是边框角上那个用来resize的东东)的宽度,边框被鼠标按住的时候是否陷下去?…
  • 窗口图标。用那个图标作为窗口iconify时候的图标?
  • 窗口最大化,移动,改变大小操作时的样式。是显示窗口内容还是只显示一个"橡皮框"?还是让尺寸小于某个值的窗口才在拖动时显示内容?…
  • 窗口放置策略。窗口出现的时候,是层叠放置,最小遮挡放置,还是……?
  • 是否允许程序自己放置自己?这是一个政策问题,有些窗口程序启动时会自己选择一个位置出现,但是你可能会发现你不喜欢它那样做,你可以设定NoPPosition, 不允许那个程序自作聪明。
  • 对瞬时窗口(transient window)的策略。transient window 是指类似弹出菜单,对话框之类的窗口。当它们出现的时候,你是否想给它们也加上标准的边框?
  • 高级特性。还有很多很多选项比如是否允许窗口 backing store,这些如果你还不理解现在暂时不用管它。

以上每项都包含许许多多可以设定的东西。具体还是请参考 fvwm 的manpage。

13.菜单

一个窗口管理器怎么能没有菜单?FVWM的菜单是可以随意自己定义的,它在任何时候出现在你想让它出现的任何地方。一个菜单首先有一个定义,然后有 一个激发这个菜单的条件,菜单的样式也可以随意定制。如果使用 PipeRead 命令和一些 shell 命令组合,你就可以用菜单的方式遍历你的文件目录树,成为一个"菜单式file manager"。

  • 菜单的定义菜单是由AddToMenu命令定义的,比如这样一个菜单

是这样定义的

DestroyMenu RootMenu
AddToMenu RootMenu "Root Menu" Title
+ "&xterm%mini.display.xpm%" Exec exec xterm
+ "&Rxvt%mini.monitor.xpm%" Exec exec rxvt
+ "&Big Rxvt" Exec exec rxvt -geometry 78x43
+ "" Nop
+ "&Programs" Popup ProgramsMenu
+ "&Utilities" Popup Utilities
+ "" Nop
+ "Re&fresh Screen" Refresh
+ "Re&capture Screen" Recapture
+ "" Nop
+ "&Lock" Exec exec xscreensaver-command -lock
+ "&Exit Fvwm%mini.exit.xpm%" Popup Quit-Verify

除了第一行,后面的行都以一个+号开头,这说明以下是上一个命令的继续。这样我们定义了一个菜单,它的名字叫 "RootMenu", 它有一个标题叫"Root Menu", 里面有一些程序。当我们选中 "XTerm" 时,会使用FVWM 的 Exec 命令启动一个shell,这个shell马上会执行"exec xterm", 也就是启动一个 xterm。空字串"" 表示在菜单里画一条分隔线。Popup 可以弹出子菜单,子菜单也是用同样的方法定义的。"&"后面的那个字母会变成键盘的热键而被加上下划线,"%"括起来的是图标文件的名字,你需要 设置 ImagePath 指向图标文件所在的目录。你还可以在菜单里加入侧面图标,等等等等。

菜单的消灭

随后的AddToMenu命令会把内容附加到菜单的末尾。所以如果你想重新定义一个菜单,就需要先把它销毁掉。用

DestroyMenu RootMenu

就可以把刚才那个 "RootMenu" 菜单消灭掉。
菜单的激活

光是定义了一个菜单你是不能马上使用它的。这个菜单在什么情况下出现?这个问题是需要你自己来决定,这也是显示FVWM的完全可定制性的地方。比如,我们可以这样定义一个激活菜单的方式:

Mouse 1 R       A       Menu RootMenu Nop

这句话的意思是:"当鼠标(Mouse)左键(1)在根窗口(R)上点击,同时有任何控制键(A)按下,这个时候显示叫做 RootMenu 的菜单。"

但是有时候我们不容易在屏幕上找到一个可以看到根窗口的地方来点击鼠标。我们可以再加一个定义:

Mouse 3 A       MC      Menu RootMenu Nop

这样,当右键(3) 在任何地方(A)点击, 同时有Alt(M)和Ctrl(C)按下,那么弹出名叫 "RootMenu" 的菜单。

上面的 "Nop" 表示的是鼠标在菜单上进行双击时的操作。我定义为不操作。另外 Menu 还可以随意定义菜单出现的位置,详细请看 fvwm manpage。

菜单的样式

菜单的样式是由 MenuStyle 定义的:

MenuStyle * MWM
MenuStyle * PopupDelayed, PopupDelay 160, Animation, TitleWarp
MenuStyle * Foreground gold, Background gray40
MenuStyle * ActiveFore White
MenuStyle * Font -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
MenuStyle * MenuFace VGradient 64 darkgray MidnightBlue

这样我规定:所有的菜单,他们使用 mwm 的行为方式,弹出子菜单延时 160 ms,子菜单弹出时如果靠近屏幕边沿放不下,那么菜单整体移动使得子菜单刚好能弹出,前景色gold,背景色 gray40, 活动的项目(就是鼠标正在它上方的时候)前景色变为白色,菜单使用字体 -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*, 背景是垂直的梯度颜色,一共64阶,从 darkgray 变化到 MidnightBlue.
动态菜单定义
前面我们说过了,可以用 PipeRead 来构造一个动态菜单。现在举一个简单的例子:

AddToMenu HomeDirMenu
PipeRead 'for i in $HOME/prog/*.c; \
do echo "+ $i Exec xterm -e vi $i"; done'

当你激发这个菜单 HomeDirMenu, 就会出现你主目录/prog下的所有C程序文件的列表,当你点击其中一个就会启动vi来编辑这个C程序。是不是很方便呢?你想一想,可以用怎样无穷无尽的方式来构造一个菜单呢?

14.按钮

窗口的标题栏上都有一些按钮。那不是窗口程序自己的,而是WM给它们加上的。

FVWM 可以给窗口加上最多10个按钮,它们不光可以实现基本的最大化,最小化,关闭,等功能。FVWM的灵活性允许你赋予按钮几乎任意的功能!

按钮编号 按钮是这样编号的:

左边是奇数右边是偶数, 外面的大中间的小。

按钮功能定义

下面看看按钮的功能是怎么定义的,在鼠标和键盘一节我们已经知道怎么定义鼠标了,按钮的功能只不过是把鼠标与按钮号码组合在一起。

比如我的窗口上一般有三个按钮, 都在右上角,注意它们的编号:

6 4 2

他们的功能是这样定义的:

Mouse 1 4       A       Iconify
Mouse 1 6 A Close
Mouse 3 2 A Maximize-Func2

其中 Maximize-Func2 是用了 system.fvwm2rc 里一个函数:

DestroyFunc Maximize-Func2
AddToFunc Maximize-Func2 "M" Maximize 100 0
+ "C" Maximize 80 0
+ "D" Maximize 100 100

如果鼠标右键在"最大化"按钮上点击(C)那么高度增长为屏幕的 80%, 宽度不变。如果按下鼠标右键后有拖动(M), 那么高度增长为屏幕高度(100%), 宽度不变。如果双击(D), 就是一般的最大化。

为什么是右键?因为我为左键在这个按钮上定义了更高级的 stroke 来改变窗口大小。我们稍后介绍。

15.按钮样式

按钮的样式是用ButtonStyle定义的。比如我的那三个按钮实际上是如下几句话定义的。

ButtonStyle All -- UseTitleStyle
ButtonStyle All ActiveDown VGradient 8 palevioletred black
ButtonStyle 6 16 20x20@1 30x20@1 50x40@1 70x20@1 80x20@1 80x30@0 \
60x50@0 80x80@0 70x80@0 50x60@0 30x80@0 20x80@0 \
20x70@0 40x50@1 20x30@0 20x20@1

右边两个按钮的图案是系统缺省的,那个"X"形按钮是下面第三句话画出来的。 这种绘图语句非常简单。ButtonStyle 之后的数字是按钮编号,后面一个数子表示一共有多少笔画。后面的XxY@C都是笔画的内容,XxY是坐标, 坐标都是用百分比表示的。@C 表示颜色, C是一个数字,0 表示阴影色,1 是高亮色,2 是背景色,3 是前景色,4 是移动光标而不画线。

你可以画你自己的按钮,也可以去拿别人设计好的来用。FVWM 的主页上有很多人提供这种按钮。

第二个语句 "ActiveDown VGradient 8 palevioletred black" 设定了所有按钮按下去还没有松开鼠标时候的样式,是一个颜色梯度。

其它样式
我们已经知道 Style 可以决定窗口的样式,MenuStyle 可以决定菜单的样式,ButtonStyle 按钮的样式。其实还有 CursorStyle, TitleStyle, BorderStyle. 他们决定了光标,标题栏,边框的样式。他们都有多样的语法,详细的就看 magpage 吧。这里就不照抄了。
条件命令
All, Any, Cond, Current, Direction, Next, None, Pick, WindowId, … 这些命令是条件选择窗口的办法,它们让你可以用非常多样的方法,来确定你的操作需要对哪一个或者哪些窗口进行。比如:

All (Iconic) MoveToPage -1 -1

把所有图标化的窗口都移动到桌面右下角的那一页。

Key F5 A A Direction North Maximize True 0 growdown

以后按 F5 就可以让当前聚焦窗口上面(North)那个窗口往下长大,直到被当前窗口挡住去路。你有时候想在VIM里抄 Acrobat Reader 里的内容,安排窗口大小的时候就可以用这招。

16.让 FVWM 支持 Stroke
如果你的FVWM窗口管理器编译进了 libstroke, 你就可以使用鼠标动作操纵程序。libstroke 是一个免费使用的 stroke 库,你可以在 http://www.etla.net/libstroke/ 得到 libstroke. 下载那个为 FVWM 准备的版本,编译后安装,然后再编译 FVWM,它一般就会找到 libstoke,从而加入 stroke 的功能。
比如我在屏幕上按住 ctrl, 用右键
画一个 "r" 字就可以启动 rxvt
画一个 "V" 就可以启动 vim
画出 "D" 右边的弧线就可以启动 IBM 智能辞典
画一个 "e" 启动 emacs …
鼠标左右一晃,就可以启动 xkill,再往某个窗口一点,就可以强制杀死不听话的窗口
在窗口里右键往下一划,就可以最小化窗口
在窗口边框上用右键……
向上拖就可以使窗口往上一直长到被别的窗口挡住的地方
向左拖就可以使窗口往左一直长到被别的窗口挡住的地方
右……下……斜上…… 从边框开始画一个"L"形就可以回复窗口原来大小
当然这些控制方式都是你自己决定的, 这一切只需要在 .fvwm2rc 里加入一些Stroke语句. 因为太多了,写在主配置文件影响编辑, 这些语句被我写到了另一个文件里,然后在主文件用 Read 语句读入。你可以在这里下载我的fvwm.stroke文件作为参考。
你还可以定义非常高级的操作,你甚至可以这样:按住 ctrl, 用鼠标中键画出一条射线箭头指向的那个窗口, 不论它在那个桌面,就会被吸过来,并且随鼠标移动,你点击左键就可以放置它。
轨迹
stroke 的原理很简单,libstroke 可以识别出你在屏幕上画出的轨迹,把它报告给FVWM,这样FVWM根据轨迹的不同采取不同的操作。轨迹是由一个电话拨号盘的方式确定的。也就是说,把你 画出的东西分成9个区域,看你的鼠标依次经过那几个区域。

                    1  2  3

4 5 6

7 8 9

轨迹也可以用你的小键盘上的数字键来确认。看看你的小键盘:

                    7  8  9

4 5 6

1 2 3

Stroke 项目的定义
在你的配置文件里写入一些 Stroke 语句:

Stroke Sequence Button Context Modifiers Function

比如:

Stroke N7414789 0 A C Exec exec rxvt
Stroke N7414759 0 A C Exec exec rxvt
Stroke N74147589 0 A C Exec exec rxvt
Stroke N7414756 0 A C Exec exec rxvt
Stroke N74156 0 A C Exec exec rxvt
Stroke N74159 0 A C Exec exec rxvt

Stroke 关键字之后跟上轨迹说明。轨迹是一系列数字,如果数字前面有一个"N", 就表示我们采用小键盘的布局,而不是电话拨号盘。你看我的那几个轨迹,实际上是我们在写 "r" 字母的时候有可能出现的几种情况。

比如,这个轨迹就是符合 "N7414589″.

轨迹之后是鼠标按键号码。如果号码不是0,那么一旦识别到这个轨迹,就会马上执行操作。但是如果号码是0,那么说明这个定义不是在任何时候识别到就马上进 行的。而是当 StrokeFunc 命令被调用的时候才进行。StrokeFunc 为你提供了更多的灵活性。

号码之后是 Context Modifiers Function. 他们跟 Mouse, Key 的那两个同名参数是一个意思,参看 鼠标和键盘.

StrokeFunc

如果你的鼠标号码是0. 那么当 StrokeFunc 被调用的时候,这个轨迹如果被识别,就会执行相应的操作。比如:

#Drag mouse 1 on the maxmize button
Mouse 1 2 N StrokeFunc DrawMotion

现在看到了? 这就是我的最大化按钮上对鼠标左键的绑定。DrawMotion 是 StrokeFunc 的一个可选参数,它可以让轨迹在屏幕上被画出来,这样你可以清楚的看到你到底写了什么。

我有如下的一系列 stroke 定义:

#grow horizontal and vertically
Stroke N258 0 TSF2 N Maximize True 0 growup
Stroke N852 0 TSF2 N Maximize True 0 growdown
Stroke N456 0 TSF2 N Maximize True growright 0
Stroke N654 0 TSF2 N Maximize True growleft 0

#grow bidirectional
Stroke N25852 0 TSF2 N Maximize True 0 grow
Stroke N5852 0 TSF2 N Maximize True 0 grow

........

#reverse to unmaximized
Stroke N74123 0 TSF2 N Maximize False

我的鼠标左键按下"最大化"按钮之后可以进行绘画,然后窗口会随着轨迹的不同而采取各种各样的改变大小的行动!

我还有一个定义:

Mouse 3 TSF N StrokeFunc DrawMotion

这样鼠标右键在窗口标题栏,边框,frame 上绘画时也会触发 StrokeFunc 函数,达到跟左键在"最大化"按钮上绘画同样的效果。发现了吧?StrokeFunc 为我省去了重复的轨迹定义,否则我需要为"左键+最大化按钮"和"右键在边框"定义两套 stroke.
实例分析

我们来分析一种可能的执行情况:用鼠标左键按下"最大化"按钮(2),然后向右画。就像这个样子:


当鼠标左键在"最大化"按钮(2)上按下之后,如果没有键盘控制键按下(N),而那么根据"Mouse 1 2 N StrokeFunc DrawMotion", FVWM就会发现应该调用 StrokeFunc.

StrokeFunc 会马上记录鼠标按下的时候有哪些控制键按下了,现在是没有控制键(N).

然后它发现鼠标随即向右画出了一条线,看看你的小键盘,这是N456。StrokeFunc 就会在已经定义的 Stroke 里去找,是否存在这样的一个定义,它的前面部分是

Stroke N456 0 2 N ...

它发现有一个

Stroke N456 0 TSF2 N Maximize True growright 0

它的 Context: TSF2 包含了标题栏按钮2。鼠标动作开始时没有控制键按下,而这个项目的Modifiers里也是N. 那么这是一个符合的项目。所以进行操作 "Maximize True growright 0″:把窗口向右扩大,直到被另一个窗口或者屏幕边沿挡住。

注意控制键都是在动作开始时就已经记录下来了。如果你在绘画的途中放开了或者按下了控制键是不会改变识别的效果的。

怎样提高识别率

通常不要定义太复杂的轨迹,因为变化太多了就不容易识别。左右晃一晃,上下摇一摇,转个圈儿,……已经可以完成你很多任务了。

如果是复杂的 stroke, 比如写一个字母,你需要定义很多相似的 stroke,否则有时不能匹配。如果你不能确定会出现那些轨迹,你可以给 StrokeFunc 一个参数,比如:

Mouse 1 2 N StrokeFunc EchoSequence

然后你在屏幕上多画几次你的那个字母,无论它是否匹配一个定义,FVWM 会在启动它的那个终端输出你画出的轨迹号码。那些就是你写这个字母时有可能出现的轨迹,你把这些序列都加到你的配置文件,这样就提高了识别率。

注意这个输出号码的终端很有可能是 tty1,在Linux下你需要Ctrl-Alt-F1切换到tty1才能看到输出。如果你不喜欢这么麻烦,你可以在启动X的时候只启动一个 xterm, 然后在这个 xterm 里面启动 fvwm.

键盘触发 Stroke

stroke 也可以由键盘来触发。比如:

Key F6 A C StrokeFunc DrawMotion NotStayPressed

按下 Ctrl-F6 之后,FVWM就会调用 StrokeFunc, 由于我们设定了 NotStayPressed 参数,绘画一直会延续到一个鼠标键按下的时候才结束。这时你就可以用鼠标移动画出一个轨迹,然后按一下鼠标。

17.模块
模块是FVWM可以扩展的奥秘。模块是通过管道跟FVWM通信的程序,它们必须由FVWM启动(fork). 也就是说,你可以从 FvwmConsole 来启动这些模块,也可以用菜单,鼠标,热键……来启动。但是就是不能从 xterm 或者 rxvt 敲入命令来启动它们。
你有没有发现。当你的鼠标移动到窗口后,如果它被别的窗口挡住了,它并不会跑到上面来。如果你想让它自动上来,你可以使用 FvwmAuto 模块来实现一个简单的"自动提升"功能。我的 StartFunction 里有如下内容:

AddToFunc StartFunction
+ I Module FvwmAuto 500 Raise Nop

其实你还可以用 FvwmAuto 实现非常复杂的自动提升功能。
你想让你的窗口图标化(Iconify) 和取消图标化(Deinconify) 的时候都有漂亮的动画吗?用以下设定来配置你的 FvwmAnimate 模块,然后启动它,就可以有眼花缭乱的效果了 :)

*FvwmAnimate: Delay 25
*FvwmAnimate: Effect Random
*FvwmAnimate: Width 3

这些行是对 FvwmAnimate 的配置,模块的配置命令都是 "*" 号开始的。
你想要一个 Windows 那样的任务栏吗?启动 FvwmTaskBar 模块就行了。
想要一个 Pager? FvwmPager 可以提供你用不完的功能。参看FvwmPager.
Drag & Drop? 启动 FvwmDragWell, 就可以让支持 XDND 的程序工作。
你想这样一种功能:每次当名叫 XXX 的程序出现时,就把它大小变为 400×300, 移动到屏幕右边,然后启动一个 rxvt 跟它作伴?用 FvwmEvent 可以轻松达到你的目的。
你想做一个简单的图形界面程序?用 FvwmScript 可以快速的达到你的目的。
写配置文件太冗长了?用 FvwmM4 可以让你用 M4 宏处理语言来预处理配置文件。
你想有更加超级的操纵方式?FvwmPerl 可以让你使用 Perl 脚本的方式来操纵 FVWM.
模块的功能可能很复杂,它们都有自己分别的 manpage. 下面几节我们介绍一些常用的模块。
18.FvwmPager
既然 fvwm 有很多工作区。能不能有一个东西可以方便的看到那些工作区上有哪些程序,而且可以方便的切换工作区呢?FvwmPager就是为这个目的设计的。 我的Pager是这个样子:

FvwmPager有很多可以设定的参数,现在你可以试试这个简单的配置,这就是上面这个 pager 的配置。

*FvwmPager: Rows 4
*FvwmPager: Columns 1
*FvwmPagerBack #908090
*FvwmPagerFore #484048
*FvwmPager:Font -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmPagerHilight #cab3ca
*FvwmPagerLabel 0 Main
*FvwmPagerLabel 1 Internet
*FvwmPagerLabel 2 Program
*FvwmPagerLabel 3 Amusement
*FvwmPager:SmallFont -*-simsun-medium-r-*-*-12-*-*-*-*-*-*-*
*FvwmPagerBalloons All
*FvwmPagerBalloonBack Yellow
*FvwmPagerBalloonFore Black
*FvwmPager:BalloonFont -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmPagerBalloonYOffset +2
*FvwmPagerBalloonBorderWidth 1
*FvwmPagerBalloonBorderColor Black

这些行是对 FvwmPager 的配置,模块的配置命令都是 "*" 号开始的。 在 FVWM 里启动它:

Module FvwmPager 0 3

FvwmButtons
上面的Pager不错吧?不过它总是在屏幕上占那么一块位置,有没有办法让它可以在需要的时候才伸出来呢?你可以用 FvwmButtons 把FvwmPager包装起来实现这个功能。
这里是我的一个简单的配置:

*FvwmButtonsBack bisque3
*MainPanel: Geometry 80x18+40+4
*MainPanel: Back SeaGreen
*MainPanel: (Panel(down, indicator, delay 0, steps 1) \
PagerPanel "Module FvwmButtons PagerPanel")
*MainPanel: Font -*-simsun-medium-r-*-*-16-*-*-*-*-*-*-*
*PagerPanel: Geometry 80x352
*PagerPanel: (Swallow FvwmPager "Module FvwmPager 0 3")
*PagerPanel: Font -*-simsun-medium-r-*-*-16-*-*-*-*-*-*-*

这个FvwmButtons设置了一个 button 叫做 "MainPanel". 你可以用:

Module FvwmButtons MainPanel

来启动它. 它启动时是这个样子:

挂在屏幕左上偏右一点的地方,既没有挡住左边的按钮,又不会挡住窗口的下拉菜单。点一下就会展开,展开以后就是这个样子:

再点就会缩回去。
FvwmButtons 可以提供的功能远远不止这些。FvwmButtons 是一个非常强大的模块。你有兴趣可以看看它的 manpage.
19.FAQ
这一节来看看我遇到过的一些问题。
为什么 FVWM 不能用图片作为背景?

不熟悉Xwindow的人经常问这种问题。答案是FVWM确实不能设置复杂的高清晰图片作为背景,但是你却可以用图片作为背景。原因是:设置背景根 本不是WM的职责,你需要用其它程序,比如 xloadimage, xv, … 在根窗口上放置一幅图片,那就是所谓的"桌面背景"。你可以把它加入你的启动函数,一个 xloadimage 的例子可以在上面看到

FVWM怎么锁定屏幕呢?

你又问到一个容易混淆的问题。锁定屏幕也不是WM必须有的功能。几乎所有WM都是调用另外一个程序,比如 xscreensaver 来锁定屏幕和提供屏幕保护,然后在它们的菜单里加入对 xscreensaver 配置程序 xscreensaver-demo 的调用。看起来好像是WM提供了屏幕保护功能,让很多用户模糊了WM的职责。

你可以把 xsreensaver 加入到FVWM的启动函数里。参看启动函数和退出函数.

为什么 FVWM 的窗口标题不能显示汉字?

FVWM当然能显示汉字了,它是一个国际化的程序。原因在于你没有设置好汉字字体。你可以在配置文件里加入汉字字体的设定:

Style * Font  -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*

simsun 是我机器上一种同时可以支持汉字和英语编码的字体,如果你的字体只有汉字编码,那么你的英文全部都会"乱码",这时你需要在后面再加一个英文字体。比如:

Style * Font  "-cjacker-magicsong-medium-r-*-*-14-*-*-*-*-*-gb2312.1980-0,*-r-*"

类似的,pager,windowlist 都有自己的字体设定,你需要把它们都设置为你喜欢的中文字体。

另外,据说 FVWM 2.5 以前的版本对汉字支持不好。我没有用过 2.4.x,不知道怎么解决。如果你遇到这个问题就升级到 2.5.x 吧。

FVWM 有工具条吗?

有。启动 FvwmTaskBar 模块就行了。你还可以把它配置的非常漂亮。这里给出一个我的 简陋的配置方案。

Style FvwmTaskBar HandleWidth 0, BorderWidth 0
*FvwmTaskBar: UseSkipList
*FvwmTaskBar: AutoStick
*FvwmTaskBar: DeskOnly
*FvwmTaskBar: Action Click1 DeiconifyRaiseAndFocus
*FvwmTaskBar: Action Click2 Iconify On
*FvwmTaskBar: Action Click3 Lower
*FvwmTaskBar: MailCommand Exec exec rxvt -e mutt
*FvwmTaskBar: 3DFvwm
*FvwmTaskBar: StartName FVWM
*FvwmTaskBar: StartMenu RootMenu
*FvwmTaskBar: Font -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmTaskBar: SelFont -*-simsun-medium-r-*-*-14-*-*-*-*-*-*-*
*FvwmTaskBar: ShowTips
*FvwmTaskBar: ClockFormat
*FvwmTaskBar: WindowButtonsRightMargin 20

*FvwmTaskBar: Back seagreen
*FvwmTaskBar: Fore gold2
*FvwmTaskBar: FocusFore cornsilk
*FvwmTaskBar: IconBack darkgreen
*FvwmTaskBar: IconFore white

另外,FvwmButtons 模块提供了更加复杂的功能。你可以把很多小程序(xclock,biff…)和模块(FvwmIconMan)嵌入到它里面。形成一个复杂的工具条。 详情请 man FvwmButtons。你也可以使用 KDE 的 kicker 工具条和 Gnome 的 gnome-panel. 请看后面

FVWM 能不能像 Windows 那样用 Alt-Tab 切换窗口?

能。把这行加入 .fvwm2rc:

Key Tab A M WindowList Root c c NoDeskSort

这个绑定不知道什么时候好像成了 FVWM 缺省的。如果你不喜欢,那么加入:

Key Tab A M -

取消这个定义。
我不想要鼠标移动到窗口上就自动聚焦的方式怎么办?

FVWM 缺省的聚焦方式是 MouseFocus,也就是说,鼠标如果移动到哪个窗口,那个窗口就得到键盘聚焦。如果你想用 Windows 那样的需要点击鼠标才聚焦,那么你可以用 ClickToFocus 方式:

Style * ClickToFocus, ClickToFocusPassesClick

我用 MouseFocus 方式,可是当我的一个窗口被 Lower 后,我只能把鼠标移到其它窗口再移回来才能重新提升它。

缺省的 MouseFocus 方式不会在点击时提升窗口。如果你想点击窗口时提升它,那么加入配置:

Style * MouseFocusClickRaises

怎样才能使窗口获得焦点后自动提升?

你需要使用 FvwmAuto 模块。把 FvwmAuto 加入你的起动函数:

AddToFunc StartFunction
+ I Module FvwmAuto 500 Raise Nop

为什么 Acrobat Reader 打开一个全屏 PDF 文件后,还原为窗口还是不能移动?

把这行加到你的配置文件就行了:

Style "AcroRead"	VariablePosition, VariableUSPosition

怎样才能让 ImageMagick 或者 Gimp 的几个小窗口同时提升或者下降呢?

把这行加到你的配置文件就行了:

Style "Display"	RaiseTransient LowerTransient StackTransientParent
Style "Gimp" RaiseTransient LowerTransient StackTransientParent

屏幕保护出现时,XSIM 输入法的状态窗口为什么不消失呢?

这是 XSIM 的一个 bug, 它设置了状态窗口的 OverrideRedirect 属性以至于没有窗口管理器能够管理它。我已经帮助修正了这个 bug。你只需要在 plugins/StatusPanels/std/statuspanel_std.cpp 的

TWstring * TStatusPanel_STD::create(Obj_Config * conf, Status_Pack * sp)

函数末尾 return NULL; 之前加入以下两行:

wa.override_redirect = False;
set_winattr(CWOverrideRedirect, &wa);

问题就已经解决了。

如果你还不满意,你想让 FVWM 可以设定 xsim 的样式,那么你可以把这个函数中设置 OverrideRedirect 的那几行代码去掉。

/*
XSetWindowAttributes wa;
wa.override_redirect = True;
set_winattr(CWOverrideRedirect, &wa);
*/

自己设置它的属性。我们可以给它边框,也可以不给它边框。你可以把这些配置写到你的 .fvwm2rc 得到一个比较好的效果。

Style "XSIM"    Layer 7, NoTitle, HandleWidth 1, Sticky, WindowListSkip

注意如果去掉了 OverrideRedirect 属性,在某些不能随意定制窗口样式的窗口管理器里,状态窗口会被包上厚重的标题栏和边框!

你可以试试 fcitx 输入法服务器。我现在换用这个了。我觉得比 XSIM 好用。直接安好就可以了,没有以上问题 :)

FVWM 能和KDE, Gnome 一起工作吗?

KDE 和 Gnome 都是完整的桌面系统,包括了WM和其它很多东西。FVWM 只是一个WM。FVWM可以替代 KDE 缺省的 kwin,或者 Gnome 缺省的 sawfish 成为它们的WM。

  • 只用KDE和Gnome的工具条很多时候 Gnome 和 KDE 的程序是跟他们的桌面系统可以分开使用的。其实你有可能只需要它们漂亮的panel。Gnome 的工具条叫做 gnome-panel, 在 xterm 启动一个就行了。KDE 的工具条叫做 kicker. 注意 KDE 有些程序需要 dcopserver, 你可以先启动 dcopserver。KDE 和 gnome 的panel上的pager和fvwm的FvwmPager都是相通的,所以你可以用它们任何一个来切换桌面 :)

    如果你在kde的任务条用右键选择"总在最前"可能不起作用,因为现在它们得完全听fvwm的话不过你可以给它们额外的权力,请参考fvwm manpage 的有关EWMH 的部分

  • 完全启动Gnome和KDE与FVWM一起工作还有些kde程序不知道用了什么通信方式,启动后就dump了。你可以用 startkde 来启动整个 KDE 系统。一般来说它们都可以与fvwm一起很好的工作。Gnome 的启动命令叫做 gnome-session. 它也可以完全与 fvwm 一起工作。这样你就可以用 fvwm 的方式来控制所有桌面系统的窗口了。嘿嘿

看看下面这幅图,KDE 正和 fvwm 在一起。嘿嘿。点击可以放大。

你甚至可以让 Gnome 和 KDE 同时出现。不过估计除了耍酷,没人会像这样做:

20.特种技巧
即时战略游戏式的控制窗口

很多即时战略游戏都可以对士兵等进行分组 比如选定一组士兵后按 Ctrl-Alt-1,可以把一组士兵标记为第1小分队 以后按 Ctrl-1 就可以让这些士兵待命。

其实FVWM可以很容易把一些窗口当成士兵。只要把这些行加入 .fvwm2rc

Key 0 WI MC Key 0 A C WindowId $[w.id] WarpToWindow 50 50
Key 1 WI MC Key 1 A C WindowId $[w.id] WarpToWindow 50 50
Key 2 WI MC Key 2 A C WindowId $[w.id] WarpToWindow 50 50
....
Key 9 WI MC Key 9 A C WindowId $[w.id] WarpToWindow 50 50

聚焦一个窗口后按 Ctrl-Alt-n, 就把它标记为n号。 以后不论什么时候按 Ctrl-n,就会回到这个窗口。

$[w.id] 是 FVWM 2.5.6 以后使用的表示窗口id的变量。 较老版本的FVWM使用 $w 来表示窗口id。 2.4.x 的用户试试:

Key 0 WI MC Key 0 A C WindowId $w WarpToWindow 50 50
Key 1 WI MC Key 1 A C WindowId $w WarpToWindow 50 50
Key 2 WI MC Key 2 A C WindowId $w WarpToWindow 50 50
....
Key 9 WI MC Key 9 A C WindowId $w WarpToWindow 50 50

这显示 Key 等命令全都可以嵌套使用! 当然你可以用类似的办法得到更令人惊讶的效果!just imagine!

…………….

…………….

想到了吗?好了,来看看一个更超级的用法。在你的 .fvwm2rc 加入这些:

Key 0 WI SC State 0
Key 1 WI SC State 1
Key 2 WI SC State 2
Key 3 WI SC State 3
Key 4 WI SC State 4
Key 5 WI SC State 5
Key 6 WI SC State 6
Key 7 WI SC State 7
Key 8 WI SC State 8
Key 9 WI SC State 9
Key a WI SC State 10
....

DestroyFunc GroupFunc
AddToFunc GroupFunc I Layer 1
+ I MoveToPage
+ I Iconify off
+ I Raise

Key 0 A M All (State 0) GroupFunc
Key 1 A M All (State 1) GroupFunc
Key 2 A M All (State 2) GroupFunc
Key 3 A M All (State 3) GroupFunc
Key 4 A M All (State 4) GroupFunc
Key 5 A M All (State 5) GroupFunc
Key 6 A M All (State 6) GroupFunc
Key 7 A M All (State 7) GroupFunc
Key 8 A M All (State 8) GroupFunc
Key 9 A M All (State 9) GroupFunc
Key a A M All (State 10) GroupFunc
....

以后按 Ctrl-Shift-n,就可以把当前聚焦窗口设置为"第n组"(State n)。n 可以从 0 到 31。以后我们可以按 Alt-n 来把第n组的窗口都移动到当前 page,全部 deiconify 并且提升–待命!

英文xp玩魔兽争霸中文版

由于某些原因,英文的xp或者2003是无法玩简体中文的魔兽争霸的…

用UltraEdit或者其他编辑器,编辑游戏安装目录下的Game.dll

查找3D04080000742A3D04,把"74"改为"75″.

如果是1.22或者1.22e,那么有所不同,在下面这行查找

00007700h: 04 10 00 00 74 14 3D 04 0C 00 00 74 0D 8D 4C 24

查找0410000074143D040C0000740D8D4C24,把74改成EB.

修改Maya(Linux)菜单字体

不知道怎么回事,装上Maya以后菜单的默认字体比较'粗糙'不清晰,网上搜索了一下没有结果.后来在Linuxsir.org提问解决了。好久没在Win下用Maya,不清楚是不是有这个文件,这个方法只适用于Linux版的Maya……

需要修改的文件默认路径:/usr/autodesk/maya2008/app-defaults/MayaScheme/MayaScheme

前面字体部分我改成了

*extraLargeBoldLabelFont: -*-helvetica-bold-r-normal-*-17-*-*-*-*-*-iso8859-1
*largeBoldLabelFont: -*-helvetica-bold-r-normal-*-14-*-*-*-*-*-iso8859-1
*boldLabelFont: -*-clearbold-medium-r-*-*-12-*-*-*-*-*-*-*
*smallBoldLabelFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
*tinyBoldLabelFont: -*-helvetica-bold-r-normal-*-10-*-*-*-*-*-iso8859-1
*plainLabelFont: -*-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1
*smallPlainLabelFont: -*-lucida-medium-r-normal-*-10-*-*-*-*-*-iso8859-1
*obliqueLabelFont: -*-helvetica-bold-o-normal-*-12-*-*-*-*-*-iso8859-1
*smallObliqueLabelFont: -*-helvetica-bold-o-normal-*-10-*-*-*-*-*-iso8859-1
*fixedWidthFont: -*-fixed-medium-r-normal–13-*-*-*-*-*-iso8859-1
*smallFixedWidthFont: -*-lucida-medium-r-*-*-12-*-*-*-*-*-*-*
*XmLabel.fontList: -*-lucida-medium-r-*-*-10-*-*-*-*-*-*-*

另外,这个文件也可以控制面板颜色什么的.

让xterm显示中文

!xterm
XTerm*preeditType: Root
!XTerm*cursorColor: OliveDrab1
!XTerm*background: black
!XTerm*foreground: AntiqueWhite1
XTerm*font: -misc-fixed-medium-r-normal-*-18-120-100-100-c-90-iso10646-1
XTerm*wideFont: -misc-fixed-medium-r-normal-*-18-120-100-100-c-180-iso10646-1

为FVWM虚拟桌面设置不同的壁纸

其实就2点:

1.添加FVWMBacker模块

2.设置图片路径,路径可以自己设置,想放哪就放哪,另外,后面注释掉的4行是设置每个虚拟桌面的背景颜色的.

下面的设置是1个虚拟桌面,4块Page,我一时忘记Page怎么翻译了...

# --FvwmBacker –背景变换模块
######################
AddToFunc   StartFunction  I   FvwmBacker

*FvwmBacker:Command(Desk 0,Page 0 0) Exec fvwm-root $[HOME]/.fvwm/fvwm-wp/sgi.png
*FvwmBacker:Command(Desk 0,Page 0 1) Exec fvwm-root $[HOME]/.fvwm/fvwm-wp/deepblue.png
*FvwmBacker:Command(Desk 0,Page 1 0) Exec fvwm-root $[HOME]/.fvwm/fvwm-wp/deepblue.png
*FvwmBacker:Command(Desk 0,Page 1 1) Exec fvwm-root $[HOME]/.fvwm/fvwm-wp/d3.png

#*FvwmBacker: Command (Desk 0, Page 0 0) -solid #3c3c3c
#*FvwmBacker: Command (Desk 0, Page 0 1) -solid #3c3c3c
#*FvwmBacker: Command (Desk 0, Page 1 0) -solid #3c3c3c
#*FvwmBacker: Command (Desk 0, Page 1 1) -solid #3c3c3c

在fvwm里安装输入法-SCIM

在fvwm里安装输入法-SCIM
#apt-get install scim-pinyin
修改/建立文件95xinput
/etc/X11/Xsession.d/95xinput

文件内容:
export XMODIFIERS=@im=SCIM
export XIM=scim
export XIM_PROGRAM=scim
export GTK_IM_MODULE="scim"
export QT_IM_MODULE="scim"
scim -d

注意第一行的SCIM大写.
重新启动就可以了,不过奇怪的是我以前用im-switch就能搞定…

解决mlterm中文显示乱码

解决mlterm中文显示乱码[debian,fvwm]修改或者建立文件~/.mlterm/aafont
文件内容:
ISO10646_UCS2_1=Bitstream Vera Sans Mono-iso10646-1;
ISO10646_UCS2_1_BIWIDTH=Microsoft YaHei-iso10646-1;


拍照留念,写这篇日志仅仅为了避免以后忘记,用邮件发布,时间显示估计不正常-_-!!

另附我的locale,可能mlterm对中文支持不错,基本上不用怎么设置.
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

双击无法开打文件夹

周 末有空瞎搞了一通,最终发 现双击文件夹无法打开了,打开文件夹选项一看,双击默认变成"Find"了!!鼓捣了一下,不能删除原先存在的方式.新建的话我只知道用 explorer.exe打开----这样的话双击就是在另外的窗口打击了,不知道具体的格式怎么写,以前从没遇见过.另外,我也想删除下面几个没用的选 项,以前早删了,选项却还在那里...
凭着第6感找到注册表:HKEY_CLASSES_ROOT\Directory\Shell\:)下面果然是这几个累赘,火大全删了---然后一看,好了,嘿嘿.难道默认下面就没选项?这样看来这种方法也可以用来清理鼠标右键的菜单.

需要删除的注册表项:(也可以先备份,基本上shell下的都能删除)

Linux的主要文件

来源:Linuxsir.org

/boot/grub/grub.conf GRUB 配置文件
/boot/module-info-* 内核心模块信息文件
/boot/System.map-* 内核映像文件
/boot/vmlinuz-* 内核
/etc/aliases 邮件别名
/etc/at.deny 被拒使用at命令的用户ID列表
/etc/auto.master 自动加载文件系统(如光驱)的配置文件
/etc/auto.misc 自动加载文件系统的文件
/etc/bashrc Bash shell的配置文件
/etc/cron.daily/* 计划任务—每日执行,配置文件目录,用户级
/etc/cron.hourly/* 计划任务—每小时执行,配置文件目录,用户级
/etc/cron.monthly/* 计划任务—每月执行,配置文件目录,用户级
/etc/cron.weekly/* 计划任务—每周执行,配置文件目录,用户级
/etc/crontab 计划任务,系统级
/etc/cups/* 打印机配置文件
/etc/default/useradd 创建新用户的默认配置文件,可以配置新用户创建的环境
/etc/DIR_COLORS 目录列表的颜色配置
/etc/exports NSF服务配置文件
/etc/filesystems Linux支持的文件系统类型
/etc/fstab Linux中文件系统挂载点及分区配置文件
/etc/group 组配置温家
/etc/host.conf DNS客户端配置温家
/etc/hosts IP地址和主机名映射配置文件,一种类似DNS的解析方式
/etc/hosts.allow 允许登录到本机网络服务的计算机
/etc/hosts.deny 不允许登录到本机网络服务的计算机
/etc/httpd/conf/* Apache web服务配置文件目录
/etc/httpd/httpd.conf Web服务主要配置文件
/etc/init.d/* 系统初始化脚本存放目录
/etc/initlog.conf 日志配置文件
/etc/inittab Init进程配置文件,影响系统启动。
/etc/issue 本地用户登陆后显示的内核版本信息说明信息
/etc/issue/net 远程用户的登录后的内核版本说明信息
/etc/ld.so.conf 共享库配置文件,开发用。
/etc/login.defs 创建用户及用户相关命令用的默认配置文件。
/etc/logrotate.conf 日志回滚配置文件
/etc/logrotate.d/* 日志回滚脚本
/etc/mail/* 邮件服务相关配置文件
/etc/mailcap 邮件的MIME 信息
/etc/man.config man 手册配置文件
/etc/mime.types MIME 类型列表
/etc/mime-magic* MIME 数据对应编号
/etc/minicom.users 允许使用minicom(超级终端)的用户ID列表
/etc/modules.conf 内核模块配置文件
/etc/motd 登录后显示的欢迎信息
/etc/mtab 已经挂载的文件系统信息
/etc/nsswitch.conf DNS客户端配置文件
/etc/openldap/* 开放LDAP 相关配置文件
/etc/pam.d/* PAM相关配置文件
/etc/paper.config 页面配置文件
/etc/passwd 用户帐户配置文件
/etc/ppp/* PPP 拨号连接配置文件
/etc/printcap 打印机选项及兼容列表
/etc/profile 用户缺省配置(BASH shell)
/etc/profile.d/* Shell初始化文件
/etc/protocols 协议命名与编号
/etc/pwdb.conf pwdb 库及配置文件
/etc/rc 系统启动与关闭的脚本
/etc/rc.local 本地启动脚本
/etc/rc.sysinit 系统初始化文件
/etc/rc?.d/* 服务的在各个运行级别的启动和停止脚本
/etc/rpc RPC 程序数据库
/etc/rpm/* RPM 数据库及配置文件
/etc/samba/* Samba 服务配置文件
/etc/securetty 安全帐户文件,如Root登录的限制等
/etc/security/* PAM 配置文件
/etc/sensors.conf libsensors 配置文件
/etc/services 标准服务名称及编号
/etc/shadow 用户密码文件
/etc/skel 新创建用户默认自动复制的文件目录
/etc/ssh/* SSH 配置文件
/etc/sysconfig/* 系统相关配置文件
/etc/sysconfig/network-scripts/* 网卡配置文件
/etc/sysctl.conf sysctl IP转发,路由相关配置
/etc/syslog.conf 系统日志进程配置文件
/etc/termcap 终端兼容及选项
/etc/updatedb.conf 软件包及自动更新配置文件
/etc/wvdial.conf GNOME 每日执行任务配置文件
/etc/X11/applnk/* X window应用程序快捷方式
/etc/X11/fs/config X window字体服务配置文件
/etc/X11/gdm/* GNOME 显示配置文件
/etc/X11/prefdm 显示管理配置文件
/etc/X11/xdm/* X window显示管理配置文件
/etc/X11/XF86Config X window配置文件
/etc/X11/xinit/Xclients xinit的缺省脚本
/etc/X11/xinit/xinitrc X 回话的初始化脚本
/etc/X11/Xmodmap xdm 与 xinit使用的键盘映像配置
/etc/xinetd.conf Xinetd配置文件
/etc/xinetd.d/* xinetd 中某个服务的配置文件
/home/*/public_html 用户网站根
/root/.bash_history 管理员的命令历史记录文件
/root/.bash_logout 管理员的退出脚本
/root/.bash_profile 管理员的初始化脚本
/root/.bashrc 管理员的bash配置脚本
/root/.Xresources 管理员的X window配置参数
/usr/share/config/* 杂项配置文件
/usr/share/fonts/* 字体文件夹
/usr/share/ssl/openssl.cnf SSL安全连接配置文件
/usr/X11R6/lib/X11/app-defaults/* X window的默认配置参数
/usr/X11R6/lib/X11/fonts/* X window的字体文件夹
/var/log/cron Cron计划任务的日志文件夹
/var/log/httpd/access_log 访问http服务的日志文件
/var/log/httpd/error_log http错误日志
/var/log/boot.log Linux启动过程记录日志
/var/log/cron 计划任务cron执行的日志
/var/log/dmesg 内核信息日志,启动时候产生。
/var/log/lastlog 上次登陆日志
/var/log/maillog 邮件传输日志
/var/log/messages 系统日志
/var/log/samba/* Samba 日志
/var/log/secure 系统安全日志
/var/log/up2date 软件更新日志
/var/www/cgi-bin CGI 配置脚本
/var/www/html/* 网站相关网页

十一

最近堕落得把全部空闲时间都拿来看"美剧"了,House,Life,Fringe—-其他的一下想不起来了-_-!!,恩,还有霹雳游侠2008……幸亏老美的电视剧不是一天一集,不然肯定无法应付.很难想象,某些电视台宁愿去热播韩,日的…..

另外,我实在提不起劲去看越狱,尽管它是那么火热,不是我喜欢的类型.CSI我还挺喜欢的,不过我被它的季数搞糊涂了,不知道哪个前哪个后,最后分不清哪些看过没看过,只好作罢.

如果想要BT下载,YDY破烂熊的感觉不错,翻译的也挺"顺口",最重要的是不会有"很大很刺眼"的LOGO横在上面.

日子就这么悄悄的过去了…

Firefox主题-Chromifox


Firefox模仿Chrome浏览器风格的主题.
安装地址:https://addons.mozilla.org/en-US/firefox/addon/8782

其实,这个主题也不完全和Chrome一样,只是类似(下面是Chrome主页上的截图).

钢铁侠.RMVB

 
rmvb格式的,感觉还比较清晰,如果不能下载可以复制地址到迅雷.
迅雷
下载:
《钢铁侠》[rmvb格式]-----CD1
《钢铁侠》[rmvb格式]-----CD2

Firefox主题-Rein

支持Firefox3,比较简洁,感觉细节也比较到位.

安装地址

下载土豆视频


尽管土豆的视频是flv格式的比较小,可是在某些"繁忙"的时段看还是会卡(嘿嘿,我的宽带不够宽),因为没办法直接下载,于是搜索了下,发现用Kisstudou下载应该是最方便的了.Kisstudou上的贴士提示:

解析土豆视频只需要在地址栏的tudou.com前面加上一个kiss即可快速跳转到解析页面,无需复制,无需打开flvcd主页

比如一个视频的地址

http://www.tudou.com/playlist/id/4201226/

那么要获得flv下载地址就是

http://www.kisstudou.com/playlist/id/4201226/

或者也可以在首页输入网址得到flv的下载地址.

P.S.为什么我不用土豆提供的iTudou这个软件下载?因为之前我遇见过无法卸载iTudou的问题,而且这个办法更简单,还不用装软件.

另外,如果是用Firefox,那么用Downthemall挺快的

调整Openoffice界面字体大小

考虑到有时还是要查看表格和word文档,决定装个Openoffice,因为M$的Word太大了,而且不是免费的…另外我平时用到的也不多,能查看、编辑简单的word文件就可以了.

装上以后发觉界面的字体小的可怜,更让人惊奇的是,选项里面居然找不到设置界面字体的地方,难道是我不够细心?!没办法,如果OOo不能自己调整界面字体,那就是’继承’了系统的字体设置了——和我一样懒……于是在Windows显示外观设置中菜单和对话框的字体都调高1号,原先我用的tahoma,8号,调整为9号.然后显示就正常了。

修改前后的对比:

强烈要求OOo以后的版本加入设置界面字体的选项,可能英文版的界面很少遇见这种问题.

OpenOffice.org 中文版下载:
http://zh.openoffice.org/new/zh_cn/downloads.html

NTFS-3G的一点笔记[Debian]

比较简单,但是做个笔记一以免遗忘:开机自动挂载Windows的NTFS分区

Debian现在源里直接就有ntfs-3g了,装好之后查看一下哪几个是ntfs的分区

#fdisk -l | grep NTFS

编辑/etc/fstab,加入ntfs分区条目:

#ntfs
/dev/hda5  /mnt/winD ntfs-3g silent,umask=0,locale=en_US.utf8 0 0
/dev/hda9  /mnt/winE ntfs-3g silent,umask=0,locale=en_US.utf8 0 0

注:目录自己随意创建.

The Pixar touch:The making of a company

这是一篇转载的文章,来源:动画笔记本的博客

看書有時像是看電影一樣,很難在書店逛逛隨便翻翻就知道一本書值不值得看,值不值得買,都要看上幾個章節才能做出正確的判斷,有時看完一部電影才發覺花下去的兩個小時根本是浪費時間,而這本David A. Price的著作:The Pixar Touch: The Making of a Company則感覺像是看完一部好電影一樣,從頭到尾非常吸引人,念完之後也讓我感觸許多,它是繼畫夢的巨人(Serious Business: The Art And Commerce Of Animation In America From Betty Boop To Toy Story)之後,我念過一本最有趣,關於動畫產業的書籍。

就 像書名一樣,The Pixar Touch講的是Pixar這家動畫公司的歷史,如何從幾個computer graphic geeks想要作電腦動畫影片的夢想,變成現在甚至超越迪士尼的動畫巨擘這段過程,跟別的也是在講Pixar歷史的書,像是前一陣子迪士尼官方出版的To Infinity and Beyond!: The Story of Pixar Animation Studios不 一樣的地方在,這本書用更客觀的角度講述那段Pixar建立的故事,而既然更客觀,很難不帶到一些或許帶有負面形象的事件,比方說在To Infinity and Beyond!之中,提到Steve Jobs之所以從ILM裡面買下電腦動畫部門,是因為想拍攝動畫影片,可是實際上Steve Jobs買下Pixar是要建立另一家電腦公司,製作影片一開始並不是他的理想,之後營運不佳還一直千方百計想把它賣掉,甚至積極地跟MicroSoft 接觸,幾乎已經要成功脫手,直到Toy Story上映前幾個禮拜才改變主意。本書用更客觀的角度講述整個故事,也讓我們更理解Pixar成功背後,這些管理者(Ed Catmull,Ray Smith與Lasseter等等人)的經營哲學與這些藝術家對動畫執著的態度。

下面是書中所有章節的摘要:

1. Anaheim

2006 年在Anaheim舉行的迪士尼股東大會中,Lasseter刻劃出迪士尼未來的願景,在此同時,我們回顧一下Pixar的歷史,要知道它一開始可不是 Pixar Animation Studio,而是Pixar Inc.,一家電腦硬體公司,不過走過幾十年歲月,它成為一家比Disney更受家長信任的品牌。

1986年Steve Jobs只花了5個million低價買下ILM的數位影像部門,不過之後花了10倍的價錢維持公司的運作,頭十年都一直虧錢,有趣的地方是,Pixar 的創始者都可以被稱作當時的失敗者,像是John Lasseter被迪士尼解雇才到Pixar,Ed Camull原本想在大學任教,不過卻沒有成功,Alvy Ray Smith在Xerox的Palo Alto Reasearch Center任職,不過不久後他的部門被裁撤,Steve Jobs自己則被自己創辦的Apple電腦公司踢出門,這些失敗者共同開創未來,成就了現在Pixar的樣貌。

2. In the Garage

回 顧一下Pixar的歷史,1960 到1970年的Utah大學是數位繪圖領域的中心,五角大廈的資金讓學校有世界最尖端的研究設備,因此孕育出許多傑出的人才,像是Henri Gourand,Bui Toung Phong,還有Ed Catmull-Pixar的創立者,他在1972年時,自己用電腦製作了一段動畫影片,他同時也是發明Z-Buffer和texture mapping的人。

1955年時,Alexander Schure成立了NYIT(紐約理工學院),他也同時開了一家動畫公司,並且想用電腦技術取代動畫耗費的大量人工,Catmull來到NYIT擔任數位 影像實驗室的主席,他同時也聚集了一批研究者,這些人日後都成為Pixar的班底。Schure是個有遠見的人,在當時還沒有幾個人可以想像電腦動畫的時 候,他就投入大量的資金在研究發展上頭,而當研究團隊愈來愈大,Catmull負責管理的任務也愈來愈重,這裡,我們可以看到他管理的哲學,他試圖建立 Utah大學之中的自由氣氛,每個研究個案雖相互關連,不過也都獨立運作,他的工作主要是讓每個人都更加自主,而這樣的管理風格剛好非常適合NYIT這些 自發又有才華的團隊,結果變成像是一群fraternity of geeks。

Schure的投資讓NYIT變成民間機構中,研究數位 影像最頂尖的中心之一,在1977年,他們完成了Tubby the Tuba這部影片,不過結果非常糟糕,故事是最大的敗筆,他們意識到自己需要會說故事的人才,而這時ILM要建立一個數位影像部門,處理George Lucas關注的數位剪接,聲音,數位合成這三方面的技術,Catmull見機會難得,離開NYIT,同時也將他的班底一個一個帶進去。

3. Lucasfilm

Catmull 的團隊進入ILM成立Computer Graphics Research Group後,雖然Lucas有電腦動畫領域最頂尖的這批人才,可是他沒有讓他們有機會製作電腦動畫影片,星際大戰第一集將他們吸引進來,不過第二集 Lucas卻沒打算使用任何電腦動畫,一直到 1988年派拉蒙委託ILM製作一段Star Trek II The Wrath of Khan的特效段落,他們才因此有大展身手的機會,這段影片雖然不是電影中第一次使用電腦動畫,不過卻是視覺上最豐富,也最具張力的代表。

1983 年,The Road to Point Reyes這部短片讓他們測試計算寫實圖像的能力,Reyes(Renders Everything You Ever Saw) Renderer也成為之後PhotoRealistic Renderman的演算結構。

這個時候 John Lasseter因為The Brave Little Toaster的關係認識了Catmull,迪士尼在70及80年代經歷了一段低潮期,許多年輕的藝術家在公司內感覺非常挫折,一些有才華的人因此出走, 像是Don Bruth,Lasseter也因為The Brave Little Toaster提案失敗的關係被迪士尼開除,1983年他加入Lucas Film裡Catmull的團隊,Lasseter跟其他animator不一樣的地方在他看得見電腦動畫的未來,Walt Disney一直努力將深度的幻覺帶入手繪動畫,他相信要是Disney還在世,他一定會擁抱這個技術。

雖然了解電腦動畫技術在1984 年時只適合表現沒有生命的物體,不過他們仍然試圖將角色動畫帶進電腦動畫之中,The Adventures of Andre and Wally B,這是第一次電腦動畫應用上迪士尼花了數十年發展的角色動畫技術,可惜的是,老闆George Lucas並不欣賞這部影片,他沒辦法超越他所看到的東西,也沒辦法看到這個技術的未來前景,不過當時對電腦動畫抱著存疑態度的也不只他一人,像手繪動畫 大師Frank Thomas當時也認為電腦動畫只是一條死路。

4. Steve Jobs

一 方面因為Lucas跟老婆離婚的關係得負擔一大筆贍養費,造成LucasFilm財政困窘,另外也因為Lucas跟Catmull對Computer Graphics Research Group有不同的想法,公司於是要Catmull自己找買主,脫離ILM,他們於是將自己包裝成對數位影像具特殊專業的電腦硬體公司,Lucas想說或 許會有人感興趣,買下這個小組,然後大量生產他們研發的電腦-The Pixar Image Computer,當時一些公司都表示興趣,像是Siemensc或是Hallmark Cards,還有在1985年被Apple踢出來的Steve Jobs。

在找買主的同時,小組也在進行其他案子,像是Young Sherlock Holmes,這是Pixar Image Computer第一次正式使用,也是真人電影中第一次出現數位合成上去的人物。Catmull和Smith也與日本小學館(Shogakukan)討論 合作的可能性,小學館想要將孫悟空這個中國民間故事拍成電腦動畫影片,因此找上Catmull。另外,迪士尼改朝換代後逐漸對電腦動畫開始產生興趣,想利 用電腦取代Ink and Paint這個勞力需求非常高的部門。

1984年Roy Disney在董事會發動政變,雇用了派拉蒙的前總經理Michael Eisner擔任迪士尼總裁,還有華納的前總經理Frank Wells擔任總經理,Eisner和Wells上任後見動畫長片部門的虛弱,加上他們對動畫的陌生,原本想關掉動畫部門,不過因為Roy的反對而作罷, 之後迪士尼公司重新對電腦動畫產生興趣,而與Catmull接觸,開始發展CAPS(the Computer Animation Production System)這套系統,使用Pixar Image Computer加上自己寫的軟體將Ink/paint的流程自動化,當時有些人提議直接將Lucas的這個電腦動畫部門直接買下來,不過Jeffrey Katzenberg,當時算是Eisner的手下,負責掌管所有迪士尼影片的製作,並不同意而告吹。

因為財務問題,Lucas想將動畫 部門縮編,不過Ray Smith反對,他認為一家公司最重要的不是寫出來的軟體或是設計出的硬體,而是這一群人的組合,不過這堅持並不改變Lucas拋售電腦動畫部門的決心, 這時候Jobs離開Apple,創立了另一間公司-NeXT,同時也一直對買下這個部門很感興趣,不斷詢問降價的可能性,因為Lucas Film急於脫手,Jobs因此最後只花了5個million將這個部門買下來。

1986年,這個團隊以他們設計的電腦為名,成立了Pixar Inc.。

5. Pixar Inc.

Pixar 被Jobs買下來之後,與小學館合作的孫悟空案子馬上被停掉,因為對Jobs來說,這畢竟是一家電腦硬體公司,而對Catmull或Smith來說,當時 電腦動畫的技術仍新,影片成本可能會高到不切實際,持續的燒錢有可能會讓Jobs砍掉一些人手,因此他們放棄了這個製作電腦動畫長片的機會,不久之後他們 知道Inc.這幾個字在註冊公司時不是必需的,他們因此只留下Pixar這個名字,不過這時要成為Pixar Animation則還有一段路要走。

Pixar 的主要產品-The Pixar Image Computer (PIC)設定在高階的繪圖市場,不過它沒有自己的使用者界面,需要另外的電腦提供操作介面,使用者也得自己寫軟體,連Pixar自己的短片,除了一部 Red’s Dream之外,沒有一部使用PIC來製作。至於CAPS系統這時候發展完成,Ray Smith之前在NYIT替Schure研究發展的手繪動畫技術剛好應用在這裡,CAPS首次使用是The Little Mermaid(1989)之中最後一個場景,結果非常令人滿意,接下來從The Rescuers Down Under之後全部使用CAPS來著色,不過他們不讓大眾知道這個技術,怕大家覺得電腦做出來的影像破壞大家對迪士尼的印象。

CAPS是 迪士尼與Pixar兩者關係的橋樑,事實上迪士尼也是PIC的少數客戶之一,PIC的銷售也不是很理想,之後的Pixar Image Computer II,即使降低售價也是一樣,有些人認為公司真正的財產是Reyes算圖程式,Andre and Wally B和Luxo Jr.都是由它render出來的。這些影片讓Pixar成為SIGGRAPH的常客,不過這些短片並沒有實際賺錢,公司一直呈現虧損狀 態,Catmull勉強說服Jobs,才不至於讓他裁撤動畫部門。

另一部短片-Tin Toy,讓他們測試PhotoRealistic RenderMan的能力,而對Lasster來說,這也是將電腦動畫中的角色動畫以及故事提升到另一個層次的機會,這部短片贏得1988年奧斯卡最佳動 畫短片獎,也讓迪士尼再次注意到Lasseter這個曾經待過Disney的傢伙,也試圖雇用他,不過最後他還是婉拒,他說: I can go to Disney and be a director, or I can stay here and make history,可見Lasseter對電腦動畫的信心,這時Pixar也開始製作廣告賺錢,為他們之後製作更長的影片暖身,一直到90年代中期都一直在 做廣告,1990年時Pixar將他們的硬體部門賣掉,並集中注意力在廣告製作以及軟體上頭,之後也進行過一波裁員。

6.Making it Fly

Disney 開始構想製作電腦動畫長片,並且尋求夥伴時,雖然Pixar並不是唯一一家會製作電腦動畫的公司,不過因為CAPS的關係與Disney合作,還有 Pixar之前做過的一些短片經驗,讓Pixar成為Disney唯一的人選,Pixar提出要製作一部半小時特別節目的構想,叫做A Tin Toy Christmas,他們相信一部半小時長度的動畫可以慢慢地累積經驗,不過Katzenberg建議將它製作成一部長片,就在Pixar和Disney 談判的同時,Smith這位Pixar的元老級創辦者因為與Steve Jobs不和而離開了Pixar,1991年,在兩家公司的合約談判接近完成時,Lasseter提了Toy Story這個企劃案,影片便開始正式製作。

7.Making it Fly – 2

即 便如此,因為Pixar並沒賺錢,所以即使Toy Story已經在製作,Jobs仍然一直想將Pixar賣掉,其中一個表示感興趣的是Microsoft,不過最後他還是改變主意,沒將Pixar賣掉, 僅將一些技術,像是anti-aliasing,motion blur等等這些專利授權給Microsoft,然後在影片上映前計畫將公司上市股票IPO,為了討好華爾街那些投資者,他首先將Ed Catmull從總裁(president)-這個Catmull從Pixar一開始就擔任的職位拉下來,然後自己做上位置,想說這樣可以給投資者更多信 心。

Toy Story的發行費用花了145個million,這是影片製作預算的五倍,不過其中只有20個million從Disney口袋掏出來,其他都是Burger King或是Nestle等等這些利用影片促銷商品的公司所花費的金額。

Pixar 成為當年度最大的一個IPO,為公司增加了139.7 million的資金,Pixar的影片製作因此可以不完全依賴Disney,之中Jobs擁有80%的股權,IPO後讓他的股票價值1.1個 billion,Toy Story也變成1995年最賣座的影片,美國票房收入共192個million,而美國境外票房則賺進357個million。

8.It seemed like all-out war

許 多好萊塢公司雇用員工都是以案子為基礎,案子結束了,員工也就解散(Run-of-Show),不過Catmull的管理哲學不一樣,他認為”人”才是公 司真正的資產,不過為了讓人繼續留著,勢必得馬上進行下一個案子,A Bug’s Life因此進入製作,這部影片除了Lasseter之外,使用另一個副導演,另一個導演的好處是可以有另一個人分擔指導各部門的壓力,他們指派 Andrew Stanton擔任,也藉此訓練他成為另一位Pixar的導演。另一方面Jobs也在與Disney的合作之中努力建立Pixar品牌的能見度,他認為, 在美國只有兩個真正的品牌,一個是Disney,另一個是Steven Spielberg,他們則想要讓Pixar成為第三個,這時Pixar跟Jobs的關係是,Jobs專心經營他的Apple電腦公司,還有負責和 Disney談到更好的發行條件,Pixar則是可以自己在不受干擾的環境下拍出好的動畫影片。

1994 年,迪士尼的總裁兼COO Frank Wells搭乘直升機意外墜機身亡,之後Eisner並沒有指派Ketzenberg接手他的職位,反而自己接任職務,這讓Ketzenberg非常不 悅,他因此離開Disney,與Steven Spielberg和David Geffen共組了DreamWorks SKG,目的就是要擊垮Disney,不過一開始Lasseter和Ketzenberg仍繼續保持來往,對Lasseter來說,是 Ketzenberg讓Disney對電腦動畫產生興趣,沒 有Ketzenberg的話,可能就沒有Pixar的Toy Story,而且製作Toy Story時,Lasseter也非常尊重Ketzenberg對影片創意上的意見。

Ketzenberg創立了DreamWorks之 後,找上PDI合作製作電腦動畫,並且買下它40%的股權,PDI和Pixar在這之前像是兄弟公司一樣,員工常常有許多交流,即使Pixar從ILM脫 離,兩者變成競爭對手,還是保持友好的關係,PDI的創立者,Carl Posendahl,Richard Chuang和Glenn Entis他們相信即使對手成功,因為對整個產業有利,最後自己公司也會因此得利,所以當Pixar製作Toy Story時,許多人離開PDI跑到Pixar去,不過兩家公司也沒有因此交惡。

Disney與DreamWorks兩家公司開始交 惡,Ketzenberg製作了Antz,故事模仿Pixar的A Bug's Life,而Eisner則故意將A Bug's Life的影片上映日期定在The Prince of Egypt這部DreamWorks第一部動畫長片的同一天上映,這兩部影片,A Bug's Life大部份依賴視覺的笑料,而Antz則依賴語言的笑點,劇本前一個適合兒童,後者則含有許多成人才有辦法理解的內容,至於票房上,A Bug's life則贏Antz許多。

另 一部當時Pixar在作的長片是Toy Story的續集,原本一開始Disney打算用較少的預算製作一部直接在DVD發行的長片,就像其他手繪動畫長片的續集一樣,不過一方面公司中大部分的 人仍忙於A Bugs Life,要找到人手是個問題,於是他們讓Pixar內部一個製作電玩的獨立單位-The Interactive Product Groups接手這個續集製作,會議之後Disney對這個續集故事非常喜歡,加上Pixar內部很難同時管理兩個預算與品質層級不同的案子,Toy Story 2於是變成動畫長片,Steve Jobs關掉了電玩部門,成員則變成Toy Story 2的核心人員,Toy Story 2完成後,好評不斷,它是少數公認超越第一集水準的續集電影,更加豐富,也更加具有愉樂性。

9. Crisis in Monstropolis

接 下來Pixar開始製作Monster Inc.,一個關於人類小朋友藉由衣櫥跑到怪獸世界的故事,或許是因為這個題材過於普遍,一些創作者認為他們的作品受到Pixar的抄襲而提出告訴,像是 劇場導演Lori Madrid就有一個類似故事的歌舞劇,不過Pixar在這個案子中勝訴,Monster Inc.得以繼續製作,也是在Monster Inc.製作期間,500名散居在不同建築的Pixar員工,從公司原址Point Richmond搬到現在位於Emeryville的地方,公司位於單棟建築內,室內的動線規劃讓員工非常容易遇見彼此,因此增加交流的機會。

Monster Inc.跟之前Pixar影片不一樣的地方在每個角色都有一個lead animator負責,就像傳統迪士尼動畫一樣。

2002 年,Monster Inc上映後11個月,另一個訴訟案又爆開,控告者是一位名為Stanley Miller的插畫家,他控告Pixar在Monster Inc.裡面兩個主角的設計抄襲他之前畫的漫畫裡的人物,對Pixar不利的是,在調查過程中,他們發現Pixar的設計師們的確有拿Miller的作品 當作參考,不過仍舊不足 以證明Monster Inc.的人物造型是直接抄襲Miller的設計,其實許多影片難免都受其他影片或是設計影響,只是程度多寡,抄襲與參考常常是非常主觀的概念,像是A Bug's Life像是黑澤明的七武士的昆蟲版,Cars故事跟Doc Hollywood雷同,Ratatouille的結局-評論家被一道鄉下食物打敗,跟Marcel Proust的Remembrance of Things Past故事一樣。最後是一位畢業於CalArts,也曾經在Disney工作過的設計師來替Miller擔任證人,他分析人物的設計過程,推論出 Monster Inc.裡的人物很有可能是抄襲Miller的設計,甚至連設計圖筆觸都相同。最後Disney/Pixar可能覺得勝訴機會不大,所以跟Miller私 下達成協議和解。

10. Emeryville

Finding Nemo是Pixar第一部在Emeryville這個新的公司位置製作的影片,因為影片技術複雜,技術指導團隊分成六個組,各個組分別製做自己的模型, 燈光,材質,水中效果等等,分別是The Reef Unit,The Shark/Sydney Unit,Tank Unit,The Ocean Unit,The Schooling/Flocking Unit和The Character Unit,影片在2003年上映後,票房超越獅子王,在當時變成有史以來最賣座的動畫長片(不過如果將通貨膨脹計算進去,當時獅子王還是排名第 一),Finding Nemo也獲 得奧斯卡最佳動畫長片獎項。

接著Finding Nemo後則是The Incredibles,早期Pixar影片都是幾個導演,一堆劇作家,不過The Incredibles只有一個導演,一個劇作家,就是Brad Bird他一個人,Brad Bird這個Lasseter的大學同學還有許多跟傳統不一樣的製作習慣,像是在動畫長片製作中,storyboards的功能是將對話加入,並且尋找出 人物的感情,其他的細節則留到之後再處理,不過Bird堅 持像是人物的基本走位,燈光,以及攝影機運動等等這些細節都要在storyboards階段就確定,之後的流程就只是執行storyboards而已。 Bird對品質的超高要求也不會因為電腦動畫有技術困難而妥協。

不過一些漫畫迷指出The Incredibles與漫畫Watchmen故事太過雷同,同樣都是描寫一群落難超人的故事,許多超人相繼被謀殺,他們因此得找出幕後指使者,壞蛋同樣 都是小時 候時被崇拜的人物拒絕而心生歹念,兩者也同樣有取笑穿著斗篷超人的段落,不過Bird在訪問中說這些純屬巧合,他從來沒有讀過這本漫畫。

11.Homecoming

Disney 在1999年設立了自己的電腦動畫片廠-Secret Lab,製做Dinosaur,2000年影片上映時賣座雖然不差,不過跟它龐大的預算比較起來,算是嚴重地賠錢,接下來的案子稱作Wild Life,影片過於反傳統,Roy Disney看過試片後當場砍掉這個案子,Secret Lab也連同一起關掉,這時期Disney自己的數部手繪動畫長片也表現欠佳,從The emperor's New Groove(2000),Atlantis(2001)一直到Treasure Planet(2002)的賣座都極差。

這段時間 Michael Eisner與Steve Jobs的關係也逐漸惡化,不光只是合約上的爭議,也包括兩家公司合作的模式。Eisner同時也將Roy逼退,Roy因此辭去他的董事頭銜,離開 Disney時說:當初他將Eisner與Frank Wells帶進公司,他們因此讓Disney起死回生,這點讓Roy非常敬佩,不過當Wells意外過世後,Disney就每況愈下,逐漸喪失公司的優良 傳統,Roy相信應該是Eisner離開公司,而非他自己,Roy並成立了SaveDisney.com,在網路上抨擊Eisner應該要對Disney 的墮落負責。

這段時間Disney的影片除了Lilo&Stitch(2002)外,每部都賠錢,Disney因此決定結束許多 手繪動畫長片的案子,只因為Eisner認為觀眾已不再對手繪動畫感到興趣,Disney並且開始自己製作電腦動畫長片,發展的案子有Chicken Little,A Day with Wilbur Robertson(Meet the Robersons)等等。

最後 Eisner還是在壓力下下台,Bob Iger成為新任的Disney CEO,他首要的任務就是和Pixar談判,他一手利用自己的Circle 7 Studio製作Toy Story 3逼使Pixar重回談判桌,一方面因為Apple的video Ipod上市,他讓ABC的節目同步在Ipod上放映,藉此拉攏Steve Jobs。

這段時間Pixar製作長片-Cars與 Ratatouille,Ratatouille原本由Jan Pinkava-Pixar短片Geri’s Game的導演來執導,2003年時公司確定它將是Pixar的第8部長片,到2004年時,影片的發展一直拖延,導演Jan Pinkava知道自己需要幫手,所以指派Bob Peterson一起擔任導演的工作,不過讓Pinkava意外的是,故事的部份完全由Peterson接手,Pinkava只留下負責人物設計以及場景 設計的工作, 2005年時召開另一次會議,不過Lasseter認為新的故事徹底失敗,會議結束後Pinkava試圖再接手影片故事的發展,未果,Peterson離 開這個案子,Pinkava則在次年離開Pixar,這時候Lasseter將Bird召回接手擔任導演,Bird版本的Ratatouille跟許多動 畫長片的中心主題-”相信你自己”一樣,不過他的故事也說明並不是所有人都應該相信自己,有些人有才華,有些人則沒有,故事中的餐廳一直在重複自己的成 功,似乎也在暗示Disney一直在消費自己過往的輝煌,而喪失了自己。

Disney自己內部的調查發現,父母給Pixar的品牌評價超 越了Disney,這讓Disney不得不更重視Pixar的合作關係,俗話說得好,要是贏不了你,就把你買下來,2006年1月24日,Iger宣佈 Disney以7.4個billion的價錢買下Pixar,Lasseter成為Disney/Pixar的CCO(chief creative officer),Catmull則成為Disney/Pixar的總裁(president),Steve Jobs則成為Disney的董事之一,在合併案宣布的次日,Lasseter以及Catmull飛到位於Burbank的Disney動畫片場,受到 Disney員工熱烈的歡迎,他被視作Disney的解救者,接著Circle 7 Studio被關掉,這年也是Pixar的Cars上映的時候,許多人將這部影片的票房表現視作對併購結果的態度,結果Cars雖然以Pixar的標準來 看票房算是平平,不過它也成為年度排名第二的影片,它的週邊商品玩具等等則為Disney賺進大筆的鈔票,可惜的是它是第一部Pixar有這麼多負面評價 的影片。

2006年之前只有少數幾家動畫公司在製作電腦動畫長片,不過在2006年出現一波電腦動畫長片潮。

電腦動畫影 片由當時Catmull以及Ray Smith在研究室裡的夢想,變成現在家庭娛樂的主流,我們見到科技讓電腦動畫變得更容易接近,不過電腦動畫還是一門藝術,還是需要天分以及奉獻精神,才 能完成一部好看的影片,而這並不是每個人都具有的天賦或是本事,不過工具的可接近性,讓這門藝術產生更多可能性,從歷史中我們見到這群人從車庫裡的研究者 經過努力變成Disney的掌上明珠,不過相信不久後,Pixar可能也會面對另外一群目前可能在車庫裡夢想著自己未來的競爭者。