[X][Debian][FreeBSD]从Xsession脚本文件看设置启动桌面的配置文件

启动到X桌面,有两种方式:
1,通过终端登录后,用startx 来启动。
通过这种方式启动到X桌面比较简单,主要通过设置 ~/.xinitrc 来设置自己需要的变量和启动的相关程序。
2,通过X Display Manager来启动,这是本文分析的重点,以GDM为例来说明如何设置相关信息。
gdm:在选择语言(Language)和会话(Session)之后,输入用户名和密码,X进行一些初始化的工作,然后跳到调用 Xsession,调用的参数是你所选择的Session[default, custom, failsafe, gnome-session...]
重点在Xsession文件。
FreeBSD(/usr/local/etc/gdm/Xsession)文件分析:
1, 尝试检测 command 参数,即gdm传递给 Xsession 的参数,指定用何种桌面,如果没有指定,则默认设置为failsafe(此种情况下,将出现一个提示框,然后系统给一个X终端)
2, 系统变量设置,尝试读取的文件有: /etc/profile, ~/.profile, /etc/xprofile, ~/.xprofile
3, X资源文件的设置,尝试读取的文件有: /etc/X11/xinit/Xresources, /etc/X11/Xresources, ~/.Xresources
4, 设置键映射,两种方式,优先使用XKB,尝试读取的文件有: /etc/X11/Xkbmap, ~/.Xkbmap, 当这两个文件都不存在的时候,使用xmodmap, 尝试读取的文件有: /etc/X11/xinit/Xmodmap, /etc/X11/Xmodmap, ~/.Xmodmap
5, 设置语言
6, 开始根据GDM的选择执行command:
  • 如果session选择的是custom,那么尝试~/.xsession 文件,如果存在,则根据此文件启动桌面,如果不存在,则将session设置为default.
  • 如果session是default, 那么尝试的文件依次为: ~/.Xclients, /etc/X11/xinit/Xclients, /etc/X11/Xclients, 找到哪个就从哪个启动了,否则设置session为 xsm
  • 最后,如果两者都不是,或者default没有找到相应的文件,根据session的命令启动桌面。

Debian(/etc/gdm/Xsession)文件分析:
Debian中的设置和FreeBSD大同小异,不同点在于
  1. 不会读取 /etc/profile, ~/.profile 等等环境变量设置
  2. 将功能划分到不同的文件中(/etc/X11/Xsession.d下),例如设定变量,启动附加程序等等,分别依次执行。
  3. 将custom 和 default 合并了,所以session选择的时候,两者是一样的,用户可以设置 ~/.xsession 或者是 ~/.Xsession

--------------------------------
以下操作秉着不修改任何系统文件的原则*:
设置X的全局环境变量,在FreeBSD里面,只要设置到 ~/.profile 里面就会生效,而Debian里面需要在GDM里面选择custom(or default) 之后,还要设置 ~/.xsession 文件。
启动额外程序(如输入法) ,可以在GDM里面选择 custom 之后,建立~/.xsession 文件。FreeBSD还可以选择default之后,建立~/.Xclients.

~/.xsession(无论~/.xinitrc或者是~/.Xclients,其实格式都一样,偷懒的做法是做链接) 示例:

#!/bin/sh
#读取~/.bashrc的设置
[ -f ~/.bashrc ] && source ~/.bashrc
# 设置输入法并启动
export XMODIFIERS="@im=SCIM"
exec scim -d > /dev/null 2>&1 &
#启动窗口管理器
exec enlightenment_start

--------------------------------
PS. 在Debian下还可以通过im-switch来管理输入法,安装im-switch之后,在/etc/X11/Xsession.d/下会产生 80im-switch 这个文件,将被读入Xsession并根据用户所选择的语言来启动相应的输入法。更详细的信息,请自行分析 /etc/X11/Xsession.d/80im-switch 这个文件。

评论

此博客中的热门博文

激活华为光猫的小宇宙-openwrt

[Google Maps] Where are you from?

Debian: tor + privoxy