Как я могу заставить TMUX быть активным, когда я начинаю новый сеанс оболочки?
Вместо того, чтобы набирать tmux
каждый раз, , как я могу tmux
всегда использоваться для новых окон сеанса?
Итак, если я не открываю окон терминалов, а затем открываю их, как первый сеанс может находиться в tmux
?
Кажется, что-то вроде .bashrc
?
Ответы
Ответ 1
warning это может привести к повреждению ваших учетных записей Ubuntu. Используйте с особой осторожностью и убедитесь, что у вас есть вторая учетная запись администратора на компьютере, на которую вы можете войти, если у вас есть те же проблемы, что и я. См. Мой ответ для получения более подробной информации и другого подхода.
Самое простое решение - добавить вызов tmux
в конец вашего .bashrc
, например.
alias g="grep"
alias ls="ls --color=auto"
# ...other stuff...
if [[ ! $TERM =~ screen ]]; then
exec tmux
fi
Обратите внимание, что exec
означает, что процесс bash, который запускается при открытии терминала, заменяется на tmux
, поэтому Ctrl-B D
(т.е. отключить от tmux) фактически закрывает окно, вместо того, чтобы возвращаться к оригинальный bash процесс, который, вероятно, является поведением, которое вы хотите?
Кроме того, требуется инструкция if
(она обнаруживает, что текущее окно bash уже находится в процессе tmux), иначе каждый раз при запуске tmux содержащийся bash процесс будет пытаться запустить собственный сеанс tmux, что приводит к бесконечному числу вложенных tmuxen, которые могут быть, ошибочно, весьма раздражающими (что говорит, что это выглядит круто).
Однако существует очень небольшой риск, который может привести к тому, что bash
ведет себя так, что другие программы не ожидают, так как запуск bash может привести к тому, что он превратится в процесс tmux, поэтому может быть лучше для изменения способа запуска эмулятора терминала.
Я использую небольшую исполняемую оболочку script ~/bin/terminal
(с ~/bin
в $PATH
, поэтому она найдена автоматически), которая выглядит примерно так:
#!/bin/sh
exec gnome-terminal -e tmux
(Я не использую gnome-terminal, поэтому вам может понадобиться удалить exec
, я не уверен.)
Теперь, когда вы запускаете скролл terminal
, у вас есть терминал с tmux. Вы можете добавить это в свои ярлыки меню/рабочего стола/клавиатуры, чтобы заменить терминал по умолчанию.
(Этот подход также позволяет вам более легко настраивать другие вещи о эмуляторе терминала позже, если вы когда-либо захотите.)
Ответ 2
Если вы хотите иметь один сеанс tmux, поставьте следующее в ~/.bashrc для bash или ~/.zshrc для zsh:
tmux attach &> /dev/null
if [[ ! $TERM =~ screen ]]; then
exec tmux
fi
Строка tmux attach
заключается в том, чтобы убедиться, что есть сеанс, к которому он присоединяется, и если не было сеанса, вы не получите предупреждение о "отсутствии сеанса".
Ответ 3
Мой оригинальный, принятый ответ прекратил работу над моей системой Ubuntu14 после недавнего обновления.
Используя
[ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux
или
[ $TERM != "screen" ] && TERM=xterm-256color && exec tmux
помешало бы мне даже войти в систему. Я смог разрешить это только из-за того, что на компьютере был второй вход администратора.
Исправление для меня в Ubuntu (и в osx тоже) заключалось в том, чтобы изменить мою терминальную программу, чтобы фактически запустить tmux, т.е.
![enter image description here]()
У меня все еще есть
[ `uname -s` != Linux ] && exec tmux
в качестве моей последней строки .bashrc
, но теперь он только для моих систем Mac OSX.
Ответ 4
Для меня я бы хотел, чтобы мой tmux запускался каждый раз, когда я накладываю на свою удаленную машину, и когда я отсоединяюсь или выхожу из tmux, соединение должно быть закрыто автоматически. Некоторое время копаясь в этой проблеме, следующий код делает именно то, что я хочу, и считается наиболее оптимизированным, насколько мне известно.
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
Обратите внимание, что эта строка должна быть первой строкой в файле bashrc, чтобы убедиться, что она загружена первой. Мы не можем поставить вызов "exec" перед "tmux attach", потому что после того, как exec заменит процесс bash на tmux, соединение будет закрыто, даже если к ним не нужно подключаться. Поэтому нам нужен "выход" для прекращения соединения после отсоединения или выхода из подключенных сеансов. Но ввод "exec" перед командой нового сеанса прекрасен, так как последняя команда должна быть выполнена.
Ответ 5
Добавьте следующую строку кода в конец .bashrc
,
[[ $TERM != "screen" ]] && exec tmux
Ответ 6
Однострочный, который также гарантирует правильность установки типа терминала для 256 цветов:
[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux
Ответ 7
Чтобы включить tmux для сеансов login и ssh, вы можете добавить это в конец своего .bashrc:
# enable tmux at login
PNAME="$(ps -o comm= $PPID)";
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] ; then
exec tmux
fi
Этот script ищет родительский процесс оболочки bash. Если bash был запущен из входа в систему или из ssh, он выполнит tmux. Если вы хотите, чтобы это работало с терминалом GUI, вы можете добавить это и там. Например, если вы хотите запустить tmux автоматически при запуске стандартного Ubuntu gnome-terminal
, вы должны использовать это:
PNAME="$(ps -o comm= $PPID)";
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] || [ $PNAME == "gnome-terminal" ] ; then
exec tmux
fi
Я тестировал выше на Live Ubuntu Desktop, после чего мне удалось войти в систему. Это не должно нарушать вход в GUI, если он не запустил команду входа в систему. Я не знаю о GUI Linux, который делает это.
Ответ 8
Я начал с этого https://wiki.archlinux.org/index.php/Tmux#Bash и улучшил его, чтобы восстановить отдельные сеансы и сделать новые, если все сеансы уже были прикреплены
# .bashrc
case $- in
*i*)
if command -v tmux>/dev/null; then
if [[ ! $TERM =~ screen ]] && [[ -z $TMUX ]]; then
if tmux ls 2> /dev/null | grep -q -v attached; then
exec tmux attach -t $(tmux ls 2> /dev/null | grep -v attached | head -1 | cut -d : -f 1)
else
exec tmux
fi
fi
fi
;;
esac
Ответ 9
Как насчет добавления
# If not running interactively, do not do anything
[[ $- != *i* ]] && return
[[ -z "$TMUX" ]] && exec tmux
на ваш .bashrc. Он также работает для zsh.
Взято из https://wiki.archlinux.org/index.php/Tmux#Start_tmux_with_default_session_layout
Ответ 10
Я просто сделал это ярлыком на клавиатуре (в Linux Mint не Ubuntu, поэтому я не уверен, что это легко)...
![custom shortcut for tmux terminal]()
Это может быть трудно увидеть, но пользовательский ярлык gnome-terminal --window --maximize -e tmux
. Это запустит новое окно gnome-terminal
, а затем exec
utes tmux
для вас.
У меня есть еще один пользовательский ярлык, который запускает "нормальный" gnome-terminal
максимизированный (это то же самое без -e tmux
).
Я считаю, что это лучший способ, потому что вы можете запускать любой терминал так, как хотите, и это самый настраиваемый способ.
Ответ 11
В xfce4 (я запускаю Fedora 24 XFCE spin, это здорово), я нашел, что самое простое решение - отредактировать ярлыки панели, чтобы они запускались:
xfce4-terminal -e tmux
Эта же команда может использоваться для замены ярлыка приложений клавиатуры.
Я ранее вставлял оператор if в свой .bashrc, но это вызвало ошибку входа в систему (возвратитесь в поле входа в систему, когда был введен правильный пароль).
Команда для команды Thunar Open Terminal Здесь команда немного отличается. Чтобы изменить это goto:
Thunar > Изменить > Настроить пользовательские действия... > Открыть терминал здесь > Изменить и заменить:
exo-open -working-directory% f -launch TerminalEmulator
с: xfce4-terminal -working-directory% f -e tmux