xinitrc (简体中文)

From ArchWiki
Revision as of 01:57, 1 November 2012 by Fengchao (Talk | contribs) (update translation.)

Jump to: navigation, search

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end

翻译状态: 本文是英文页面 Xinitrc翻译,最后翻译时间:2012-11-01,点击这里可以查看翻译后英文页面的改动。

~/.xinitrc 文件是 xinitstartx 第一次启动时会读取的脚本。通常用在启动 X 时执行窗口管理器 和其他程序,例如启动守护进程和设置环境变量。xinit程序用来启动X窗口系统,是不能直接从/etc/init启动 X 或者使用多窗口的系统中的第一个客户端。

~/.xinitrc 一个主要功能是根据单个用户的设置决定 /usr/bin/startx/usr/bin/xinit 程序启动的窗口系统。~/.xinitrc 中还可以加入许多系统定制选项。

开始

/etc/skel/ 为新创建用户提供了合理的默认配置文件和目录(skelskeleton 的简写,包含了用户主目录的基本结构)。 xorg-xinit 软件包会在 /etc/skel 中加入 .xinitrc 文件。

注意: ~/.xinitrc 是所谓的 '点' (.) 文件。*nix 系统中以点 (.) 开头的文件是隐藏文件,不会在普通 ls 命令中显示。点文件可以通过 ls -a 显示。'rc' 指 Run Commands,意味着它是一个配置文件。因为它控制了一个程序的运行,所以也可以认为是 "Run Control"。

将示例 /etc/skel/.xinitrc 文件复制到主目录:

$ cp /etc/skel/.xinitrc ~/

然后编辑 ~/.xinitrc ,取消对应 桌面 前的注释。例如要使用 Xterm,修改为:

#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)
if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

# exec gnome-session
# exec startkde
# exec startxfce4
# exec wmaker
# exec icewm
# exec blackbox
# exec fluxbox
# exec openbox-session
# ...or the Window Manager of your choice
exec xterm
注意: ~/.xinitrc 中应该只有 一个 未注释掉的 exec 行,否则仅第一个会被执行。

现在可以启动 X 了,作为普通用户,而不是 root 用户,执行:

 $ startx -- vt$XDG_VTNR

将会显示桌面,可以测试键盘及其布局,看看鼠标是否正常工作。

保持会话

X 必须在登陆 tty 启动才能保持 logind (或 consolekit) 会话。/etc/X11/xinit/xserverrc已经进行了处理。

注意: 过去使用ck-launch-session启动新会话而不是破坏原来的会话,logind无法进行这样的处理,而且同时处理多个用户的显示管理器需要 X 在指定的会话上运行。

文件示例

下面是一个简单的 ~/.xinitrc 文件示例,包含简单的启动程序:

~/.xinitrc
#!/bin/sh

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

xrdb -merge ~/.Xresources         # 更新 x 资源数据库

xscreensaver -no-splash &         # 启动屏保 
xsetroot -cursor_name left_ptr &  # 设置光标图标
sh ~/.fehbg &                     # 设置背景图

exec openbox-session              # 启动窗口管理器

推荐使用 exec 作为前缀,以替换当前的进程,这样脚本退出时 X 不会退出。

此外 xorg-xinit 还提供了另外一个示例:/etc/skel/.xinitrc。复制到主目录就能使用。

$ cp /etc/skel/.xinitrc ~/ 

文件配置

如果未使用窗口管理器,请记得 X 会话的生命周期与 ~/.xinitrc 同步。只要脚本退出, X 就会关闭。所有窗口管理器的退出和 X 的退出应该同步。可以通过在脚本最后运行窗口管理器实现。

在上面例子中,cairo-compmgrxscreensaverxsetrootsh 都是后台运行(&后缀)。否则,脚本会等待每个进程结束才会执行 openbox-session。同时,openbox-session 不是后台运行,这样保证 openbox 不退出,脚本就不退出。

下面介绍如何配置多桌面环境的 ~/.xinitrc

命令行方式

如果你有一个可用的 ~/.xinitrc 文件,只想尝试下其他的窗口管理器/桌面环境,你可从命令行给 xinit 完整路径

xinit /full/path/to/window-manager

必须使用完整路径。此外你可以选择在--后面传递 X 服务器参数,例如

xinit /usr/bin/enlightenment -- -br +bs -dpi 96

下面~/.xinitrc 例子可以用参数启动给定窗口管理器:

~/.xinitrc
#!/bin/sh
#
# ~/.xinitrc
#
# Executed by startx (run your window manager from here)

if [ -d /etc/X11/xinit/xinitrc.d ]; then
  for f in /etc/X11/xinit/xinitrc.d/*; do
    [ -x "$f" ] && . "$f"
  done
  unset f
fi

if [[ $1 == "fluxbox" ]]
then
  exec startfluxbox
elif [[ $1 == "spectrwm" ]]
then
  exec spectrwm
else
  echo "Choose a window manager"
fi

用这个例子可以通过命令 xinit fluxboxxinit spectrwm 启动 fluxbox 或 spectrwm。

随系统启动方式

参阅 Start X at Login.