xinit
摘自 Wikipedia:
xinit 通常用於啟動窗口管理器或桌面環境。雖然您也可以用 xinit 在沒有窗口管理器的情況下運行 GUI 應用程序,但許多圖形應用程序期待一個 EWMH 兼容的窗口管理器。顯示管理器一般都依據 xprofile 為您啟動 Xorg。
安裝[編輯 | 編輯原始碼]
安裝 xorg-xinit包 包。
配置[編輯 | 編輯原始碼]
xinit 和 startx 需要一個可選的客戶端程序參數,見 #覆蓋 xinitrc 。 如果您沒有提供參數,它們會尋找 ~/.xinitrc
,作為一個shell腳本運行,以啟動客戶程序。
xinitrc[編輯 | 編輯原始碼]
~/.xinitrc
可以方便地在X服務器啟動時運行依賴於X的程序並設置環境變量。如果它存在於用戶的主目錄中,startx 和 xinit 會執行它。否則 startx 將運行默認的/etc/X11/xinit/xinitrc
。
這個默認的xinitrc將啟動一個包含 Twm、xorg-xclock包 和 Xterm 的基本環境(假設安裝了必要的軟件包)。因此,要啟動不同的窗口管理器或桌面環境,首先要在主目錄下創建一個默認的 xinitrc
副本。
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
然後編輯該文件,用想要的命令替換默認程序。記住,使用 exec
的命令後面的行將被忽略。例如,要在後台啟動 xscreensaver
,然後啟動 openbox,請使用以下命令。
~/.xinitrc
}. ... xscreensaver & exec openbox-session
/etc/X11/xinit/xinitrc
中的最後一個 if
塊出現在您的 ~/.xinitrc
文件中,以確保 /etc/X11/xinit/xinitrc.d
中的腳本有源可循。在窗口管理器之前啟動的長期運行的程序,如屏保和牆紙程序,必須自己分叉或通過附加 &
符號在後台運行。否則,在執行窗口管理器或桌面環境之前,腳本會停止運行並等待每個程序退出。請注意,有些程序反而不應該被分叉,以避免出現競爭性錯誤,如 xrdb 的情況。在 exec
前綴會將腳本進程替換為窗口管理器進程,這樣,即使該進程分叉到後台,X也不會退出。
xserverrc[編輯 | 編輯原始碼]
xserverrc
文件是一個負責啟動X服務器的shell腳本。startx "和 "xinit "都會執行 ~/.xserverrc
,如果它存在的話,"startx "會使用 /etc/X11/xinit/xserverrc
。
為了保持 logind
的會話權限,並防止通過切換終端繞過屏幕鎖定器,Xorg 必須在發生登錄的同一虛擬終端上啟動 [1]。因此建議在 vt$XDG_VTNR
文件中指定 ~/.xserverrc
。
~/.xserverrc
}文件: #!/bin/sh exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
參見 Xserver(1) 中的所有命令行選項列表。
另外,如果您想讓X顯示在一個獨立的控制台,而不是調用服務器的控制台,您可以通過使用 /usr/lib/systemd/systemd-multi-seat-x
提供的X服務器包裝器實現。為方便起見,可以通過修改 ~/.xserverrc
設置 "xinit "和 "startx "使用該包裝器。
-keeptty
選項,重新啟用將X會話的輸出重定向至Xorg日誌文件的功能。詳見 Xorg#重定向Xorg會話日誌。}}
用法[編輯 | 編輯原始碼]
要以普通用戶身份運行 Xorg,請輸入:
$ startx
或者如果配置了 #xserverrc。
$ xinit -- :1
--:display_number
來指定顯示,其中 display_number
為 1
或以上。您選擇的窗口管理器(或桌面環境)現在應該可以正確啟動了。
要退出X,請運行您的窗口管理器的退出功能(假設它有的話)。如果它缺乏這樣的功能,請運行。
$ pkill -15 Xorg
$ pkill -15 -t tty"$XDG_VTNR" Xorg
另見 signal(7)。
技巧和竅門[編輯 | 編輯原始碼]
覆蓋 xinitrc[編輯 | 編輯原始碼]
如果您有一個正常工作的 ~/.xinitrc
,但只是想試試其他窗口管理器或桌面環境,您可以通過發出startx,並在後面加上窗口管理器的路徑來運行它,例如。
$ startx /usr/bin/i3
如果二進制文件需要參數,它們需要加引號,以便被識別為startx的第一個參數的一部分。
$ startx "/usr/bin/application --key value "
注意,完整的路徑是必須的。您也可以為 #xserverrc 腳本指定自定義選項,在雙破折號 --
後加上這些選項。
$ startx /usr/bin/enlightenment -- -br +bs -dpi 96
另請參見 startx(1)。
/etc/X11/xinit/xinitrc.d/
下的腳本被跳過,環境變量 DISPLAY
可能需要被設置。您可以通過執行DISPLAY=:display_number startx /usr/bin/i3
,在所需的顯示器上試用 i3。登錄時自動啟動 X[編輯 | 編輯原始碼]
確保 startx 是正確的配置。
在您的 login shell 初始化文件(例如,Bash 的 ~/.bash_profile
或 Zsh 的 ~/.zprofile
)中放置以下內容。
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then exec startx fi
您可以用 -eq
替換 -le 3
這樣的比較(用於 vt1 到 vt3),如果您想在一個以上的虛擬終端上使用圖形化登錄。
檢測虛擬終端的其他條件包括 "$(tty)" = "/dev/tty1"
,它不允許與 -le
比較,以及 "$(fgconsole 2>/dev/null || echo -1)" -eq 1
,它在串行控制台不起作用。
exec
命令確保在X服務器退出、崩潰或被攻擊者殺死時,用戶被註銷。如果您想承擔風險,在X會話結束時保持登錄狀態,請刪除 exec
。
參見 Fish_(簡體中文)#登錄_fish_時自動起動_X 和 Systemd_(簡體中文)/User_(簡體中文)#Automatic_login_into_Xorg_without_display_manager。
在桌面環境/窗口管理器之間進行切換[編輯 | 編輯原始碼]
如果您經常在不同的桌面環境或窗口管理器之間切換,使用顯示管理器或擴展 ~/.xinitrc
來實現切換是很方便的。
下面的例子展示了如何用一個參數來啟動一個特定的桌面環境或窗口管理器。
~/.xinitrc
... # 这里 Xfce 保持默认 session=${1:-xfce} case $session in i3|i3wm ) exec i3;; kde ) exec startplasma-x11;; xfce|xfce4 ) exec startxfce4;; # No known session, try to run it as command * ) exec $1;; esac
要傳遞參數 session:
$ xinit session
或
$ startx ~/.xinitrc session
在沒有窗口管理器的情況下啟動應用程序[編輯 | 編輯原始碼]
可以在沒有窗口管理器的情況下只啟動特定的應用程序,儘管這很可能只對全屏模式下的單個應用程序有用。比如說:
~/.xinitrc
... exec chromium
另外,也可以像 #覆蓋 xinitrc 中描述的那樣,直接從命令提示符中調用二進制。
使用這種方法,您需要通過自己的配置文件設置每個應用程序的窗口幾何形狀(如果可能的話)。
另請參見顯示管理器#沒有窗口管理啟動應用程序。
使用 startx 進行輸出重定向[編輯 | 編輯原始碼]
參見Xorg#重定向Xorg會話日誌了解詳情。