當終端機開啟時如何預設啟動 tmux 排除 Dolphin 中的終端

當終端機開啟時如何預設啟動 tmux 排除 Dolphin 中的終端

我想在打開終端機(例如 Yakuake、Konsole)時將 tmux 設定為預設值,但在 Dolphin 檔案管理器中排除該終端。

我將以下程式碼片段放入~/.zshrc

if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
    windowname=$(xdotool getactivewindow getwindowname)
    if [[ ${windowname} =~ ".*Yakuake$" ]] || [[ "${windowname}" =~ ".*Konsole$" ]]; then
        exec tmux
    fi
fi

但該命令xdotool getactivewindow似乎總是得到錯誤的活動視窗。所以我寫了這個片段來~/.zshrc進行測試。

xdotool getactivewindow && xdotool getactivewindow getwindowname
sleep 3
xdotool getactivewindow && xdotool getactivewindow getwindowname

但是當透過快捷鍵ctrl++開啟Yakuake時,我得到以下結果。似乎獲得了錯誤的活動視窗名稱,即最後一個啟動的視窗(在範例中是),它應該是 Yakuake。altYxdotoolsublimetext

94371843
~/.zshrc - Sublime Text
65011722
~ : sleep — Yakuake

當透過KDE等離子或命令列啟動Yakuake或Konsole時也有同樣的現象。

當終端機開啟時,如何將 tmux 作為預設啟動排除 Dolphin 中的終端?


更新: 謝謝卡米爾·馬喬羅夫斯基的回答,在我的~/.zshrc.

if [[ -x "$(command -v tmux)" ]] && [[ -n "${DISPLAY}" ]] && [[ -z "${TMUX}" ]]; then
    if [[ ! "$(readlink -f /proc/${PPID}/exe)" =~ "dolphin" ]]; then
        exec tmux
    fi
fi

答案1

我認為 Dolphin 終端機中的 shell 會被視為/proc/$PPID/exe符號連結/usr/bin/dolphin。而不是xdotool,使用結果realpath /proc/$PPID/exe並在結果上建立您的邏輯。

$PPID是 shell 父進程的進程 ID,在 shell 初始化時設定。

相關內容