使用 gnome-terminal 启动 tmux

使用 gnome-terminal 启动 tmux

我对如何启动 tmux 有点困惑。当我启动我的终端(当前的 gnome-terminal)时,我希望 tmux 能够启动并运行。

我目前通过在 .zshenv 中调用“tmux”来执行此操作(有点像 bash 中的 .bashrc)。这确实会启动 tmux,但有一些令人讨厌的副作用。首先,按 Ctrl-D 退出 shell,只会杀死 tmux,而没有 tmux 的 gnome-terminal 仍在运行。再按一次 Ctrl-D 也会杀死它。其次,当通过 ssh 进入具有此设置的框时,我会得到第二个嵌套的 tmux 实例。我不希望 tmux 在 ssh 时再次启动。

这是正确的方法吗?通常应该如何启动 tmux?

答案1

从 启动任何东西都.zshenv绝对是错误的方法。 的每个实例都会执行此文件zsh,即使在运行脚本时也是如此。 用于.zshrc应该在交互式 shell 中完成的事情,以及.profile(或.zprofile,如果您已将 zsh 设置为您的登录 shell)用于应该在登录时完成的事情。

如果您想在每个终端中使用 tmux,请直接在终端下启动 tmux,例如gnome-terminal -e tmux(更改您的 GUI 启动器以传递这些参数)。您甚至可以传递参数-e(但要小心引用),例如gnome-termminal -e 'tmux -s ~/.alternate.tmux.conf'

如果你还想在通过 ssh 登录时启动 tmux,则必须从 启动它~/.profile。仅当登录 shell 的父进程是 时才执行此操作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

通过 ssh 启动 tmux 的另一种方法是从环境中获取会话名称。这样您就可以附加到现有会话。最简单的方法是在服务器端编写一个小脚本,例如~/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

答案2

以下是如何设置 tmux 以使用gnome 终端

  1. 启动 gnome-terminal
  2. 菜单 > 编辑 > 配置文件首选项 > 标题和命令(选项卡)
  3. 查看运行自定义命令而不是我的 shell
  4. 填充自定义命令tmux

这些说明适用于我在 Ubuntu 11.04 上的工作。等效说明应该适用于任何 Linux 版本的 gnome-terminal。

答案3

在终端执行以下命令即可获得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-terminal 在终端启动时启动 tmux。

  • 当您退出 tmux 时,这将导致 gnome-terminal 退出。
  • 由于它是一个 gnome 终端设置,它不会干扰 ssh 或登录。
  • 此外,您可以使用固定在桌面上的 gnome-terminal 的所有快捷方式,并在运行 tmux 的情况下从命令行启动它,因此您不需要为此行为创建自定义快捷方式。

答案4

在终端选项中将其添加为自定义命令 - bash -c 'tmux attach || tmux new'

这将尝试连接到任何现有的 tmux 会话。如果不存在,它将启动一个新会话并连接到它。

相关内容