配置

GDM 有一些配置界面,包括脚本集成点、守护进程配置、欢迎界面配置、通用会话配置、与 gnome-settings-daemon 配置的集成以及会话配置。这些集成的细节在下边描述。

5.1. 脚本集成点

GDM 脚本集成点可以在 <etc>/gdm/ 目录中找到:

Xsession
Init/
PostLogin/
PreSession/
PostSession/

InitPostLoginPreSessionPostSession 脚本均按如下描述的运行。

对于每一种脚本,默认被执行的那个被叫做“Default”并且存储在一个与脚本类型相关的目录中。于是,默认的 Init 脚本是 <etc>/gdm/Init/Default。可以提供一个对每个显示的脚本,如果存在,其将替代默认脚本运行。这样的脚本保存于和默认脚本相同的目录,并且以这个显示的 Xserver DISPLAY 值为文件名。例如,如果 <Init>/:0 脚本存在,其将为 DISPLAY “:0”运行。

所有的这些脚本都使用 root 特权运行,运行成功时返回 0,如果有任何会导致登录会话结束的失败都会返回非零值。同样注意,GDM 将一直阻塞到脚本运行完毕,所以,如果这些脚本的任何一个挂起,都会导致登录进程挂起。

当这个登录界面的 Xserver 成功启动,但是在登录图形界面的实际显示之前,GDM 将运行 Init 脚本。这个脚本在登录窗口显示之前需要启动程序时很有用,或者用于做必要的特定初始化。

用户成功认证之后,GDM 将运行 PostLogin 脚本,这早于任何会话设置,包括早于调用 pam_open_session。这个脚本对需要在会话运行之前对会话进行初始化有用。例如,您可以设置用户的 $HOME 目录,如果需要的话。

在用户会话初始化之后,GDM 将运行 PreSession脚本。这个脚本对需要在会话初始化之后进行的初始化有用。例如,它可用于会话管理或审计。

当一个用户结束他的会话,GDM 将会运行 PostSession 脚本。注意 Xserver 在脚本运行时将会停止,所以它是不可访问的。

注意,PostSession 将可能甚至在显示器因为 IO 错误或相关的错误没有反应时运行。因此,不保证在脚本执行时 X 程序运行。

所有的上述脚本将设置 $RUNNING_UNDER_GDM 环境变量为值 yes。如果脚本也与其他显示管理器共享,这允许您定义 GDM 何时调用这些脚本,以使您可以在使用 GDM 时运行指定代码。

5.2. 自启动配置

<share>/gdm/autostart/LoginWindow 目录包含《FreeDesktop.org 桌面程序自启动规范》中规定的格式的文件。规范中的标准特性可以被用于指定应该自动重启动或只有设置了 GConf 配置值才启动等。

任何在这个目录中的 .desktop 文件将造成相关的程序在登录欢迎界面自动启动。默认情况下,GDM 跟随了自动启动 gdm-simple-greeter 登录欢迎界面本身、 gnome-power-manager 程序、gnome-settings-daemon 和 Metacity 窗口管理器的文件。欢迎程序运行需要这些程序。另外,如果设定了辅助功能配置节中指定的配置值,桌面项文件被用以启用多种辅助功能技术程序。

5.3. Xsession 脚本

<etc>/gdm/Xsession 也有一个 Xsession 脚本,其在 PreSessionPostSession 之间被调用。这个脚本不像其他脚本那样支持为每个显示配置。这个脚本用于实际启动用户会话。这个脚本以用户名义运行,并且其将运行用户在桌面会话文件中选定启动的任何会话。

5.4. 守护进程配置

GDM 守护进程使用 <etc>/gdm/custom.conf 文件配置。默认值存于 gdm.schemas 文件的 GConf 中。推荐最终用户修改 <etc>/gdm/custom.conf 文件,因为 schemas 文件在用户升级系统以使用新版的 GDM 时可能会被覆盖。

注意,旧版的 GDM 支持其他的配置选项,但是最新版的 GDM 已经不支持它们了。

