Как я могу установить свою оболочку по умолчанию для запуска tmux

У Вас есть МОТ или какая-либо другая установка инструмента управления по дополнительному каналу? Вы можете получать доступ командной строки. Если Ваш инструмент OODM не поддерживает доступ командной строки, необходимо смочь, по крайней мере, вызвать перезагрузку на удаленной машине, загрузить подходящее живое изображение CD прочь сетевого ресурса через сервер PXE, соединиться с живым CD через SSH, смонтировать локальный жесткий диск и затем сделать соответствующие изменения конфигурации.

Кроме этого, я не могу думать о способе восстановить машину без физического доступа.

85
08.11.2015, 17:16
15 ответов

Это, кажется, работает...

https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login

Просто добавьте следующую строку кода удара к Вашему .bashrc перед Вашими псевдонимами; код для других оболочек очень похож:

[[ $TERM != "screen" ]] && exec tmux
48
27.01.2020, 19:30
  • 1
    Для меня это также потребовало [[ $- != *i* ]] && return к тому, чтобы не быть бесконечным циклом (от той же страницы) –  Keith Smiley 14.04.2013, 04:45
  • 2
    Это - плохое решение начиная с TERM мог бы быть установлен на некоторое другое значение пользователем .tmux.conf файл. Лучше проверять ли TMUX переменная установлена или нет. –  Kusalananda♦ 30.12.2016, 15:21

Существует команда chsh который изменяет оболочку входа в систему. Консультироваться man chsh.

5
27.01.2020, 19:30
  • 1
    tmux не оболочка, это - оконечный мультиплексор как экран GNU. Интересно, это действительно поддерживает -c опция согласно странице справочника, таким образом, это может работать как оболочка как раз для использования его в качестве оболочки входа в систему, но я подозреваю это, не будет работать правильно во всех ситуациях, например, графических логинах через gdm/kdm. –  Mikel 20.07.2012, 18:32
  • 2
    Хотя это разумно и отступает документацией, это, кажется, повреждает прямое выполнение команды через SSH (что-то как ssh $some_server echo foo). –  n.st 11.05.2014, 05:11
  • 3
    tmux по крайней мере с 1,8 на Ubuntu добавляет себя к /etc/shells, таким образом, это - допустимая оболочка входа в систему. –  claytron 26.03.2015, 19:14
  • 4
    Это требует, чтобы Вы настроили default-shell установка в tmux конфигурации для указания на фактическую оболочку. –  Kusalananda♦ 14.01.2017, 15:35

Как Mikel, уже указанный в его комментарии, чтобы иметь tmux, поскольку, Ваша оболочка входа в систему может иметь побочные эффекты. Но можно сделать tmux Ваша оболочка по умолчанию, буквально. Оболочка пользователя по умолчанию определяется в/etc/passwd. Таким образом, можно стать корнем и редактировать / и т.д. / пароль, например. sudo vi /etc/passwd ищите строку, которая начинается с Вашего имени пользователя. Это, вероятно, заканчивается :/bin/bash. Измените/bin/bash на/usr/bin/tmux, и теперь tmux является Вашей оболочкой входа в систему по умолчанию.

Однако никакая гарантия, что это не вызовет проблемы!

Что может работать, лучше не должен делать ничего, что требует полномочий пользователя root. Я попытался бы создать файл в своем доме directoy названный .bash_login и запустить tmux из того файла: 'повторите "tmux"> ~/.bash_login.

Это должно работать, но необходимо попытаться найти наш сами, b/c документация удара не очень точно о том, какой файл читается и выполняется когда.

-3
27.01.2020, 19:30
  • 1
    То, что описывает Ваш первый абзац, что chsh делает! За исключением того, что Ваш путь требует быть корнем и подвержен ошибкам. Выполнение tmux от .bash_login более вероятно, повредит удаленные входы в систему. –  Gilles 'SO- stop being evil' 21.07.2012, 02:10

Ответ @StarNamer обычно точен, хотя я обычно включаю следующие тесты, чтобы удостовериться, что (1) tmux существует в системе, (2) мы находимся в интерактивной оболочке и (3) tmux не пытается работать в себе:

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

Ссылки

110
27.01.2020, 19:30
  • 1
    Хороший, мне было нужно command прежде, но не понял, что это существовало. –  Freedom_Ben 21.06.2015, 03:25
  • 2
    это exec оператор не позволяет Вам выйти из tmux, не выходя из всего терминала! :| –  Louis Maddox 02.08.2015, 23:43
  • 3
    @LouisMaddox: exec заменяет текущий процесс новым - в этом случае, он заменяет оболочку входа в систему удара tmux, поэтому когда tmux выходит затем нет никакого другого терминала для отступания к :) –  Mark K Cowan 08.12.2015, 14:21

Я успешно использую

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

в моем .zshrc . Если вы используете bash, поместите его в свой .bashrc .


Я также просто попытался установить tmux в качестве оболочки по умолчанию ( chsh -s $ (which tmux) ), и это, похоже, прерывает прямое выполнение команд через SSH, например ssh $ some_server echo foo не производит никакого вывода.

4
27.01.2020, 19:30

Добавьте это в свой ~/.tmux. conf

