Difference between revisions of "Xinitrc (简体中文)"

From ArchWiki
Jump to: navigation, search
(Update translation. Remove vt$XDG_VTNR.)
(在启动的时候自动启用X: Update translation.)
 
(24 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[Category:Desktop environments (简体中文)]]
 
[[Category:X Server (简体中文)]]
 
 
{{Lowercase title}}
 
{{Lowercase title}}
 +
[[Category:Desktop environments (简体中文)]]
 +
[[Category:X server (简体中文)]]
 +
[[de:Xinitrc]]
 
[[el:Xinitrc]]
 
[[el:Xinitrc]]
[[en:Xinitrc]]
+
[[en:Xinit]]
 
[[es:Xinitrc]]
 
[[es:Xinitrc]]
 
[[fr:Startx]]
 
[[fr:Startx]]
 
[[it:Xinitrc]]
 
[[it:Xinitrc]]
{{Article summary start|摘要}}
+
[[ja:Xinitrc]]
{{Article summary text|xinit(startx)程序的主配置文件概览。 program.}}
+
[[ru:Xinitrc]]
{{Article summary heading|相关}}
+
{{Related articles start (简体中文)}}
{{Article summary wiki|Display Manager (简体中文)}}
+
{{Related|Display manager (简体中文)}}
{{Article summary wiki|Start X at Login (简体中文)}}
+
{{Related|Start X at Login (简体中文)}}
{{Article summary wiki|Xorg (简体中文)}}
+
{{Related|Xorg_(简体中文)}}
{{Article summary wiki|xprofile}}
+
{{Related|Xprofile_(简体中文)}}
{{Article summary end}} {{Lowercase title}}
+
{{Related|Xresources}}
{{TranslationStatus (简体中文)|Xinitrc|2012-11-14|233621}}
+
{{Related articles end}}
{{ic|~/.xinitrc}} 文件是 {{ic|xinit}} {{ic|startx}} 第一次启动时会读取的脚本。通常用在启动 X 时执行[[window manager (简体中文)|窗口管理器]] 和其他程序,例如启动守护进程和设置环境变量。{{ic|xinit}}程序用来启动[[Xorg|X窗口系统]],是不能直接从{{ic|/etc/init}}启动 X 或者使用多窗口的系统中的第一个客户端。
+
{{TranslationStatus (简体中文)|Xinitrc|2016-08-04|442881}}
 +
{{ic|~/.xinitrc}} 文件是 {{ic|xinit}} 和它的前端 {{ic|startx}} 第一次启动时会读取的脚本。通常用在启动 X 时执行[[window manager (简体中文)|窗口管理器]] 和其他程序,例如启动守护进程和设置环境变量。{{ic|xinit}}程序用来启动[[Xorg|X窗口系统]],是不使用[[display manager|显示管理器]]时的第一个客户端。
  
{{ic|~/.xinitrc}} 一个主要功能是根据单个用户的设置决定 {{ic|/usr/bin/startx}} 或 {{ic|/usr/bin/xinit}} 程序启动的窗口系统。{{ic|~/.xinitrc}} 中还可以加入许多系统定制选项。
+
{{ic|~/.xinitrc}} 一个主要功能是根据单个用户的设置决定 {{ic|/usr/bin/startx}} 或 {{ic|/usr/bin/xinit}} 程序启动的窗口系统。{{ic|~/.xinitrc}} 中还可以加入许多系统定制选项。大部分显示管理器也会在 xinit 前读取相似的 [[xprofile]] 文件。
  
==开始==
+
== 安装 ==
 +
[[Install|安装]] 软件包 {{Pkg|xorg-xinit}}. 此软件包提供了 ''xinit''、''startx''和默认的 xinitrc 文件。
  
{{ic|/etc/skel/}} 为新创建用户提供了合理的默认配置文件和目录(''skel'' 是 ''skeleton'' 的简写,包含了用户主目录的基本结构)。 {{pkg|xorg-xinit}} 软件包会在 {{ic|/etc/skel}} 中加入 {{ic|.xinitrc}} 文件。
+
== 配置 ==
  
