Как я могу сделать TMUX активным всякий раз, когда начинаю новый сеанс оболочки?

Вместо того, чтобы печататьtmux каждый раз,how could I have tmux always be used for new session windows?

Так что, если у меня нет окон терминала, а затем я открываю один, как этот первый сеанс может быть вtmux?

Выглядит как.bashrc что-то вроде того?

 kev17 июн. 2012 г., 06:46
Ctrl-b c создаст новое окно.
 Michael Durrant17 июн. 2012 г., 06:49
спасибо, я имею в виду, если я вообще не в окне терминала.
 Michael Durrant17 июн. 2012 г., 06:52
терминал = терминальная программа по умолчанию, плюс tmux
 Michael Durrant17 июн. 2012 г., 06:51
Ubuntu 11 - моя ОС
 huon17 июн. 2012 г., 06:50
Какую операционную систему вы используете? (А какой эмулятор терминала?)

Ответы на вопрос(11)

Если вы хотите иметь один сеанс tmux, поместите следующее в ~ / .bashrc дляbash или ~ / .zshrc дляzsh:

tmux attach &> /dev/null

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi

tmux attach line чтобы убедиться, что есть сеанс, к которому он подключен, и если сеанса не было, вы не получите предупреждение о & quot;no session& Quot ;.

 13 апр. 2017 г., 14:18
я используюps чтобы проверить, есть ли процесс tmux.

В xfce4 (я запускаю Fedora 24 XFCE spin, это здорово), я обнаружил, что самое простое решение - отредактировать ярлыки на панели так, чтобы они запускались:

xfce4-терминал -e tmux

Эту же команду можно использовать для замены сочетания клавиш.

Ранее я вставлял оператор if в мой .bashrc, но это приводило к сбою входа в систему (возвращайтесь к полю входа в систему всякий раз, когда вводится правильный пароль).

Команда для Thunar's Open Terminal Here немного отличается. Чтобы изменить это Перейти:

Тунар & gt; Изменить & gt; Настроить пользовательские действия ... & gt; Откройте терминал здесь & gt; Изменить кнопку и заменить:

exo-open - рабочий каталог% f - запуск TerminalEmulator

с: xfce4-терминал - рабочий каталог% f -e tmux

 10 нояб. 2018 г., 16:53
Спасибо тебе за это! Вы сэкономили мне много времени.

Добавить следующееline of code до конца.bashrc,

[[ $TERM != "screen" ]] && exec tmux

Мой оригинальный, принятый ответ перестал работать на моей системе 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 сейчас.

Что касается меня, я бы хотел, чтобы мой tmux запускался каждый раз, когда я выполняю оболочку на своей удаленной машине, и когда я отсоединяюсь от tmux или выхожу из него, соединение должно автоматически закрываться. После некоторого изучения этой проблемы следующий код выполняет именно то, что я хочу, и считается наиболее оптимизированным, насколько мне известно.

[ -z "$TMUX"  ] && { tmux attach || exec tmux new-session && exit;}

Обратите внимание, что эта строка должна быть первой строкой в вашем файле bashrc, чтобы убедиться, что он загружается первым. Мы не можем поставить "exec" вызов перед "приложением tmux" потому что после того, как exec заменит процесс bash на tmux, соединение будет закрыто, даже если нет сессий для подключения. Поэтому нам нужен «выход» позвоните, чтобы разорвать соединение после того, как мы отсоединимся или выйдем из подключенных сеансов. Но положить "exec" впереди команда new-session подходит как последняя команда, которая должна быть выполнена.

 04 мар. 2019 г., 11:17
Это тот, который работает лучше всего для меня - некоторые другие присоединяются к tmux, но открывают новое окно каждый раз, когда я вхожу в систему.
Решение Вопроса

warning this can now 'corrupt' (make it unable to open a terminal window - which is not good!) your Ubuntu logins. Use with extreme caution and make sure you have a second admin account on the computer that you can log into in case you have the same problems I did. See my other answer for more details and a different approach.

Учитывая это предупреждение, самое простое решение может быть добавитьtmux вызов до конца вашего.bashrcнапример,

alias g="grep"
alias ls="ls --color=auto"

# ...other stuff...

if [[ ! $TERM =~ screen ]]; then
    exec tmux
fi

