xinitrc (简体中文)
~/.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 文件。
将示例 /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
现在可以启动 X 了,作为普通用户,而不是 root 用户,执行:
$ startx
将会显示桌面,可以测试键盘及其布局,看看鼠标是否正常工作。
保持会话
X 必须在登陆 tty 启动才能保持 logind 会话。/etc/X11/xinit/xserverrc已经进行了处理。参阅General troubleshooting#Session permissions。
文件示例
下面是一个简单的 ~/.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.