Запуск tmux с использованием gnome-терминала

8670
oneself

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

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

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

7

4 ответа на вопрос

9
Gilles

Запуск чего-либо с .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 $ 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 
Привет, я не хочу запускать tmux при использовании ssh, но спасибо за интересный скрипт. Что касается использования «gnome-terminal -e tmux» из другого терминала (для его проверки), кажется, что он ненадолго открывает новый gnome-терминал, а затем сразу же закрывает его. oneself 14 лет назад 0
@ user33084: Этого не должно быть. Это может быть связано с использованием неправильного файла конфигурации оболочки (например, все переменные среды должны быть определены в `~ / .profile`, а не в` .zshenv` или `.zshrc`, иначе они не будут доступны в таких обстоятельствах, как этот). Что вы увидите, если вы запустите `gnome-terminal -e 'sh -c" tmux; прочитайте строку "'`? Gilles 14 лет назад 0
8
user1055604

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

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

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

5
user1055604

Выполните следующие команды в терминале, чтобы 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
JanC

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