<etc>/gdm/custom.conf 文件使用 keyfile 的格式。括号中的关键词定义了节组,等号(=)之前的字符串是键,等号数的值代表他们的值。空行或以 # 开始的行被忽略。

<etc>/gdm/custom.conf 文件支持“[daemon]”、“[security]”和“[security]”小组节。在每一个组中,都有可以被定义了用来修改 GDM 行为的特定的键/值对。例如,要允许计时登录并指定可以超时登录中,默认的用户为“you”,你可一修改这个文件,以使它包含如下行:

[daemon]
TimedLoginEnable=true
TimedLogin=you

下边是支持的配置键全表:

5.4.1. [chooser]

Multicast
Multicast=false

如果为 true 且启用了 IPv6,chooser 将向本地网络发送一个多播请求然后收集已经加入多播组的机器的回应。

MulticastAddr
MulticastAddr=ff02::1

这是本地连接的多播地址。

5.4.2. [daemon]

TimedLoginEnable
TimedLoginEnable=false

如果用户使用了 TimedLogin,那么应该在一定时间的空闲之后登录(秒作单位,用TimedLoginDelay设定)。这在公共访问的终端上很有用,甚至家庭中也有用。如果用户使用键盘或者浏览菜单,时间将会重置为 TimedLoginDelay 或者是30秒,看哪一个长些。如果登录程序要求输入用户名,而用户没有输入用户名但按下了回车键,那么 GDM 将假定是想用超时缺省用户登录。注意对这个用户不会有密码提示,因此您必须要细心,尽管使用 PAM 可以配置在允许登录前需要密码。更多相关信息或者似乎这个特性没有起作用,请查阅 “Security->PAM” 一节。

TimedLogin
TimedLogin=

这是会在闲置指定的秒数之后自动登录的用户。

如果值以一个竖线 | (管道符号)结尾,GDM 将激活指定的程序,并且不管程序返回什么值到标准输出上,都作为用户值。程序以 DISPLAY 环境变量的设置来运行,因而使为每个用户指定不同显示样式成为可能。例如,如果值是 “/usr/bin/getloginuser|”,那么将会运行程序 “/usr/bin/getloginuser” 来获取用户值。

TimedLoginDelay
TimedLoginDelay=30

TimedLogin 用户登录之前等待的秒数。

AutomaticLoginEnable
AutomaticLoginEnable=false

如果为 true,AutomaticLogin中指定的用户将会立即登录。这个特性就像使用延时为 0 秒的倒计时登录。

AutomaticLogin
AutomaticLogin=

这是如果 AutomaticLoginEnable 为 true 时,会立即登录的用户。

如果值以一个竖线 | (管道符号)结尾,GDM 将激活指定的程序,并且不管程序返回什么值到标准输出上,都作为用户值。程序以 DISPLAY 环境变量的设置来运行,因而使为每个用户指定不同显示样式成为可能。例如,如果值是 “/usr/bin/getloginuser|”,那么将会运行程序 “/usr/bin/getloginuser” 来获取用户值。

User
User=gdm

用于运行欢迎程序和其他 GUI 程序的用户名。更多相关信息请参考本文档的 Group 配置键和 “Security->GDM User And Group” 一节。

Group
Group=gdm

运行欢迎程序和其他 GUI 程序的组名。更多相关信息请访问本文档的 User 配置键和“Security->GDM User And Group”一节。

5.4.3. 调试选项

[debug]
Enable
Enable=false

要启用调试,在 <etc>/gdm/custom.conf 文件里设置 debug/Enable 键为 “true”,然后重启 GDM。调试输出将发送到系统日志文件 (根据操作系统,<var>/log/messages<var>/adm/messages)。

5.4.4. 欢迎程序选项

[greeter]
IncludeAll
IncludeAll=true

如果为 true,头像登陆器将显示本地机器上的所有用户;如果为 false,头像登录器将只显示最近登录过的用户。