Обратите внимание, чтоexec означает, что процесс bash, который начинается при открытии терминала,replaced отtmux, такCtrl-B D (то есть отключение от tmux) фактически закрывает окно, вместо того, чтобы вернуться к исходному процессу bash. Какое поведение, вероятно, вам нужно?

Так жеif оператор необходим (он обнаруживает, что текущее окно bash уже находится в процессе tmux), в противном случае каждый раз, когда вы запускаете tmux, содержащийся процесс bash будет пытаться запустить свой собственный сеанс tmux, что приведет к бесконечному количеству вложенных tmuxen, которое может эээ, довольно раздражает (тем не менее, это выглядит круто).

Тем не менее, существует очень небольшой рискbash ведут себя так, как не ожидают другие программы, поскольку запуск bash может привести к превращению его в процесс tmux, поэтому может быть лучше изменить способ запуска эмулятора терминала.

Я использую небольшой исполняемый скрипт~/bin/terminal (с~/bin в$PATH, так что он найден автоматически), который выглядит примерно так:

#!/bin/sh
exec gnome-terminal -e tmux

(Я не использую gnome-терминал, поэтому вам, возможно, придется удалитьexecЯ не уверен.)

Теперь, когда вы запускаетеterminal scipt у вас есть терминал с tmux. Вы можете добавить это в меню / рабочий стол / сочетания клавиш, чтобы заменить терминал по умолчанию.

(Этот подход также позволяет вам легче настраивать другие элементы эмулятора терминала позже, если вы захотите.)

 06 янв. 2017 г., 01:04
Что делать, если вы не хотите заменять bash? Удалить exec?
 02 мар. 2014 г., 03:46
Это примечание лучше поставить строку в начале файла? Если процесс заменяется, то все изменения, сделанные.bashrc потеряны Тогда.bashrc источник снова, когдаtmux нереститсяbash снова. Зачем запускать его дважды?
 09 дек. 2016 г., 18:25
exec gnome-terminal -e tmux FTW
 24 окт. 2013 г., 21:18
Как можно обойти тот факт, что это может создать массу сеансов, если вы часто открываете / закрываете окна терминала?
 22 февр. 2018 г., 17:37
В Fedora 25 я получал цикл входа в систему, когда у меня былоexec tmux в моем.bashrc, Так как я уже установилSuper+C в качестве сочетания клавиш для запуска терминала я добавил-e tmux на команду быстрого доступа, чтобы легко запустить сеанс tmux. В частности, у меня есть набор ярлыков для выполненияgnome-terminal --window --full-screen -e tmux

Я начал с этого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
 19 мар. 2018 г., 18:43
удалите grep и params для «tmux attach» если вы всегда хотите подключиться (с нескольких машин одновременно)

Однострочник, который также гарантирует, что тип терминала установлен правильно для 256 цветов:

[ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux

Чтобы включить 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. Если вы хотите, чтобы это работало с терминалом с графическим интерфейсом, вы также можете добавить его туда. Например, если вы хотите запускать tmux автоматически при запуске стандарта Ubuntugnome-terminal, вы бы использовали это:

PNAME="$(ps -o comm= $PPID)";
if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] || [ $PNAME == "gnome-terminal" ] ; then
  exec tmux
fi

Я протестировал вышеупомянутое на Live Ubuntu Desktop и впоследствии смог войти в систему. Это не должно нарушать вход в GUI, если он не вызывает команду login для входа в систему. Я не знаю о графическом интерфейсе Linux, который делает это.

 16 июн. 2018 г., 12:38
эта проверка родительского процесса необходима, в противном случае это приводит к циклу входа в систему, как в моем случае.

Как насчет добавления

# 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; поэтому я не уверен, что это так просто) ...

custom shortcut for tmux terminal

Это может быть трудно увидеть, ноcustom shortcut являетсяgnome-terminal --window --maximize -e tmux, Это начинается новыйgnome-terminal окно развернуто, а затемexecУтесtmux для тебя.

У меня есть еще одинcustom shortcut который начинает "нормальный"gnome-terminal развернуто (то же самое без-e tmux).

Я чувствую, что это лучший способ, потому что вы можете запустить любой терминал любым удобным для вас способом, и это наиболее настраиваемый способ.

Ваш ответ на вопрос