Как я могу сделать TMUX активным всякий раз, когда я начинаю новый сеанс оболочки?
вместо tmux
каждый раз как я мог tmux
всегда использоваться для новых окон сеанса?
Итак, если у меня нет открытых окон терминала, а затем я открываю один, как этот первый сеанс может быть в tmux
?
кажется .bashrc
подобное возможно?
11 ответов:
предупреждениетеперь это может "повредить" (сделать его неспособным открыть окно терминала-что не очень хорошо!) ваши логины Ubuntu. Используйте с особой осторожностью и убедитесь, что у вас есть вторая учетная запись администратора на компьютере, в которую вы можете войти, если у вас есть те же проблемы, что и у меня. Смотрите мой другое ответьте для получения более подробной информации и другого подхода.
учитывая это предупреждение, самым простым решением может быть добавление
tmux
ссылка до конца вашего.bashrc
, например,alias g="grep" alias ls="ls --color=auto" # ...other stuff... if [[ ! $TERM =~ screen ]]; then exec tmux fi
отметим, что
exec
означает, что процесс bash, который начинается при открытии терминала,заменить bytmux
, Так чтоCtrl-B D
(т. е. отключить от tmux) фактически закрывает окно, вместо того, чтобы вернуться к исходному процессу bash, который, вероятно, является поведением, которое вы хотите?и
if
оператор требуется (он определяет, если текущее окно bash находится в процессе tmux уже) в противном случае каждый раз, когда вы запускаете tmux, содержащийся процесс bash попытается запустить свой собственный сеанс tmux, что приведет к бесконечному количеству вложенных tmuxen, которые могут быть, err, довольно раздражающими (тем не менее, это выглядит круто).
однако, есть очень маленький риск, что это может сделать
bash
вести себя так, что другие программы не ожидают, так как запуск bash может привести к тому, что он превратится в процесс tmux, поэтому может быть лучше изменить способ запуска вашего терминала эмулятор.я использую небольшой исполняемый скрипт
~/bin/terminal
(С~/bin
in$PATH
, так что он найден автоматически), что выглядит немного как:#!/bin/sh exec gnome-terminal -e tmux
(я не использую gnome-терминал, поэтому вам, возможно, придется удалить
exec
, Я не уверен.)теперь всякий раз, когда вы запускаете
terminal
scipt у вас есть терминал с tmux. Вы можете добавить это в меню/рабочий стол/сочетания клавиш, чтобы заменить терминал по умолчанию.(этот подход также позволяет вам более легко настроить другие вещи об эмуляторе терминала позже, если вы когда-нибудь захотите.)
Если вы хотите иметь один сеанс tmux, поместите следующее в свой~/.bashrc и для Баш или ~/.zshrc для zsh:
tmux attach &> /dev/null if [[ ! $TERM =~ screen ]]; then exec tmux fi
The
tmux attach
строка чтобы убедиться, что есть сеанс, к которому он присоединяется, и если не было сеанса, вы не получите предупреждение о "нет сессии".
мой оригинальный, принятый ответ, перестал работать на моей системе Ubuntu14 после недавнего обновления.
используя
[ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux
или
[ $TERM != "screen" ] && TERM=xterm-256color && exec tmux
остановит меня от возможности даже войти в систему. Я смог решить это только из-за наличия второго входа администратора на компьютере.
исправление для меня на Ubuntu (и в osx тоже) состояло в том, чтобы изменить мою терминальную программу, чтобы фактически запустить tmux вместо этого, т. е.
Я до сих пор есть
[ `uname -s` != Linux ] && exec tmux
как мой последний
.bashrc
линия, но это его только для моих систем Mac OSX сейчас.
для меня я хотел бы, чтобы мой tmux запускался каждый раз, когда я подключаюсь к удаленной машине, и когда я отсоединяюсь или выхожу из tmux, соединение должно быть автоматически закрыто. После копания в этой проблеме на некоторое время, следующий код делает именно то, что я хочу и считается наиболее оптимизированным в меру моих знаний.
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
Примечание эта строка должна быть первой строкой в файле bashrc, чтобы убедиться, что он загружен первым. Мы не можем поставить "exec" перед вызовом "tmux attach", потому что после того, как exec заменит процесс bash на tmux, соединение будет закрыто, даже если нет сеансов для присоединения. Поэтому нам нужен вызов "exit" для завершения соединения после отсоединения или выхода из подключенных сеансов. Но поставить "exec" перед командой new-session-это нормально, так как это последняя команда, которая будет выполнена.
Я начал с этого 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
чтобы включить tmux для входа в систему и сеансов ssh, вы можете добавить это в конец вашего .bashrc следующее:
# enable tmux at login PNAME="$(ps -o comm= $PPID)"; if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] ; then exec tmux fi
этот сценарий выглядит для родительского процесса из командной оболочкой 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
Я проверил выше на живом рабочем столе Ubuntu, и я смог войти в систему после этого. Это не должно нарушать логин GUI, если он не вызывает команду login для входа в систему. Я не знаю о графическом интерфейсе linux, который делает это.
однострочный, который также гарантирует, что тип терминала установлен правильно для 256 цветов:
[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux
Как насчет добавления
# 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
Я просто сделал это сочетание клавиш (в Linux Mint не Ubuntu; поэтому я не уверен, что это так просто)...
это может быть трудно понять, но пользовательский ярлык и
gnome-terminal --window --maximize -e tmux
. Это начинает новыйgnome-terminal
Окно развернуто, а затемexec
utestmux
для вас.у меня дополнительно есть еще пользовательский ярлык это начинает "нормальный"
gnome-terminal
развернуто (это то же самое без-e tmux
).Я чувствую, что это лучший способ, потому что вы можете запустить любой терминал любым способом, который вы хотите, и это самый настраиваемый способ.
в xfce4 (я запускаю Fedora 24 Xfce spin, это здорово), я нашел самое простое решение-редактировать ярлыки панели, чтобы они запускались:
xfce4-terminal-e tmux
эта же команда может быть использована для замены сочетания клавиш приложения.
Я ранее вставил оператор if в мой .bashrc, но это вызвало сбой входа в систему (цикл обратно в поле входа всякий раз, когда был введен правильный пароль).
команда для Thunar по Открыть терминал здесь команда отличается незначительно. Чтобы изменить это Гото:
Thunar > Edit > Настройка Пользовательских Действий... > Открыть терминал здесь > кнопка редактирования и заменить:
exo-open --working-directory %f --launch TerminalEmulator
с: xfce4-терминал --рабочий каталог %f-e tmux