8

Я немного запутался в том, как запускать tmux. Когда я запускаю свой терминал (текущий gnome-терминал), я бы хотел, чтобы tmux был запущен и запущен.

В настоящее время я делаю это, вызывая "tmux" в моем .zshenv (вроде как .bashrc в bash). Это фактически запускает tmux, но имеет некоторые раздражающие побочные эффекты. Во-первых, нажатие Ctrl-D для выхода из оболочки только убивает tmux и оставляет бездействующий терминал gnome без терминала. Дополнительный Ctrl-D также убьет это. Во-вторых, когда ssh попадает в коробку с этой настройкой, я получаю второй вложенный экземпляр tmux. Я не хочу, чтобы tmux запускался снова, когда я ssh.

Это правильный подход, как обычно запускать tmux?

4 ответа4

9

Запуск чего-либо из .zshenv - определенно неправильный подход. Этот файл выполняется каждым экземпляром zsh , даже при запуске скрипта. Используйте .zshrc для вещей, которые должны быть выполнены в интерактивных оболочках, и .profile (или .zprofile , если вы установили zsh в качестве оболочки входа в систему) для вещей, которые следует делать при входе в систему.

Если вы хотите использовать tmux в каждом терминале, запустите tmux непосредственно под терминалом, например, gnome-terminal -e tmux (измените ваш графический интерфейс для передачи этих аргументов). Вы можете передавать аргументы даже с -e (хотя будьте осторожны с цитированием), например, gnome-termminal -e 'tmux -s ~/.alternate.tmux.conf' .

Если вы также хотите запустить tmux при входе через ssh, вам придется запустить его из своего ~/.profile . Делайте это только в том случае, если родительским процессом оболочки входа является sshd:

parent_process_name=$(ps -o comm= -p $PPID`)
case ${parent_process_name##*/} in
  sshd) type tmux >/dev/null 2>/dev/null && exec tmux;;
esac

Другой подход к запуску tmux через ssh - получить имя сеанса из среды. Таким образом, вы можете присоединиться к существующему сеансу. Самый простой способ - написать небольшой скрипт на стороне сервера, например ~/bin/tmux-login-session:

#!/bin/sh
if tmux has-session -t "$1"; then
  exec tmux attach-session -t "$1"
else
  . ~/.profile
  exec tmux new-session -s "$1"
fi

Затем используйте команду ssh, как показано ниже:

ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME
8

Вот как можно настроить запуск tmux с помощью gnome-терминала:

  1. Запустить гном-терминал
  2. Меню> Правка> Настройки профиля> Название и команда (вкладка)
  3. Установите флажок Выполнить пользовательскую команду вместо моей оболочки
  4. Заполните пользовательскую команду с помощью tmux

Эти инструкции работают для меня на Ubuntu 11.04. Эквивалент должен работать для gnome-терминала для любой разновидности Linux.

5

Выполните следующие команды в терминале, чтобы tmux запускался каждый раз, когда вы запускаете gnome-терминал:

gconftool --type string --set /apps/gnome-terminal/profiles/Default/custom_command "tmux"
gconftool --type bool --set /apps/gnome-terminal/profiles/Default/use_custom_command "true"

Этот набор команд заставляет gnome-терминал запускать tmux при запуске терминала.

  • Это приведет к тому, что gnome-терминал завершит работу при выходе из tmux.
  • В любом случае это не будет мешать работе с ssh или входу в систему, так как это настройка терминала gnome.
  • Кроме того, вы можете использовать все ярлыки gnome-терминала, которые вы закрепили на рабочем столе, и запускать его из командной строки при запущенном tmux, так что вам не нужно создавать собственные ярлыки для этого поведения.
0

Ctrl+D выходит из текущей оболочки, он не выходит из вашего эмулятора терминала (если ваша текущая оболочка не является первым процессом, запущенным внутри эмулятора терминала). Если вы хотите выйти из gnome-terminal , вы можете использовать Alt+F4 или Shift+Ctrl+Q

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .