X11
如何在 X 會話的第一個 shell 啟動時啟動命令?
我在 Pop-OS 上執行 Gnome!20.04。
我正在使用
terminator
和zsh
外殼。我只想fortune
在 X 會話中第一次使用 zsh shell 時啟動。我已經嘗試過這樣的事情
.zshrc
:### count the lines of ps -ax | grep zsh ps -ax | grep /zsh ### [ -z "$(pidof zsh)" ] && fortune
PS:我很難為這個問題找到合適的標籤
鑑於“每個 X 會話一次”的精確要求,儲存在目前 X 會話中已經完成的資訊的最自然的位置是在 X 伺服器的狀態中。X 伺服器上沒有真正的自定義全域數據的預期位置,但是有一個可以隨時更改的自定義全域配置的位置,這對於這裡的目的來說已經足夠接近了:X 資源。操作 X 資源的命令行工具是
xrdb
.請注意,這
xrdb
很古怪,X.org 實現存在非常長期存在的錯誤。您可能不想使用xrdb -load
(刪除所有先前載入的配置,如文件所示)或xrdb -remove
(刪除所有先前載入的配置,不像它應該做的那樣)。您的未經測試的程式碼
.zshrc
:if [[ -n ${DISPLAY:+set} ]] && whence xrdb >/dev/null; then if xrdb -query | grep -q '^pietrodito\.session\.ran-fortune:.*true'; then fortune xrdb -merge <<<'pietrodito.session.ran-fortune: true' fi fi
要取消設置測試選項:
xrdb -load <(xrdb -query | grep -v '^pietrodito\.session\.ran-fortune:)
請注意,這不是原子的。
fortune
如果您幾乎在同一時間啟動 zsh 實例,則可能會執行多次。