在偶半年前所写的“Display Manager三兄弟”一文中,分别介绍了XDM、KDM和GDM的使用方法。文中有关GDM的一部分内容,实际上是不正确的。时至今日,有必要重写这段文字,以正视听。
偶最先成功使用GDM是在FreeBSD 5.1版本下,就先从这个版本说起。在FreeBSD 5.1下,安装了XFree和GNOME窗口管理器之后,GDM其实已经存在于系统之中,只是需要进行相关的设置,才能使GDM正常工作。偶先介绍使GDM尽快开始工作的方法,之后再详细解释。
0 前提条件
假定你已经安装好XFree、GNOME或其它窗口管理器,并且确认各窗口管理器均能正常工作。
1 安装GDM的捷径
1.1 Ports安装GDM
GDM的Port在/usr/ports/x11/gdm/目录下,也可以选择/usr/ports/x11/gdm2/,只是版本不同而已。输入命令:
代码:
make install clean
系统自动下载GDM源码,编译、安装。如果已安装GNOME,通常会得到一个出错信息,提示系统已经存在GDM,先把原有版本卸载后,再重新安装:
代码:
make deinstall
make install clean
1.2 激活GDM
在/usr/X11R6/etc/rc.d目录下,我们会发现一个文件,gdm.sh.sample。将此文件复制成gdm.sh。
代码:
cp /usr/X11R6/etc/rc.d/gdm.sh.sample /usr/X11R6/etc/rc.d/gdm.sh
如果你在此前使用XDM或KDM作为Display Manager,必须先将它们关闭,即恢复/etc/ttys的设置如下:
代码:
ttyv8 "/usr/X11R6/bin/xdm -nodaemon" xterm off secure
1.3 使用GDM
重新启动系统,现在漂亮的GDM Login界面应该呈现在你的面前。试一试吧。
相信你很快就有疑问,并发现问题。为什么要重新安装GDM?是为了保持GDM版本最新吗?原来的不能用吗?我喜欢KDE、XFCE、FlueBox,还有其它窗口管理器,GDM只有GNOME可选,该怎么办?欲知详情,请看下回分解。
2 GDM安装详解
2.1 Port安装GDM的内幕
为什么要重新安装GDM?Port安装GDM,除了将GDM安装到系统中之外,还为我们完成了基本的GDM设置,这主要包括:GDM帐号设置,相关目录属性修改,启动脚本样板等等。这一切,在浏览了GDM的pkg-install脚本文件之后,就真相大白了。
2.1.1 GDM帐号设置
在pkg-install处理POST-INSTALL时,它在系统中增加了一个新的Group和User,名字都是gdm,ID号也都是92。如果系统中已有了gdm组或用户,就不再新建。
代码:
pw groupadd gdm -g 92
pw useradd gdm -u 92 -g gdm -h - -d "/nonexistent" -s /sbin/nologin -c "GNOME Display Manager"
2.1.2 相关目录属性修改
在设置帐号的同时,pkg-install还修改了两个目录的属性。
代码:
chown -R gdm:gdm /usr/X11R6/share/gnome/gdm /usr/X11R6/etc/gdm
chmod 0750 /usr/X11R6/share/gnome/gdm
2.1.3 启动脚本样板
GDM的启动脚本样板文件gdm.sh.sample,在安装过程中,会被复制到/usr/X11R6/etc/rc.d目录中。系统启动后,如果存在/usr/X11R6/etc/rc.d/gdm.sh,就会启动GDM。因此,还需要把gdm.sh.sample复制(或改名)成gdm.sh。
2.2 选择其它窗口管理器
启动窗口管理器设置,是保存在/usr/X11R6/etc/gdm/Sessions目录下。缺省情况下,该目录中,有Gnome、Xsession、factory-Gnome和factory-Xsession等几个脚本文件。GDM是通过运行不同的Session脚本来启动不同窗口管理器的。
启动窗口管理器,如果完全自己来写,是很麻烦的。通常,我们可以通过调用Xsession的方法,来简化脚本的编写。以启动KDE为例,我们只要建立如下内容的脚本就可以了。
代码:
#!/bin/sh
# $XConsortium: Xsession /main/10 2004/01/25 23:54:28 Jun Zhang $
exec /usr/X11R6/etc/gdm/Sessions/Xsession kde
脚本文件名即KDE,它将显示在GDM的Session列表里。当然,不要忘记设置可运行文件属性。
代码:
chmod +x /usr/X11R6/etc/gdm/Sessions/KDE
对于XFCE、FlueBox等其它窗口管理器,大可依葫芦画瓢,把KDE脚本里kde换成相应的名字,再用相应的文件名保存即可。
原始的Xsession脚本,只提供了对GNOME、KDE和TWM的支持,并不能启动其它其它窗口管理器,需要手工加入。偶的Xsession脚本,是在KDE的启动命令后,增加了对Enlightenment、Wmaker、Sawfish和Xfce的支持,代码如下:
代码:
...
kde|kde1|kde2)
if [ -x "/usr/share/apps/switchdesk/Xclients.kde" ]; then
exec "/usr/share/apps/switchdesk/Xclients.kde"
else
#fallback for non-redhat
exec startkde
fi
;;
enlightenment)
exec enlightenment
;;
wmaker)
xterm &
[ ! -d $HOME/GNUstep/Library/WindowMaker ] && /usr/X11R6/bin/wmaker.inst
exec /usr/X11R6/bin/wmaker
;;
sawfish)
exec sawfish
;;
xfce)
exec startxfce
;;
...
这样Xsession就能够识别和启动这些窗口管理器了。注意,上述代码中KDE的部分是Xsession原有的。
factory-Gnome和factory-Xsession,没什么用,去除它们的可执行属性,把它们从GDM的Session列表中屏蔽掉。
2.3 GDM外观配置
2.4 GDM的使用
修改了GDM配置,想检查效果,如果总是重启,那就太麻烦了。可以用下面的命令,停止GDM的运行:
代码:
/usr/X11R6/etc/rc.d/gdm.sh stop
重新启动GDM,则如下:
代码:
/usr/X11R6/etc/rc.d/gdm.sh start
GDM与XDM、KDM不同之处是,不能在/etc/ttys中直接启动,而是通过/usr/X11R6/etc/rc.d/gdm.sh,在系统启动时调用,也可以直接调用脚本停止或启动。
3 中文化处理
3.1 中文显示
对于FreeBSD 5.1来讲,在语言列表中应该有简、繁中文选项,选择中文语言后,在窗口管理器中会自动设置相应的环境变量。对于GNOME而言,菜单、桌面、帮助等等,都会自动显示为中文。这一点,对多用户环境来讲,非常方便。
3.2 中文输入
除了要能显示汉字,通常还需输入中文。这可以在Xsession脚本启动具体窗口管理器之前,加以设置。这里,偶以fcitx输入法为例。在Xsession中加入如下代码:
代码:
...
# special for zh_CN.EUC
case $LANG in
zh_CN.EUC)
LC_ALL=$LANG
export LC_ALL
LC_CTYPE=$LANG
export LC_CTYPE
XMODIFIERS="@im=fcitx"
export XMODIFIERS
;;
esac
# run all system xinitrc shell scripts.
...
这样,在需要输入汉字之前,执行"fcitx &"命令,就可以启动fcitx输入法了。上述设置,并不保证中文的显示效果,如何美化中文显示,请参考其它文章。注,上述代码中的最后一个注解,是Xsession脚本中原有的,这里是作为插入这段代码的标志。
3.3 环境变量设置
GDM是在Xsession中设置语言环境变量,属于Login Class的设置。因此,无须管理员对不同用户都作个别设置,也不用去针对不同的Shell,修改以点(.)开头的隐含文件,规范了语言环境的设置。更多的说明,请参考FreeBSD Handbook中有关本地化的章节。
当然,对于KDE,这样做是无效的,并不能看到汉字,还需要用KDE自己的桌面选择程序。或许有什么捷径,目前我不知道,请补充。不过,这样可以得到意想不到的效果。如果GDM选择了简体中文,KDE还是英文,这时我们仍然可以启动fcitx输入中文,达到英文环境下输入中文的效果。真是阴差阳错,歪打正着。需要注意的是,此时Konsole下面的字体有够难看,字符间距和行距较大,需要进行中文字体的美化才行。
4 FreeBSD 5.2.1下的新变化
FreeBSD 5.1中的GDM是gdm-2.2.5.5,FreeBSD 5.2.1中的GDM已经升级为gdm2-2.4.4.5,相应的配置也有所不小的变化。主要的有:启动不同窗口管理器的Session设置,简体中文的语言设置等。
4.1 不同Session的设置
代码:
...
Name=KDE
...
StartCommand=startkde
...
Name设置列表中显示的名称,StartCommand设置启动命令。如此这般,上述各个窗口管理器选项将会出现在GDM的Session列表中了。这样处理,似乎比5.1版本有所简化。
缺省的desktop文件,位于/usr/X11R6/etc/dm/Sessions/default.desktop,它会让GDM启动XSession脚本的缺省窗口管理器,或者是用户目录下.xsession所指定的窗口管理器。
4.2 简体中文的语言选项
偶按照前述方法设置GDM,一切都很正常,和FreeBSD 5.1里的基本一样。唯一例外,在语言选择列表中,英文、繁体中文和其它语言都有,唯独缺少了简体中文。按照GDM文档中的说明,语言列表是来源于/usr/X11R6/etc/gdm/locale.alias中的设置。检查该文件,简体中文项确实存在的。
代码:
Chinese(simplified) zh_CN.UTF-8,zh_CN.EUC
那为何在GDM的语言列表中却没有了简体中文?仔细比对和思考,谜底解开。原来,GDM在生成语言列表时,首先载入/usr/X11R6/etc/gdm/locale.alias,然后逐项检查各语言项,是否在系统中存在。这项检查其实就是看/usr/share/locale中是否有相应的语言编码,对于上述简体中文的设置,要求存在/usr/X11R6/share/locale/zh_CN.EUC目录。然而在FreeBSD 5.2.1中,简体中文缺省的语言编码已经被改变,/usr/X11R6/share/locale/zh_CN.EUC目录不再存在,新的语言编码是zh_CN.GB2312。将/usr/X11R6/etc/gdm/locale.alias中的简体中文设置改为:
代码:
Chinese(simplified) zh_CN.UTF-8,zh_CN.GB2312
重新启动GDM,现在简体中文选项就出现在语言列表中了。测试结果表明,简体中文的显示一切正常。
4.3 中文输入法的设置
Xsession已经搬家到/usr/X11R6/etc/gdm目录下,前述3.2的设置照旧。不过,Xsession的内容变化较多,须小心修改。
说到这里,相信你应该明白,其实并不需要重新安装GDM,原有的GDM按上述内容配置一下就行了。只是需要多些时间而已。当然,想偷懒的话,还是ShortCut来的快。需要注意的是,如果用CVSup同步了Ports,那么FreeBSD 5.1的GDM Port可能已经是5.2.1下的新版本了。
偶的GDM主题是Delicious,一个饿坏了家伙。GDM,真的很Delicious,FreeBSD的桌面大餐岂能少得了它。你真的不想试试吗?!
注意:gdm2从2.6.0.1开始,使用/usr/X11R6/etc/dm/Sessions来保存Session设置。
XFce4在Ports安装时,已提供WITH_GDM选项,以便将Session设置加入到Sessions目录中。(脚本XFce4->/usr/X11R6/etc/gdm/Sessions,XFce4.desktop ->/usr/X11R6/etc/dm/Sessions)