# xinitrc (简体中文)

相关文章

- Display Manager (简体中文)
- Start X at Login (简体中文)
- Xorg
- xprofile

翻译状态： 本文是英文页面 Xinitrc 的翻译，最后翻译时间：2012-12-23，点击这里可以查看翻译后英文页面的改动。

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

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

## 开始

`/etc/skel/` 为新创建用户提供了合理的默认配置文件和目录(skel 是 skeleton 的简写，包含了用户主目录的基本结构)。 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` 行，而且 exec 行必须位于配置文件的末尾。exec 后面的所有命令只有窗口退出后才会被执行。

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

     $ startx

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

### 保持会话

X 必须在登陆 tty 启动才能保持 logind 会话。`/etc/X11/xinit/xserverrc`已经进行了处理。参阅General Troubleshooting#Session permissions。

注意: 过去使用`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-compmgr`、`xscreensaver`、`xsetroot` 和 `sh` 都是后台运行(`&`后缀)。否则，脚本会等待每个进程结束才会执行 `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 fluxbox` 或 `xinit spectrwm` 启动 fluxbox 或 spectrwm。

### 随系统启动方式

参阅 Start X at Login.

Categories:

- Desktop environments (简体中文)
- X Server (简体中文)