如何在打开终端时默认启动 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但是当我使用快捷键+ alt+打开 Yakuake 时,得到的结果如下Y。似乎xdotool获取了错误的活动窗口名称,即最后激活的窗口(在示例中为sublimetext),它应该是 Yakuake。

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

当通过 KDE plasma 或命令行启动 Yakuake 或 Konsole 时也会出现同样的现象。

当打开的终端排除 Dolphin 中的终端时,如何才能默认启动 tmux?


更新: 谢谢Kamil Maciorowski 的回答,在我的 中添加此代码片段后,一切都运行正常~/.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 初始化时设置。

相关内容