Как запустить tmux по умолчанию при открытии терминалов, исключив терминал в Dolphin

Как запустить tmux по умолчанию при открытии терминалов, исключив терминал в Dolphin

Я хочу установить tmux в качестве терминала по умолчанию при открытии терминалов (например, Yakuake, Konsole), но исключить терминал в файловом менеджере 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

Но я получаю результат, как показано ниже, когда Yakuake открывается с помощью сочетаний клавиш ctrl+ alt+ Y. Похоже, что xdotoolон получил неправильное имя активного окна, которое было последним активированным окном (в примере это sublimetext), а должно быть Yakuake.

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

При активации Yakuake или Konsole с помощью KDE Plasma или командной строки возникает то же самое явление.

Как запустить 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 увидит /proc/$PPID/exeкак символическую ссылку на /usr/bin/dolphinили около того. Вместо xdotool, используйте realpath /proc/$PPID/exeи стройте свою логику на результате.

$PPID— идентификатор процесса родителя оболочки, устанавливаемый при инициализации оболочки.

Связанный контент