У Вас есть МОТ или какая-либо другая установка инструмента управления по дополнительному каналу? Вы можете получать доступ командной строки. Если Ваш инструмент OODM не поддерживает доступ командной строки, необходимо смочь, по крайней мере, вызвать перезагрузку на удаленной машине, загрузить подходящее живое изображение CD прочь сетевого ресурса через сервер PXE, соединиться с живым CD через SSH, смонтировать локальный жесткий диск и затем сделать соответствующие изменения конфигурации.
Кроме этого, я не могу думать о способе восстановить машину без физического доступа.
Это, кажется, работает...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Просто добавьте следующую строку кода удара к Вашему .bashrc перед Вашими псевдонимами; код для других оболочек очень похож:
[[ $TERM != "screen" ]] && exec tmux
Существует команда chsh
который изменяет оболочку входа в систему. Консультироваться man chsh
.
tmux
не оболочка, это - оконечный мультиплексор как экран GNU. Интересно, это действительно поддерживает -c
опция согласно странице справочника, таким образом, это может работать как оболочка как раз для использования его в качестве оболочки входа в систему, но я подозреваю это, не будет работать правильно во всех ситуациях, например, графических логинах через gdm/kdm.
– Mikel
20.07.2012, 18:32
ssh $some_server echo foo
).
– n.st
11.05.2014, 05:11
/etc/shells
, таким образом, это - допустимая оболочка входа в систему.
– claytron
26.03.2015, 19:14
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 документация удара не очень точно о том, какой файл читается и выполняется когда.
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
Ссылки
command
проверять на существование команды - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
вместо which
проверять на существование команд - https://unix.stackexchange.com/a/85250$PS1
проверять на интерактивную оболочку - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
переменная среды "для всех программ, работающих внутри tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommand
прежде, но не понял, что это существовало.
– Freedom_Ben
21.06.2015, 03:25
exec
оператор не позволяет Вам выйти из tmux, не выходя из всего терминала! :|
– Louis Maddox
02.08.2015, 23:43
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
не производит никакого вывода.
Добавьте это в свой ~/.tmux. conf
set -g default-command /usr/local/bin/fish
Ни один из вышеперечисленных ответов не помог мне - 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
Вы можете обернуть все это в одну строку, но для удобства чтения я думаю, что это нормально.
Добавляя к ответу @Louis Maddox, я бы выполнил tmux part with;
(exec tmux attach || exec tmux new-session)
Перейдите к настройкам терминала.
А затем щелкните "командную" панель.
Установите флажок "Выполнить пользовательскую команду вместо моей продажи" "и напишите любую команду, которую хотите выполнить при запуске вашего терминала.
Добавление строки вроде
[ -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 для подключения.
Это в моем ~ / .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 в об этом).
Вы можете (и на данный момент, вероятно, должны) использовать команду chsh
, чтобы установить tmux в качестве оболочки по умолчанию, а затем добавьте следующее в .tmux.conf
:
set-option -g default-shell /path/to/your/favourite/shell
Просто не забудьте изменить путь в конце строки.
это делает tmux открытым по умолчанию во всех новых оболочках пользователя
cmd='[ $TERM == screen ] || exec tmux'
echo -e "$cmd\n$(cat ~/.bashrc)" > ~/.bashrc
Следующее решение построено на данных решениях. Это улучшение по сравнению с ними и решает несколько проблем.
Если вы используете DE и пытаетесь использовать «Правый клик > Открыть в терминале», то он откроется в текущем местоположении.
Что произойдет, если у вас несколько клиентов?
В следующем решении:
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
П.С. Я несколько дней тестировал этот код, прежде чем опубликовать его здесь. Однако, если вы обнаружите какую-либо ошибку и у вас есть идеи по улучшению, сообщите мне об этом.
Добавьте строку ниже в~/.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, а запущенный сеанс остается активным.
[[ $- != *i* ]] && return
к тому, чтобы не быть бесконечным циклом (от той же страницы) – Keith Smiley 14.04.2013, 04:45TERM
мог бы быть установлен на некоторое другое значение пользователем.tmux.conf
файл. Лучше проверять лиTMUX
переменная установлена или нет. – Kusalananda♦ 30.12.2016, 15:21