Я хочу установить 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
— идентификатор процесса родителя оболочки, устанавливаемый при инициализации оболочки.