xinitrc 之谜——什么可以存在,什么不可以存在

xinitrc 之谜——什么可以存在,什么不可以存在

拜托,
有人可以为我的档案提供一些线索吗.xinitrc?我很难找到一本好的手册来回答我的几个实际问题:

  • 它声称自己是通用 Bash 脚本,但实际上并非如此。
  • 为什么有些命令需要exec而有些则不需要?
  • 这个命令到底是什么exec
  • 它是特定于 的二进制结构还是语法结构xinitrc
  • 什么可以由 exec 运行,什么不可以?
  • 如何正确设置环境变量?

大多数主流发行版的用户甚至不必了解xinitrc,对我来说也是如此,直到我不得不设置 Kodi“临时”shell;使用超级简约的窗口管理器 TWM 并全屏启动 Kodi,因为kodi-standaloneshell 不适合我。

但回到xinitrc

工作示例:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec xterm

为什么twm不需要但sleep需要? execxterm

不工作示例:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

这里exec只执行WINDOWING=x11但忽略了该行的其余部分。我只是通过包装到另一个 Bash 脚本中才使其工作WINDOWING=x11 /usr/bin/kodi -geometry +0+0,这次是一个普通的脚本,并将该脚本作为exec;的唯一参数。然后它终于起作用了。

答案1

exec命令将当前 shell 进程替换为执行给定命令所产生的进程。如果没有exec,一旦命令终止,控制权将交回等待的 shell 会话。使用 时exec,当前的 shell 会被替换,因此从那时起,您的脚本将不再运行任何命令。

~/.xinitrc文件是一个 shell 脚本。它会启动窗口管理器(twm在您的情况下),以及您可能希望首先启动的其他 X11 客户端(例如xterm或其他一些终端,并且xeyes,显然)。除了它应该是一个有效的脚本(因为它是由 shell 脚本解释器运行)之外,该脚本没有特殊的语法。

在第一个示例中,您使用

exec xterm

这会将当前的 shell 进程替换为xterm.没有的话exec,你会得到完全相同的可见的效果,但.xinitrc脚本会在后台等待xterm终止,然后再终止(因为这是文件中的最后一个命令)。

请注意,如果您完成了exec twm,shell 会将其自身替换为 ,twm这意味着它将无法运行脚本中的其他命令。这就是为什么您改为twm以后台进程启动(&最后)的原因。睡眠是为了twm在启动终端之前正确启动。我认为这并不是绝对必要的。事实上,如果您不需要窗口装饰或能够移动窗口或调整窗口大小,则甚至不需要运行twm或任何其他窗口管理器(至少不需要运行全屏xterm)。

在你的第二个例子中,你使用

exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

现在,该exec命令不能用于设置这样的环境变量。相反,您可以设置并导出WINDOWING变量调用kodi

export WINDOWING=x11
exec /usr/bin/kodi -geometry +0+0

相关内容