Xorg

xinitrc 的奧秘——什麼可以存在,什麼不可以存在

  • March 5, 2019

拜託,

有人可以為我提供一些資料.xinitrc嗎?我很難找到一本好的手冊來回答我的幾個實際問題:

  • 它宣稱自己是通用 Bash 腳本,但實際上並非如此。
  • 為什麼有些命令需要exec而有些不需要?
  • 這個exec命令到底是什麼?
  • 它是特定於 的二進制結構還是語法結構xinitrc
  • 什麼可以由 exec 執行,什麼不能?
  • 如何正確設置環境變數?

主流發行版的大多數使用者甚至不必知道xinitrc,對我來說也是如此,直到我不得不設置 Kodi“臨時”外殼;使用超級簡約的視窗管理器 TWM 並全屏啟動 Kodi,因為kodi-standaloneshell 不適合我。

但回到xinitrc

工作範例:

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

為什麼不需要twm但不需要? sleep``exec``xterm

不工作的例子:

#!/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; 然後它終於奏效了。

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

引用自:https://unix.stackexchange.com/questions/504188