set -g default-command /usr/local/bin/fish
0
27.01.2020, 19:30

Ни один из вышеперечисленных ответов не помог мне - exec tmux не позволяет мне закрыть tmux, не выходя из оболочки (независимо от того, открыт ли он с помощью Ctrl + T или из меню приложения).

Я использую Linux Mint, который позволяет сопоставить некоторые горячие клавиши с командами, и (как бы кошерно ни было...) У меня есть bash-оболочки с командами, запускаемыми там, например. Win+Alt+B делает какое-то извилистое bash -exec(vim) утверждение для редактирования моего .bashrc, так что он действует как обычная оболочка.

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

if command -v tmux>/dev/null; then
        if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
                [[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
        fi
fi

Вы можете обернуть все это в одну строку, но для удобства чтения я думаю, что это нормально.

2
27.01.2020, 19:30

Добавляя к ответу @Louis Maddox, я бы выполнил tmux part with;

(exec tmux attach || exec tmux new-session)
2
27.01.2020, 19:30

Перейдите к настройкам терминала. enter image description here

А затем щелкните "командную" панель. enter image description here

Установите флажок "Выполнить пользовательскую команду вместо моей продажи" "и напишите любую команду, которую хотите выполнить при запуске вашего терминала.

4
27.01.2020, 19:30

Добавление строки вроде

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

в ваш файл bashrc, вероятно, сделает свою работу. Обратите внимание, что эта строка завершит работу ssh и прервет соединение, когда вы отсоединитесь или выйдете из tmux. Мне нравится эта конфигурация, так как она экономит нажатие клавиш для завершения соединения. Но если вам это не нравится (что, я думаю, очень маловероятно) и вы предпочитаете оставаться в оболочке входа после завершения соединения, просто удалите часть exit:

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

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

19
27.01.2020, 19:30

Это в моем ~ / .profile (я использую ksh93 ):

if [[ -z "$TMUX" ]]; then
    if tmux has-session 2>/dev/null; then
        exec tmux attach
    else
        exec tmux
    fi
fi

Если TMUX переменная среды не задана / пуста, значит, мы еще не находимся в сеансе tmux, поэтому ...

Если tmux has-session возвращается с нулевым статусом выхода (истина), существует доступный сеанс для подключения. Присоединитесь к нему.

Если нет, создайте новый сеанс.

Также можно использовать tmux в качестве оболочки входа в систему. Однако, если вы это сделаете, убедитесь, что чтобы установить default-shell на фактическую оболочку в вашем файле ~ / .tmux.conf (подробнее см. руководство tmux в об этом).

1
27.01.2020, 19:30

Вы можете (и на данный момент, вероятно, должны) использовать команду chsh , чтобы установить tmux в качестве оболочки по умолчанию, а затем добавьте следующее в .tmux.conf :

set-option -g default-shell /path/to/your/favourite/shell

Просто не забудьте изменить путь в конце строки.

1
27.01.2020, 19:30

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

cmd='[ $TERM == screen ] || exec tmux'
echo -e "$cmd\n$(cat ~/.bashrc)" > ~/.bashrc
0
06.03.2020, 05:27

Следующее решение построено на данных решениях. Это улучшение по сравнению с ними и решает несколько проблем.

  1. Если вы используете DE и пытаетесь использовать «Правый клик > Открыть в терминале», то он откроется в текущем местоположении.

  2. Что произойдет, если у вас несколько клиентов?

В следующем решении:

first client always use session named default0
second client always use session named default1
third client always use session named default2
....

Если вы «Щелкните правой кнопкой мыши > Открыть в терминале», а сеанс не существует, то он откроет новый сеанс в заданном каталоге. если вы «щелкните правой кнопкой мыши> Открыть в терминале» и сеанс существует, он будет прикреплен, а затем cd к $PWD.

function tmux-as-default-terminal () {

  # If we are not inside tmux session 
  if command -v tmux &> /dev/null && [ -n "$PS1" ] && [ -z "$TMUX" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]]  
  then

    notmuxsession=$(tmux list-clients | wc -l)

    if tmux has-session -t default${notmuxsession}
    then
        tmux send-keys -t default${notmuxsession}:0.0 "^U"
        tmux send-keys -t default${notmuxsession}:0.0 "cd $PWD &> /dev/null" ENTER
        tmux send-keys -t default${notmuxsession}:0.0 "^L"
        tmux attach-session -t default${notmuxsession}:0.0
    else
        tmux new-session -s default${notmuxsession} -c $PWD
    fi
  fi

}

tmux-as-default-terminal

П.С. Я несколько дней тестировал этот код, прежде чем опубликовать его здесь. Однако, если вы обнаружите какую-либо ошибку и у вас есть идеи по улучшению, сообщите мне об этом.

1
04.08.2020, 15:36

Добавьте строку ниже в~/.config/fish/conf.d/omf.fish

if not set -q TMUX
    set -g TMUX tmux new-session -d -s base
    eval $TMUX
    tmux attach-session -d -t base
end

Описанное выше работало в Fedora 34. Однако при выходе происходит выход только из tmux, а запущенный сеанс остается активным.

0
04.11.2021, 21:03

Теги

Похожие вопросы