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

From ArchWiki
Jump to navigation Jump to search
(update translation.)
(Update translation.)
 
(37 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 +
{{Lowercase title}}
 
[[Category:Desktop environments (简体中文)]]
 
[[Category:Desktop environments (简体中文)]]
[[Category:X Server (简体中文)]]
+
[[Category:Xorg commands (简体中文)]]
{{Lowercase title}}
+
[[de:Xinitrc]]
 
[[el:Xinitrc]]
 
[[el:Xinitrc]]
[[en:Xinitrc]]
+
[[en:Xinit]]
[[es:Xinitrc]]
+
[[es:Xinit]]
 
[[fr:Startx]]
 
[[fr:Startx]]
 
[[it:Xinitrc]]
 
[[it:Xinitrc]]
{{Article summary start|摘要}}
+
[[ja:Xinitrc]]
{{Article summary text|xinit(startx)程序的主配置文件概览。 program.}}
+
[[pt:Xinit]]
{{Article summary heading|相关}}
+
[[ru:Xinitrc]]
{{Article summary wiki|Display Manager (简体中文)}}
+
{{Related articles start (简体中文)}}
{{Article summary wiki|Start X at boot (简体中文)}}
+
{{Related|Display manager (简体中文)}}
{{Article summary wiki|Xorg (简体中文)}}
+
{{Related|Start X at Login (简体中文)}}
{{Article summary wiki|xprofile}}
+
{{Related|Xorg_(简体中文)}}
{{Article summary end}} {{Lowercase title}}
+
{{Related|Xprofile_(简体中文)}}
{{TranslationStatus (简体中文)|Xinitrc|2012-10-24|231090}}
+
{{Related|Xresources}}
{{ic|~/.xinitrc}} 文件是 {{ic|xinit}} 和 {{ic|startx}} 第一次启动时会读取的脚本。通常用在启动 X 时执行[[window manager (简体中文)|窗口管理器]] 和其他程序,例如启动守护进程和设置环境变量。{{ic|xinit}}程序用来启动[[Xorg|X窗口系统]],是不能直接从{{ic|/etc/init}}启动 X 或者使用多窗口的系统中的第一个客户端。
+
{{Related articles end}}
 +
{{TranslationStatus (简体中文)|xinit|2019-03-14|560963}}
 +
摘自 [[Wikipedia:xinit|Wikipedia]]:
 +
:用户可以通过 '''xinit''' 程序手动启动 [[Xorg]] 显示服务器,{{man|1|startx}} 脚本是 {{man|1|xinit}} 的前端。
 +
 
 +
''xinit'' 通常用在启动 X 时执行[[window manager (简体中文)|窗口管理器]] 或 [[desktop environment|桌面环境]]。虽然可以使用 ''xinit'' 在无窗口管理器的情况下启动图形程序,大部分图形程序都需要一个兼容 [[Wikipedia:Extended Window Manager Hints|EWMH]] 的窗口管理器。[[Display manager|显示管理器]] 启动 [[Xorg]] 并读取 [[xprofile]]。
 +
 
 +
== 安装 ==
  
{{ic|~/.xinitrc}} 一个主要功能是根据单个用户的设置决定 {{ic|/usr/bin/startx}} 或 {{ic|/usr/bin/xinit}} 程序启动的窗口系统。{{ic|~/.xinitrc}} 中还可以加入许多系统定制选项。
+
[[Install|安装]] 软件包 {{Pkg|xorg-xinit}}
  
==开始==
+
== 配置 ==
  
{{ic|/etc/skel/}} 为新创建用户提供了合理的默认配置文件和目录(''skel'' ''skeleton'' 的简写,包含了用户主目录的基本结构)。 {{pkg|xorg-xinit}} 软件包会在 {{ic|/etc/skel}} 中加入 {{ic|.xinitrc}} 文件。
+
''xinit'' ''startx'' 可以带一个可选的客户端程序参数,如果未提供这个参数,它们会从 {{ic|~/.xinitrc}} 确认要启动的客户端。所以 {{ic|xinit /usr/bin/foo}} 等价于在 {{ic|~/.xinitrc}} 中设置 {{ic|exec foo}} 并执行 {{ic|xinit}}。
  
{{注意|{{ic|~/.xinitrc}} 是所谓的 '点' (.) 文件。*nix 系统中以点 (.) 开头的文件是隐藏文件,不会在普通 {{ic|ls}} 命令中显示。点文件可以通过 {{ic|ls -a}} 显示。'rc' 指 ''Run Commands'',意味着它是一个配置文件。因为它控制了一个程序的运行,所以也可以认为是 "Run Control"。}}
+
=== xinitrc ===
  
将示例 {{ic|/etc/skel/.xinitrc}} 文件复制到主目录:
+
{{ic|~/.xinitrc}} 可以方便的启动依赖 X 的程序,并在 X 启动时设置环境变量。如果用户主目录中存在 {{ic|.xinitrc}},''startx'' 和 ''xinit'' 会执行此文件。如果不存在,''startx'' 会执行默认的 {{ic|/etc/X11/xinit/xinitrc}}。这个文件默认启动 [[Twm]] 和  [[Xterm]]. ''xinit'' 的默认行为不一样,请参阅 {{man|1|xinit}}。要设置窗口管理器或桌面环境,先通过复制创建默认文件:
$ cp /etc/skel/.xinitrc ~/
 
  
然后编辑 {{ic|~/.xinitrc}} ,取消对应 [[Desktop_Environment (简体中文)|桌面]] 前的注释。例如要使用 [[Xterm]],修改为:
+
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
 +
 
 +
根据示例文件修改可以保留一些默认行为,例如会引用 {{ic|/etc/X11/xinit/xinitrc.d}} 中以 {{ic|.sh}} 结尾的脚本。
 +
 
 +
然后编辑 {{ic|~/.xinitrc}} ,例如要使用 [[Openbox]],修改为:
 
{{bc|
 
{{bc|
 +
...
 +
xscreensaver '''&'''
 +
xsetroot -cursor_name left_ptr '''&'''
 +
'''exec''' openbox-session
 +
}}
 +
 +
{{ic|~/.xinitrc}} 中应该只有 '''一个''' 未注释掉的 {{ic|exec}} 行,而且 exec 行必须位于配置文件的末尾。exec 后面的所有命令只有窗口退出后才会被执行。在窗口管理器前启动的命令,例如屏保和壁纸程序,必须自行 fork 后台进程或用{{ic|&}}在后台启动, 否则启动程序会等待它们退出才会启动窗口管理器或桌面环境。使用 {{ic|exec}} 作为前缀会替换当前的进程,这样进程进入后台时 X 不会退出。
 +
 +
某些程序,比如 [[xrdb]],不应该被 fork. 使用 {{ic|exec}} 前缀时,程序将会用窗口管理器进程替换脚本进程,所以即使进程进入后台 X 也不会退出。
 +
 +
=== xserverrc ===
 +
 +
{{ic|xserverrc}} 文件是一个启动 X server 的 shell 脚本。如果存在 {{ic|~/.xserverrc}} ,''startx'' 和 ''xinit'' 都会执行这个文件。如果文件不存在,''startx'' 会使用 {{ic|/etc/X11/xinit/xserverrc}}.
 +
 +
为了维护  {{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
 
#!/bin/sh
#
+
exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
# ~/.xinitrc
+
}}
#
+
 
# Executed by startx (run your window manager from here)
+
如果要让 X 在其他的终端启动,可以使用 {{ic|/usr/lib/systemd/systemd-multi-seat-x}} 提供的 X server 包裹程序。修改 {{ic|~/.xserverrc}},可以让 ''xinit'' 和''startx'' 都使用这个包裹程序.
if [ -d /etc/X11/xinit/xinitrc.d ]; then
+
 
   for f in /etc/X11/xinit/xinitrc.d/*; do
+
== 使用 ==
    [ -x "$f" ] && . "$f"
+
 
  done
+
现在以普通用户启动 X:
  unset f
+
   $ startx
fi
+
 
 +
或者
 +
 
 +
$ xinit -- :1
 +
 
 +
{{Note|''xinit'' 无法在其它 X server 启动时处理多个显示,要使用多显示,需要通过 {{ic|-- :''display_number''}} 指定,{{ic|''display_number''}} 是 1 或更高的数值。}}
 +
 
 +
选择的窗口管理器或桌面环境就应该正常启动了.
 +
 
 +
要退出 X, 运行窗口管理器的退出功能,如果窗口管理器未提供此功能,可以运行:
 +
 
 +
$ pkill -15 Xorg
  
# exec gnome-session
+
{{Note|''pkill'' 会杀死所有 X 实例,如果仅希望杀死当前虚拟终端的窗口管理器,运行:
# exec startkde
+
$ pkill -15 -t tty"$XDG_VTNR" Xorg
# exec startxfce4
 
# exec wmaker
 
# exec icewm
 
# exec blackbox
 
# exec fluxbox
 
# exec openbox-session
 
# ...or the Window Manager of your choice
 
exec xterm
 
 
}}
 
}}
  
{{注意|{{ic|~/.xinitrc}} 中应该只有 '''一个''' 未注释掉的 {{ic|exec}} 行,否则仅第一个会被执行。}}
+
==  提示和技巧 ==
 +
 
 +
=== 从命令行覆盖 xinitrc ===
  
现在可以启动 X 了,作为普通用户,而不是 root 用户,执行:
+
如果你有一个可用的  {{ic|~/.xinitrc}}, 件,只想尝试下其他的窗口管理器/桌面环境,你可从命令行给 {{ic|startx}} 完整路径
  $ startx -- vt$XDG_VTNR
+
$ startx /full/path/to/window-manager
  
{{Note|You need to make sure X will always start on the same tty where you logged in, to preserve your logind (or consolekit) session. This can be done either by include {{ic|exec /usr/bin/X -nolisten tcp vt$XDG_VTNR "$@"}} in {{ic|~/.xserverrc}} or using {{ic|startx -- vt$XDG_VTNR}}.}}
+
必须使用完整 '''required'''. 还有一个选项是为 [[#xserverrc]] 提供额外参数,加在 {{ic|--}} 后面,例如:
  
将会显示桌面,可以测试键盘及其布局,看看鼠标是否正常工作。
+
  $ startx /usr/bin/enlightenment -- -br +bs -dpi 96
  
== 文件示例 ==
+
参阅  {{man|1|startx}}.
下面是一个简单的 {{ic|~/.xinitrc}} 文件示例,包含简单的启动程序:
+
 
{{hc
+
=== 在启动时自动启用 X ===
|~/.xinitrc
+
 
|<nowiki>
+
先确保 ''startx'' 已经配置好了。
#!/bin/sh
+
 
 +
{{注意|这种方式将在登陆 tty 启动 X,只有这样才能保持登录会话。}}
 +
 
 +
如果使用[[Bash]], 编辑 {{ic|~/.bash_profile}},加入如下内容. 如果文件不存在,从 {{ic|/etc/skel/.bash_profile}} 复制一个框架版本。
 +
 
 +
如果使用 [[zsh]],则编辑 {{ic|~/.zprofile}}.
  
if [ -d /etc/X11/xinit/xinitrc.d ]; then
+
{{bc|1=<nowiki>
  for f in /etc/X11/xinit/xinitrc.d/*; do
+
if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
    [ -x "$f" ] && . "$f"
+
   exec startx
  done
 
   unset f
 
 
fi
 
fi
 +
</nowiki>}}
  
xrdb -merge ~/.Xresources        # 更新 x 资源数据库
+
{{注意|
 +
* 如果想在多个 VT 上使用图形登陆,可以将{{ic|-eq 1}}修改为{{ic|-le 3}} (vt1 到 vt3)
 +
* 如果希望在 X 会话终止时保持登入状态,删除 {{ic|exec}}.
 +
}}
  
xscreensaver -no-splash &        # 启动屏保
+
* 此方法与[[automatic login to virtual console]]一起可以实现自动登陆。
xsetroot -cursor_name left_ptr & # 设置光标图标
+
* 如果 X 被关闭,用户将自动退出。要避免这个问题,删除 {{ic|exec}}。
sh ~/.fehbg &                    # 设置背景图
+
* 要将 X 会话的输出重定向到一个文件,请创建一个别名[[alias]]:
 +
: {{bc|1=alias startx='startx &> ~/.xlog'}}
  
exec openbox-session              # 启动窗口管理器
+
参阅 [[Fish#Start X at login]] 和 [[Systemd/User#Automatic login into Xorg without display manager]].
  
</nowiki>}}
+
可以和 [[automatic login to virtual console|自动登录到虚拟终端]]一起使用.
 +
 
 +
=== Switching between desktop environments/window managers ===
 +
 
 +
If you are frequently switching between different desktop environments or window managers, it is convenient to either use a [[display manager]] or expand {{ic|.xinitrc}} to make the switching possible.
  
推荐使用 {{ic|exec}} 作为前缀,以替换当前的进程,这样脚本退出时 X 不会退出。
+
The following example {{ic|~/.xinitrc}} shows how to start a particular desktop environment or window manager with an argument:
  
此外 {{Pkg|xorg-xinit}} 还提供了另外一个示例:{{ic|/etc/skel/.xinitrc}}。复制到主目录就能使用。
+
{{hc|~/.xinitrc|<nowiki>
$ cp /etc/skel/.xinitrc ~/
+
...
  
== 文件配置 ==
+
# Here Xfce is kept as default
 +
session=${1:-xfce}
  
如果未使用窗口管理器,请记得 X 会话的生命周期与 {{ic|~/.xinitrc}} 同步。只要脚本退出, X 就会关闭。所有窗口管理器的退出和 X 的退出应该同步。可以通过在脚本最后运行窗口管理器实现。
+
case $session in
 +
    i3|i3wm          ) exec i3;;
 +
    kde              ) exec startkde;;
 +
    xfce|xfce4        ) exec startxfce4;;
 +
    # No known session, try to run it as command
 +
    *                ) exec $1;;
 +
esac
 +
</nowiki>}}
  
在上面例子中,{{ic|cairo-compmgr}}、{{ic|xscreensaver}}、{{ic|xsetroot}} 和 {{ic|sh}} 都是后台运行({{ic|&}}后缀)。否则,脚本会等待每个进程结束才会执行 {{ic|openbox-session}}。同时,{{ic|openbox-session}} 不是后台运行,这样保证 openbox 不退出,脚本就不退出。
+
To pass the argument ''session'':
  
下面介绍如何配置多桌面环境的 {{ic|~/.xinitrc}} 。
+
$ xinit ''session''
  
=== 命令行方式 ===
+
or
如果你有一个可用的 {{ic|~/.xinitrc}} 文件,只想尝试下其他的窗口管理器/桌面环境,你可从命令行给 {{ic|xinit}} 完整路径
 
  
  xinit /full/path/to/window-manager
+
  $ startx ~/.xinitrc ''session''
  
'''必须'''使用完整路径。此外你可以选择在{{ic|--}}后面传递 X 服务器参数,例如
+
=== 不启动窗口管理器,直接启动程序 ===
  
xinit /usr/bin/enlightenment -- -br +bs -dpi 96
+
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:
  
下面{{ic|~/.xinitrc}} 例子可以用参数启动给定窗口管理器:
+
{{hc|~/.xinitrc|
 +
...
  
{{hc
+
exec chromium
|~/.xinitrc
+
}}
|<nowiki>
 
#!/bin/sh
 
#
 
# ~/.xinitrc
 
#
 
# Executed by startx (run your window manager from here)
 
  
if [ -d /etc/X11/xinit/xinitrc.d ]; then
+
With this method you need to set each application window's geometry through its own configuration files, if possible at all.
  for f in /etc/X11/xinit/xinitrc.d/*; do
 
    [ -x "$f" ] && . "$f"
 
  done
 
  unset f
 
fi
 
  
if [[ $1 == "fluxbox" ]]
+
{{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.}}
then
 
  exec startfluxbox
 
elif [[ $1 == "spectrwm" ]]
 
then
 
  exec spectrwm
 
else
 
  echo "Choose a window manager"
 
fi
 
</nowiki>}}
 
  
用这个例子可以通过命令 {{ic|xinit fluxbox}} 或 {{ic|xinit spectrwm}} 启动 fluxbox 或 spectrwm。
+
See also [[Display manager#Starting applications without a window manager]].
  
=== 随系统启动方式 ===
+
=== Output redirection using startx ===
参阅 [[Start X at Login]].
 
  
==使用技巧==
+
See [[Xorg#Broken redirection]] for details.
=== PolicyKit ===
 
许多桌面环境需要 [[PolicyKit]],否则会报错。常见问题是无法从桌面系统关机或重启,无 root 权限无法挂载 USB 设备、光驱等。大部分现代显示管理器会自动启动 PolicyKit。只是用 {{ic|~/.xinitrc}} 时,需要在登录的 TTY 启动 X:
 
 
{{注意|需要安装 {{pkg|polkit}}}}
 

Latest revision as of 08:25, 14 March 2019

翻译状态: 本文是英文页面 xinit翻译,最后翻译时间:2019-03-14,点击这里可以查看翻译后英文页面的改动。

摘自 Wikipedia:

用户可以通过 xinit 程序手动启动 Xorg 显示服务器,startx(1) 脚本是 xinit(1) 的前端。

xinit 通常用在启动 X 时执行窗口管理器桌面环境。虽然可以使用 xinit 在无窗口管理器的情况下启动图形程序,大部分图形程序都需要一个兼容 EWMH 的窗口管理器。显示管理器 启动 Xorg 并读取 xprofile

安装

安装 软件包 xorg-xinit

配置

xinitstartx 可以带一个可选的客户端程序参数,如果未提供这个参数,它们会从 ~/.xinitrc 确认要启动的客户端。所以 xinit /usr/bin/foo 等价于在 ~/.xinitrc 中设置 exec foo 并执行 xinit

xinitrc

~/.xinitrc 可以方便的启动依赖 X 的程序,并在 X 启动时设置环境变量。如果用户主目录中存在 .xinitrcstartxxinit 会执行此文件。如果不存在,startx 会执行默认的 /etc/X11/xinit/xinitrc。这个文件默认启动 TwmXterm. xinit 的默认行为不一样,请参阅 xinit(1)。要设置窗口管理器或桌面环境,先通过复制创建默认文件:

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

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

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

...
xscreensaver &
xsetroot -cursor_name left_ptr &
exec openbox-session

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

某些程序,比如 xrdb,不应该被 fork. 使用 exec 前缀时,程序将会用窗口管理器进程替换脚本进程,所以即使进程进入后台 X 也不会退出。

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 都使用这个包裹程序.

使用

现在以普通用户启动 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

提示和技巧

从命令行覆盖 xinitrc

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

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

必须使用完整 required. 还有一个选项是为 #xserverrc 提供额外参数,加在 -- 后面,例如:

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

参阅 startx(1).

在启动时自动启用 X

先确保 startx 已经配置好了。

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

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

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

if [[ ! $DISPLAY && $XDG_VTNR -eq 1 ]]; then
  exec startx
fi
注意:
  • 如果想在多个 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.

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

Switching between desktop environments/window managers

If you are frequently switching between different desktop environments or window managers, it is convenient to either use a display manager or expand .xinitrc to make the switching possible.

The following example ~/.xinitrc shows how to start a particular desktop environment or window manager with an argument:

~/.xinitrc
...

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

case $session in
    i3|i3wm           ) exec i3;;
    kde               ) exec startkde;;
    xfce|xfce4        ) exec startxfce4;;
    # No known session, try to run it as command
    *                 ) exec $1;;
esac

To pass the argument session:

$ xinit session

or

$ startx ~/.xinitrc session

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

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.

Output redirection using startx

See Xorg#Broken redirection for details.