当这个键值为 true 时,GDM 将调用 fgetpwent() 来获取系统中的本地用户列表。所有用户 ID 小于 500(在 Oracle Solaris 上小于100)将被过滤出来。头像登陆器也将显示所有以前登录系统的用户(如 NIS/LDAP 用户)。它通过调用 ck-history ConsoleKit 接口来获取该列表。它也会滤除没有有效 shell 的用户(有效 shell 就是 getusershell() 返回的全部 shell - /sbin/nologin 或 /bin/false 是无效 shell,即使是 getusershell() 返回了它们)。

如果值为 false,GDM 只是简单显示之前登录系统的用户(本地用户或 NIS/LDAP 用户),通过调用 ck-history ConsoleKit 接口。

Include
Include=

设置到一个总是包括在头像登陆器里的用户列表。这个值设置到一个用户列表中,用逗号分隔各个用户。默认这个值为空。

Exclude
Exclude=bin,root,daemon,adm,lp,sync,shutdown,halt,mail,news,uucp,operator,nobody,nobody4,noaccess,postgres,pvm,rpm,nfsnobody,pcap

设置到一个总是不包括在头像登录器中的用户列表。这个值设置为一个用户列表,用逗号分隔。注意, custom.conf 的设置会覆盖默认值,因而如果您想在列表中添加额外的用户,那么您需要将额外用户值添加到默认值列表后面。

5.4.5. 安全选项

[security]
DisallowTCP
DisallowTCP=true

如果为 true,在启动关联的 Xservers 时将总是跟随 -nolisten tcp 到命令行,即禁用了 TCP 连接。这是一个更安全的配置,如果您不使用远程连接。

5.4.6. XDCMP 支持

[xdmcp]
DisplaysPerHost
DisplaysPerHost=1

为了防止攻击者填满等待队列,GDM 只允许一台远程计算机发起一个连接。如果希望为有多个显示器的计算机提供服务,您需要增加这个值。

注意连接到本地的显示器数目允许值没有被限制。只有通过 XDMCP 的远程连接被这个配置选项限制。

Enable
Enable=false

设置这项为 true,启用 XDMCP 支持,允许让 GDM 管理远程显示/X 终端。

gdm 监听 UDP 177 端口的请求。参看 Port 选项以获取更多信息。

如果 GDM 编译为支持它,从远程显示的访问可以使用 TCP Wrappers 库控制。服务名是 gdm

您应该添加

gdm:.my.domain
到您的 <etc>/hosts.allow, 根据您的 TCP Wrappers 配置.。参看 hosts.allow 手册页,获取更多细节。

请注意,XDMCP 不是一个相当安全的协议,使用防火墙堵住 UDP 的 177 端口是个好注意,除非您真的需要它。

HonorIndirect
HonorIndirect=true

为不提供自己显示浏览器的 X-terminals 启用 XDMCP INDIRECT 选择(例如,远程执行 gdmchooser)。

MaxPending
MaxPending=4

为了避免拒绝服务攻击,GDM 固定了等待连接的队列的大小。只有 MaxPending 个显示可以同时开启。

请注意,这个参数不限制可以管理的远程显示的数目,只限制同时启动的显示连接的数目。

MaxSessions
MaxSessions=16

定义可同时管理的远程显示连接的最大数目,也就是,您的主机上可以使用的远程显示的总数目。

MaxWait
MaxWait=30

当 GDM 准备好管理一个显示,一个包含一个唯一的会话 ID 的 ACCEPT 包被发送给它,这个会话 ID 用于将来的 XDMCP 交谈。

GDM 将放置会话 id 在等候队列里,等待以 MANAGE 请求显示的响应。

如果在 MaxWait 秒内仍然没有响应,GDM 将声明显示器死机并且将其从等待队列中清除,为其他显示清理出槽。

MaxWaitIndirect
MaxWaitIndirect=30