{{注意|{{ic|~/.xinitrc}} 是所谓的 '点' (.) 文件。*nix 系统中以点 (.) 开头的文件是隐藏文件,不会在普通 {{ic|ls}} 命令中显示。点文件可以通过 {{ic|ls -a}} 显示。'rc' 指 ''Run Commands'',意味着它是一个配置文件。因为它控制了一个程序的运行,所以也可以认为是 "Run Control"。}}
+
=== xserverrc ===
  
将示例 {{ic|/etc/skel/.xinitrc}} 文件复制到主目录:
+
{{ic|xserverrc}} 文件是一个启动 X server 的 shell 脚本。如果存在 {{ic|~/.xserverrc}} ,''startx'' 和 ''xinit'' 都会执行这个文件。如果文件不存在,''startx'' 会使用 {{ic|/etc/X11/xinit/xserverrc}}.
$ cp /etc/skel/.xinitrc ~/
+
  
然后编辑 {{ic|~/.xinitrc}} ,取消对应 [[Desktop_Environment (简体中文)|桌面]] 前的注释。例如要使用 [[Xterm]],修改为:
+
为了维护  {{ic|logind}} 的 [[General troubleshooting#Session permissions|authenticated session|会话认证]],避免切换终端时跳过屏幕锁, 必须找用户登录的虚拟终端启动 [[Xorg]]。[http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html] 所以建议在 {{ic|~/.xserverrc}} 中指定 {{ic|vt$XDG_VTNR}}:
 +
 
 +
{{hc|~/.xserverrc|
 +
#!/bin/sh
 +
exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
 +
}}
 +
 
 +
如果要让 X 在其他的终端启动,可以使用 {{ic|/usr/lib/systemd/systemd-multi-seat-x}} 提供的 X server 包裹程序。修改 {{ic|~/.xserverrc}},可以让 ''xinit'' 和''startx'' 都使用这个包裹程序.
 +
 
 +
=== xinitrc ===
 +
 
 +
如果用户主目录中存在 {{ic|.xinitrc}},''startx'' 和 ''xinit'' 会执行此文件。如果不存在,''startx'' 会执行默认的 {{ic|/etc/X11/xinit/xinitrc}}。这个文件默认启动 [[Twm]] 和  [[Xterm]]. ''xinit'' 的默认行为不一样,请参阅 {{ic|man 1 xinit}}。要设置窗口管理器或桌面环境,先通过复制创建默认文件:
 +
 
 +
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
 +
 
 +
根据示例文件修改可以保留一些默认行为,例如会引用 {{ic|/etc/X11/xinit/xinitrc.d}} 中以 {{ic|.sh}} 结尾的脚本。
 +
 
 +
然后编辑 {{ic|~/.xinitrc}} ,例如要使用 [[Openbox]],修改为:
 
{{bc|
 
{{bc|
 
#!/bin/sh
 
#!/bin/sh
Line 36: Line 55:
 
#
 
#
 
# Executed by startx (run your window manager from here)
 
# 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"
+
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
  done
+
    for f in /etc/X11/xinit/xinitrc.d/'''?*.sh''' ; do
  unset f
+
        [ -x "$f" ] && . "$f"
 +
    done
 +
    unset f
 
fi
 
fi
  
Line 52: Line 73:
 
# exec openbox-session
 
# exec openbox-session
 
# ...or the Window Manager of your choice
 
# ...or the Window Manager of your choice
exec xterm
+
 
 +
## some applications that should be run in the background
 +
xscreensaver '''&'''
 +
xsetroot -cursor_name left_ptr '''&'''
 +
'''exec''' openbox-session
 
}}
 
}}
  
{{注意|{{ic|~/.xinitrc}} 中应该只有 '''一个''' 未注释掉的 {{ic|exec}} 行,否则仅第一个会被执行。}}
+
{{ic|~/.xinitrc}} 中应该只有 '''一个''' 未注释掉的 {{ic|exec}} 行,而且 exec 行必须位于配置文件的末尾。exec 后面的所有命令只有窗口退出后才会被执行。在窗口管理器前启动的命令应该用 '''&''' 在后台启动, 否则启动程序会等待它们退出。使用 {{ic|exec}} 作为前缀会替换当前的进程,这样进程进入后台时 X 不会退出。
 +
 
 +
== 使用 ==
  
现在可以启动 X 了,作为普通用户,而不是 root 用户,执行:
+
现在以普通用户启动 X:
 
   $ startx
 
   $ startx
  
将会显示桌面,可以测试键盘及其布局,看看鼠标是否正常工作。
+
或者
  
===保持会话===
+
$ xinit -- :1
X 必须在登陆 tty 启动才能保持 logind (或 consolekit) 会话。{{ic|/etc/X11/xinit/xserverrc}}已经进行了处理。参阅[[General Troubleshooting#Session permissions]]。
+
  
{{注意|过去使用{{ic|ck-launch-session}}启动新会话而不是破坏原来的会话,{{ic|logind}}无法进行这样的处理,而且同时处理多个用户的显示管理器需要 X 在指定的会话上运行。}}
+
{{Note|''xinit'' 无法在其它 X server 启动时处理多个显示,要使用多显示,需要通过 {{ic|-- :''display_number''}} 指定,{{ic|''display_number''}} 是 1 或更高的数值。}}
  
== 文件示例 ==
+
选择的窗口管理器或桌面环境就应该正常启动了.
下面是一个简单的 {{ic|~/.xinitrc}} 文件示例,包含简单的启动程序:
+
{{hc
+
|~/.xinitrc
+
|<nowiki>
+
#!/bin/sh
+
  
if [ -d /etc/X11/xinit/xinitrc.d ]; then
+
要退出 X, 运行窗口管理器的退出功能,如果窗口管理器未提供此功能,可以运行:
  for f in /etc/X11/xinit/xinitrc.d/*; do
+
    [ -x "$f" ] && . "$f"
+
  done
+
  unset f
+
fi
+
  
xrdb -merge ~/.Xresources        # 更新 x 资源数据库
+
$ pkill -15 Xorg
  
xscreensaver -no-splash &        # 启动屏保
+
{{Note|''pkill'' 会杀死所有 X 实例,如果仅希望杀死当前虚拟终端的窗口管理器,运行:
xsetroot -cursor_name left_ptr &  # 设置光标图标
+
sh ~/.fehbg &                    # 设置背景图
+
  
exec openbox-session              # 启动窗口管理器
+
$ pkill -15 -t tty"$XDG_VTNR" Xorg
  
 +
{{ic|xprop}} 是软件包 {{Pkg|xorg-xprop}}提供的。
 +
}}
 +
 +
== 在启动的时候自动启用X ==
 +
 +
先确保 ''startx'' 已经配置好了。
 +
 +
{{注意|这种方式将在登陆 tty 启动 X,只有这样才能保持登录会话。}}
 +
 +
如果使用[[Bash]], 编辑 {{ic|~/.bash_profile}},加入如下内容. 如果文件不存在,从 {{ic|/etc/skel/.bash_profile}} 复制一个框架版本。
 +
 +
如果使用 [[zsh]],则编辑 {{ic|~/.zprofile}}.
 +
 +
{{bc|1=<nowiki>
 +
[ -z "$DISPLAY" -a "$(fgconsole)" -eq 1 ] && exec startx
 
</nowiki>}}
 
</nowiki>}}
  
推荐使用 {{ic|exec}} 作为前缀,以替换当前的进程,这样脚本退出时 X 不会退出。
+
{{注意|
 +
* 如果想在多个 VT 上使用图形登陆,可以将{{ic|-eq 1}}修改为{{ic|-le 3}} (vt1 到 vt3)
 +
* 如果希望在 X 会话终止时保持登入状态,删除 {{ic|exec}}.
 +
}}
  
此外 {{Pkg|xorg-xinit}} 还提供了另外一个示例:{{ic|/etc/skel/.xinitrc}}。复制到主目录就能使用。
+
* 此方法与[[automatic login to virtual console]]一起可以实现自动登陆。
$ cp /etc/skel/.xinitrc ~/
+
* 如果 X 被关闭,用户将自动退出。要避免这个问题,删除 {{ic|exec}}
 +
* 要将 X 会话的输出重定向到一个文件,请创建一个别名[[alias]]:
 +
: {{bc|1=alias startx='startx &> ~/.xlog'}}
  
== 文件配置 ==
+
参阅 [[Fish#Start X at login]] 和 [[Systemd/User#Automatic login into Xorg without display manager]].
  
如果未使用窗口管理器,请记得 X 会话的生命周期与 {{ic|~/.xinitrc}} 同步。只要脚本退出, X 就会关闭。所有窗口管理器的退出和 X 的退出应该同步。可以通过在脚本最后运行窗口管理器实现。
+
=== 自动登录到虚拟终端 ===
  
在上面例子中,{{ic|cairo-compmgr}}、{{ic|xscreensaver}}、{{ic|xsetroot}} 和 {{ic|sh}} 都是后台运行({{ic|&}}后缀)。否则,脚本会等待每个进程结束才会执行 {{ic|openbox-session}}。同时,{{ic|openbox-session}} 不是后台运行,这样保证 openbox 不退出,脚本就不退出。
+
可以和 [[automatic login to virtual console|自动登录到虚拟终端]]一起使用.
  
下面介绍如何配置多桌面环境的 {{ic|~/.xinitrc}} 。
+
==  提示和技巧 ==
  
=== 命令行方式 ===
+
=== 从命令行覆盖 xinitrc ===
如果你有一个可用的 {{ic|~/.xinitrc}} 文件,只想尝试下其他的窗口管理器/桌面环境,你可从命令行给 {{ic|xinit}} 完整路径
+
  
  xinit /full/path/to/window-manager
+
如果你有一个可用的 {{ic|~/.xinitrc}}, 件,只想尝试下其他的窗口管理器/桌面环境,你可从命令行给 {{ic|startx}} 完整路径
 +
$ startx /full/path/to/window-manager
  
'''必须'''使用完整路径。此外你可以选择在{{ic|--}}后面传递 X 服务器参数,例如
+
Note that the full path is '''required'''. Optionally, you can also specify custom options for [[#xserverrc]] script by appending them after {{ic|--}}, e.g.:
  
xinit /usr/bin/enlightenment -- -br +bs -dpi 96
+
  $ startx /usr/bin/enlightenment -- -br +bs -dpi 96
  
下面{{ic|~/.xinitrc}} 例子可以用参数启动给定窗口管理器:
+
参阅  {{ic|man startx}}.
  
{{hc
+
=== Making a DE/WM choice ===
|~/.xinitrc
+
|<nowiki>
+
#!/bin/sh
+
#
+
# ~/.xinitrc
+
#
+
# Executed by startx (run your window manager from here)
+
  
if [ -d /etc/X11/xinit/xinitrc.d ]; then
+
If you are frequently switching between different DEs/WMs, it is recommended to either use a [[Display manager]] or add code to {{ic|.xinitrc}}. The code described next consists of a simple few lines, which will take the argument and load the desired desktop environment or window manager.
  for f in /etc/X11/xinit/xinitrc.d/*; do
+
    [ -x "$f" ] && . "$f"
+
  done
+
  unset f
+
fi
+
  
if [[ $1 == "fluxbox" ]]
+
The following example {{ic|~/.xinitrc}} shows how to start a particular DE/WM with an argument:
then
+
 
  exec startfluxbox
+
{{hc|~/.xinitrc|<nowiki>
elif [[ $1 == "spectrwm" ]]
+
...
then
+
 
  exec spectrwm
+
# Here Xfce is kept as default
else
+
session=${1:-xfce}
  echo "Choose a window manager"
+
 
fi
+
case $session in
 +
    awesome          ) exec awesome;;
 +
    bspwm            ) exec bspwm;;
 +
    catwm            ) exec catwm;;
 +
    cinnamon          ) exec cinnamon-session;;
 +
    dwm              ) exec dwm;;
 +
    enlightenment    ) exec enlightenment_start;;
 +
    ede              ) exec startede;;
 +
    fluxbox          ) exec startfluxbox;;
 +
    gnome            ) exec gnome-session;;
 +
    gnome-classic    ) exec gnome-session --session=gnome-classic;;
 +
    i3|i3wm          ) exec i3;;
 +
    icewm            ) exec icewm-session;;
 +
    jwm              ) exec jwm;;
 +
    kde              ) exec startkde;;
 +
    mate              ) exec mate-session;;
 +
    monster|monsterwm ) exec monsterwm;;
 +
    notion            ) exec notion;;
 +
    openbox          ) exec openbox-session;;
 +
    unity            ) exec unity;;
 +
    xfce|xfce4        ) exec startxfce4;;
 +
    xmonad            ) exec xmonad;;
 +
    # No known session, try to run it as command
 +
    *) exec $1;;
 +
esac
 
</nowiki>}}
 
</nowiki>}}
  
用这个例子可以通过命令 {{ic|xinit fluxbox}} {{ic|xinit spectrwm}} 启动 fluxbox 或 spectrwm。
+
After that, you can easily start a particular DE/WM by passing an argument, e.g.:
 +
 
 +
$ xinit
 +
$ xinit gnome
 +
$ xinit kde
 +
$ xinit wmaker
 +
 
 +
or
 +
 
 +
$ startx
 +
$ startx ~/.xinitrc gnome
 +
$ startx ~/.xinitrc kde
 +
$ startx ~/.xinitrc wmaker
 +
 
 +
=== 不启动窗口管理器,直接启动程序 ===
 +
 
 +
It is possible to start only specific applications without a window manager, although most likely this is only useful with a single application shown in full-screen mode. For example:
 +
 
 +
{{hc|~/.xinitrc|
 +
...
 +
 
 +
exec chromium
 +
}}
 +
 
 +
With this method you need to set each application window's geometry through its own configuration files, if possible at all.
 +
 
 +
{{Tip|This method can be useful to launch graphical games, especially on systems where excluding the memory or CPU usage of a window manager or desktop environment, and possible accessory applications, can help improve the game's execution performance.}}
  
=== 随系统启动方式 ===
+
See also [[Display manager#Starting applications without a window manager]].
参阅 [[Start X at Login]].
+

Latest revision as of 04:59, 4 August 2016

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

~/.xinitrc 文件是 xinit 和它的前端 startx 第一次启动时会读取的脚本。通常用在启动 X 时执行窗口管理器 和其他程序,例如启动守护进程和设置环境变量。xinit程序用来启动X窗口系统,是不使用显示管理器时的第一个客户端。

~/.xinitrc 一个主要功能是根据单个用户的设置决定 /usr/bin/startx/usr/bin/xinit 程序启动的窗口系统。~/.xinitrc 中还可以加入许多系统定制选项。大部分显示管理器也会在 xinit 前读取相似的 xprofile 文件。

安装

安装 软件包 xorg-xinit. 此软件包提供了 xinitstartx和默认的 xinitrc 文件。

配置

xserverrc

xserverrc 文件是一个启动 X server 的 shell 脚本。如果存在 ~/.xserverrcstartxxinit 都会执行这个文件。如果文件不存在,startx 会使用 /etc/X11/xinit/xserverrc.

为了维护 logindauthenticated session|会话认证,避免切换终端时跳过屏幕锁, 必须找用户登录的虚拟终端启动 Xorg[1] 所以建议在 ~/.xserverrc 中指定 vt$XDG_VTNR:

~/.xserverrc
	
#!/bin/sh
exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR

如果要让 X 在其他的终端启动,可以使用 /usr/lib/systemd/systemd-multi-seat-x 提供的 X server 包裹程序。修改 ~/.xserverrc,可以让 xinitstartx 都使用这个包裹程序.

xinitrc

如果用户主目录中存在 .xinitrcstartxxinit 会执行此文件。如果不存在,startx 会执行默认的 /etc/X11/xinit/xinitrc。这个文件默认启动 TwmXterm. xinit 的默认行为不一样,请参阅 man 1 xinit。要设置窗口管理器或桌面环境,先通过复制创建默认文件:

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

根据示例文件修改可以保留一些默认行为,例如会引用 /etc/X11/xinit/xinitrc.d 中以 .sh 结尾的脚本。

然后编辑 ~/.xinitrc ,例如要使用 Openbox,修改为:

#!/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/?*.sh ; 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

## some applications that should be run in the background
xscreensaver &
xsetroot -cursor_name left_ptr &
exec openbox-session

~/.xinitrc 中应该只有 一个 未注释掉的 exec 行,而且 exec 行必须位于配置文件的末尾。exec 后面的所有命令只有窗口退出后才会被执行。在窗口管理器前启动的命令应该用 & 在后台启动, 否则启动程序会等待它们退出。使用 exec 作为前缀会替换当前的进程,这样进程进入后台时 X 不会退出。

使用

现在以普通用户启动 X:

 $ startx

或者

$ xinit -- :1
Note: xinit 无法在其它 X server 启动时处理多个显示,要使用多显示,需要通过 -- :display_number 指定,display_number 是 1 或更高的数值。

选择的窗口管理器或桌面环境就应该正常启动了.

要退出 X, 运行窗口管理器的退出功能,如果窗口管理器未提供此功能,可以运行:

$ pkill -15 Xorg
Note: pkill 会杀死所有 X 实例,如果仅希望杀死当前虚拟终端的窗口管理器,运行:
$ pkill -15 -t tty"$XDG_VTNR" Xorg

xprop 是软件包 xorg-xprop提供的。

在启动的时候自动启用X

先确保 startx 已经配置好了。

注意: 这种方式将在登陆 tty 启动 X,只有这样才能保持登录会话。

如果使用Bash, 编辑 ~/.bash_profile,加入如下内容. 如果文件不存在,从 /etc/skel/.bash_profile 复制一个框架版本。

如果使用 zsh,则编辑 ~/.zprofile.

[ -z "$DISPLAY" -a "$(fgconsole)" -eq 1 ] && exec startx
注意:
  • 如果想在多个 VT 上使用图形登陆,可以将-eq 1修改为-le 3 (vt1 到 vt3)
  • 如果希望在 X 会话终止时保持登入状态,删除 exec.
  • 此方法与automatic login to virtual console一起可以实现自动登陆。
  • 如果 X 被关闭,用户将自动退出。要避免这个问题,删除 exec
  • 要将 X 会话的输出重定向到一个文件,请创建一个别名alias:
alias startx='startx &> ~/.xlog'

参阅 Fish#Start X at loginSystemd/User#Automatic login into Xorg without display manager.

自动登录到虚拟终端

可以和 自动登录到虚拟终端一起使用.

提示和技巧

从命令行覆盖 xinitrc

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

$ startx /full/path/to/window-manager

Note that the full path is required. Optionally, you can also specify custom options for #xserverrc script by appending them after --, e.g.:

 $ startx /usr/bin/enlightenment -- -br +bs -dpi 96

参阅 man startx.

Making a DE/WM choice

If you are frequently switching between different DEs/WMs, it is recommended to either use a Display manager or add code to .xinitrc. The code described next consists of a simple few lines, which will take the argument and load the desired desktop environment or window manager.

The following example ~/.xinitrc shows how to start a particular DE/WM with an argument:

~/.xinitrc
...

# Here Xfce is kept as default
session=${1:-xfce}

case $session in
    awesome           ) exec awesome;;
    bspwm             ) exec bspwm;;
    catwm             ) exec catwm;;
    cinnamon          ) exec cinnamon-session;;
    dwm               ) exec dwm;;
    enlightenment     ) exec enlightenment_start;;
    ede               ) exec startede;;
    fluxbox           ) exec startfluxbox;;
    gnome             ) exec gnome-session;;
    gnome-classic     ) exec gnome-session --session=gnome-classic;;
    i3|i3wm           ) exec i3;;
    icewm             ) exec icewm-session;;
    jwm               ) exec jwm;;
    kde               ) exec startkde;;
    mate              ) exec mate-session;;
    monster|monsterwm ) exec monsterwm;;
    notion            ) exec notion;;
    openbox           ) exec openbox-session;;
    unity             ) exec unity;;
    xfce|xfce4        ) exec startxfce4;;
    xmonad            ) exec xmonad;;
    # No known session, try to run it as command
    *) exec $1;;
esac

After that, you can easily start a particular DE/WM by passing an argument, e.g.:

$ xinit
$ xinit gnome
$ xinit kde
$ xinit wmaker

or

$ startx
$ startx ~/.xinitrc gnome
$ startx ~/.xinitrc kde
$ startx ~/.xinitrc wmaker

不启动窗口管理器,直接启动程序

It is possible to start only specific applications without a window manager, although most likely this is only useful with a single application shown in full-screen mode. For example:

~/.xinitrc
...

exec chromium

With this method you need to set each application window's geometry through its own configuration files, if possible at all.

Tip: This method can be useful to launch graphical games, especially on systems where excluding the memory or CPU usage of a window manager or desktop environment, and possible accessory applications, can help improve the game's execution performance.

See also Display manager#Starting applications without a window manager.