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.