MaxWaitIndirect 参数确定,用户选择一个主机和接下来用户连接主机间接查询之间,检测最大秒数。当超时后,已选择的主机信息会遗忘,indirect slot 会释放给其他显示。如果有多于 MaxPendingIndirect 个的主机试图发送 indirect 请求,那么可能会较早遗忘这些信息。

PingIntervalSeconds
PingIntervalSeconds=60

如果 Xserver 没有在指定秒数内响应,那么连接会被停止,会话中止。当出现这种情况时,从进程会以一个 ALARM 信号死亡。注意,GDM 2.20 和早期的设定为2,因而如果从 GDM 2.20 和早期版本升级到一个新版本的话,可能需要增加时间。

注意,GDM 在过去使用有一个以分钟作单位的 PingInterval 配置键。对于大多数用途,您可以设置到低于一分钟,然而由于大多数情况是使用 XDMCP(例如用作终端实验室),超过15秒的延迟就真正意味着终端关闭或重启,您将希望结束这个会话。

Port
Port=177

gdm 会监听 XDMCP 请求的 UDP 端口号。不要更改这项,除非你很清楚你在干什么。

Willing
Willing=<etc>/gdm/Xwilling

当机器在一个 QUERY 后发送一个 WILLING 包返回,它发送一个字符串给出当前服务的状态。默认的信息是系统 ID,但有可能创建一个脚本显示自定义的消息。如果脚本不存在或者这个键是空的,那么发送默认的消息。如果脚本成功并产生了一些输出,输出的第一行被发送(仅第一行)。它最多每3秒运行一次,以防止服务可能被机器的 QUERY 包塞满而拒绝。

5.5. 简单欢迎界面配置

GDM 默认的欢迎界面被叫做简单的欢迎界面,并且通过 GConf 配置。默认值使用 GConf 存储于 gdm-simple-greeter.schemas 文件。如果“gdm”用户有一个可写的 $HOME 目录来盛放 GConf 设置,这些默认值将被覆盖。这些值可以使用 gconftool-2gconf-editor 程序修改。支持下列配置选项:

欢迎界面配置键
/apps/gdm/simple-greeter/banner_message_enable
false (boolean)

控制浮动信息文本是否显示。

/apps/gdm/simple-greeter/banner_message_text
NULL (string)

指定在欢迎窗口显示浮动文本消息。

/apps/gdm/simple-greeter/disable_restart_buttons
false (boolean)

控制是否在登录窗口显示重启按钮。

/apps/gdm/simple-greeter/disable_user_list
false (boolean)

如果为 true,不在登录窗口显示已知用户的头像登录功能。

/apps/gdm/simple-greeter/logo_icon_name
computer (string)

设置为要使用的主题图标名,以获取欢迎标志。

/apps/gdm/simple-greeter/recent-languages
[] (string list)

设定语言列表,以便在登录窗口显示默认语言。默认值是“[]”,用默认的设定仅显示系统语言,选项“其他...”弹出一个对话框,显示用户可选择的所有可用的语言列表。

不希望用户手动更改这项设置,而是,GDM 跟踪在配置键中选中的任何语言,并且在语言组合框中与“其他...”一起单独显示他们。这种方式,使常用的语言可以容易的选择。

/apps/gdm/simple-greeter/recent-layouts
[] (string list)

设置在默认的登录面板上显示的键盘布局的列表。默认值是“[]”。使用默认的配置时,只显示默认的键盘布局,其他的选项在“其他...”中,其弹出一个对话框,显示所有可用的键盘布局,以供用户选择。

不希望用户手动更改这项设置,而是,GDM 跟踪在配置键中选中的任何语言布局,并且在键盘布局组合框中与“其他...”一起单独显示他们。这种方式,使常用的键盘布局可以容易的选择。

/apps/gdm/simple-greeter/wm_use_compiz
false (boolean)

控制是否使用 compiz 替换 metacity 作为窗口管理器。

5.6. 辅助功能设置

本节描述 GDM 可用的辅助功能配置选项。

5.6.1. GDM 辅助功能对话框和 Gconf 键

登录界面的 GDM 欢迎面板显示一个辅助功能图标。点击这个图标,打开 GDM 辅助功能对话框。在 GDM 辅助功能对话框中,有一列复选框,用户可以启用或禁用相关的辅助选项。

复选框对应屏幕键盘、屏幕放大镜和屏幕阅读器辅助工具作用于三个 GConf 键,这在本文档的下一节中讲述。通过启用或禁用这些复选框,相关联的 GConf 键设置为“true”或“false”。当 GConf 键设为 true,辅助工具关联这些 GConf 键启动,当 GConf 键设为 false,辅助工具关联这些 GConf 键禁用。这些 GConf 键在用户登录后,不会自动重置为默认状态。所以,上次 GDM 登录的会话中的辅助工具,在下次登录会话时会自动运行启动。

GDM 辅助功能对话框中的其他的复选框没有对应的 GConf 键,因为没有启动额外的程序来提供这些辅助功能特性。其他选项对应 Xserver 对应的辅助功能特性,其在 GDM 会话中一直运行。

5.6.2. 辅助功能 GConf 键

GDM 提供如下的 GConf 键来控制它的辅助功能:

GDM 配置键
/desktop/gnome/interface/accessibility
false (boolean)

控制辅助功能设施是否由 GDM 图形界面启动。这被许多辅助功能程序的工作所需要。

/desktop/gnome/applications/at/screen_magnifier_enabled
false (boolean)

如果设置了,链接到 GConf 键的辅助工具将随着 GDM 图形界面程序启动。默认这是一个屏幕放大镜程序。

/desktop/gnome/applications/at/screen_keyboard_enabled
false (boolean)

如果设置了,链接到 GConf 键的辅助工具将随着 GDM 图形界面程序启动。默认这是一个屏幕键盘程序。

/desktop/gnome/applications/at/screen_reader_enabled
false (boolean)

如果设置了,链接到 GConf 键的辅助工具将随着 GDM 图形界面程序启动。默认这是一个屏幕阅读程序。

5.6.3. Linking GConf Keys to Accessibility Tools

对于 screen_magnifier_enabled, screen_keyboard_enabled 和 screen_reader_enabled GConf 键,要启动的辅助工具依赖于位于 GDM 自启动文件夹的桌面项文件,将在本手册的“自启动配置”一节中讲述。在 GDM 自启动文件夹中的任何桌面项文件,都能够通过 AutostartCondition 指定 GConf 键来链接到它们。桌面项文件中的 AutostartCondition 精确行应该是下列之一:

AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled
AutostartCondition=GNOME /desktop/gnome/applications/at/screen_magnifier_enabled
AutostartCondition=GNOME /desktop/gnome/applications/at/screen_reader_enabled

当一个辅助功能键是 true,那么所有在 GDM 自启动桌面项文件中,关联到这个键的程序都会启动(除非在那个桌面项文件中 Hidden key 也设为 true)。单一的 GConf 键甚至可以启动多个辅助工具,如果有多个 GDM 自启动文件夹里的桌面项文件用这个AutostartCondition。

5.6.4. 修改辅助工具配置的例子

例如,如果 GOK 与 GNOME 一起分发,并作为默认的屏幕键盘,那么这可能被一个不同的程序所替换,如果想要这么做的话。要用键盘程序“onboard”替换 GOK,并且额外还激活辅助工具“mousetweaks”支持悬停点击,那么就需要下面的配置项。

为 onboard 创建一个桌面项文件,再为 mousetweaks 创建另一个,例如 onboard.desktop 和 mousetweaks.desktop。这些文件必须放在 GDM 自启动文件夹,格式要求在本文档的“自启动配置”一节里解释。

下边是作为例子的 onboard.desktop 文件:

[Desktop Entry]
Encoding=UTF-8
Name=Onboard 屏幕键盘
Comment=使用屏幕键盘
TryExec=onboard
Exec=onboard --size 500x180 -x 20 -y 10
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Accessibility;
AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled

下边是一个作为例子的 mousetweaks.desktop 文件:

[Desktop Entry]
Encoding=UTF-8
Name=模拟鼠标点击
Comment=通过悬停指针来执行鼠标点击
TryExec=mousetweaks
Exec=mousetweaks --enable-dwell -m window -c -x 20 -y 240 
Terminal=false
Type=Application
StartupNotify=true
Categories=GNOME;GTK;Accessibility;
AutostartCondition=GNOME /desktop/gnome/applications/at/screen_keyboard_enabled

注意 AutostartCondition 一行,是为屏幕键盘将全部桌面项文件链接到 GConf 键。

要在启动时禁用 GOK,用于 GOK 屏幕键盘的桌面项文件必须删除或禁用。否则 onboard 和 GOK 将同时启动。这可以通过删除 GDM 自启动文件夹中的 gok.desktop 文件,或者在 gok.desktop 文件中添加“Hidden=true”。

经过这些改变,当用户在 GDM 会话中激活屏幕键盘时,GOK 将不再会运行,而 onboard 和 mousetweaks 会取代它启动。

5.7. 通用会话设置

GDM 欢迎程序使用一些与您桌面会话中相同的框架程序,因而,一些 GConf 设置会相互影响,对于这些设置,欢迎程序会使用默认值,除非它被:1) GDM 的安装强制策略覆盖,2) 系统强制策略覆盖。GDM 安装时用它自己的强制策略为了安全锁定了一些设置。

5.8. GNOME 设置守护进程

GDM 启用了 gnome-settings-daemon 的下列插件:a11y-keyboard, background, sound, xsettings。

他们负责例如背景图片,字体和主题设置,声音事件等。

也可以使用 GConf 禁用插件。例如,如果您想禁用声音插件,就可以不设置下边这个键:/apps/gdm/simple-greeter/settings-manager-plugins/sound/active

5.9. GDM 会话配置

GDM 会话指定使用 FreeDesktop.org Desktop Entry Specification,可以在这找到参考: http://www.freedesktop.org/wiki/Specifications/desktop-entry-spec

默认情况,GDM 将桌面项文件安装在 <share>/xsessions 文件夹。GDM 在下列文件夹中搜索桌面项文件: <etc>/X11/sessions/<dmconfdir>/Sessions<share>/xsessions<share>/gdm/BuiltInSessions。默认情况 <dmconfdir> 设置为 <etc>/dm/,除非 GDM 通过 “--with-dmconfdir” 选项配置了其他文件夹。

可以通过编辑桌面项文件并添加一行 Hidden=true 来禁用一个会话。

GDM 桌面项文件支持 GDM-specific 扩展,一个叫“X-GDM-BypassXsession”的键,如果这它没有在桌面项文件中指定,默认值是“false”。如果这个键指定为“true”,那么在启动用户会话时,GDM 将直接启动桌面项文件中的“Exec”键指定的程序。将不通过 <etc>/gdm/Xsession 脚本来运行这个程序,这是通常的操作。因为忽略 <etc>/gdm/Xsession 脚本避免以通常系统和用户设置来启动用户会话,所以用这种方式对于调试系统,以及可能阻止用户正常启动的错误脚本很有用处。

5.10. GDM 用户会话和语言配置

用户选择的默认会话和语言保存在 ~/.dmrc 文件里,当用户首次登录系统,这个文件由用户初始的选择来创建。用户可以在登录时方便地改变这些默认值。GDM 会记住这些改变在下次登录时使用。

~/.dmrc 文件是标准的 INI 格式,它有一小节叫 [Desktop],里面有两个键:SessionLanguage

Session 键指定 .desktop 会话的基本名,用户通常使用的会话不带 .desktop 扩展名。Language 键指定用户默认使用的语言。如果这些键都没有,则使用系统默认值,这个文件通常看起来如下所示:

[Desktop]
Session=gnome
Language=cs_CZ.UTF-8