使用 gnome-terminal 启动 tmux

one*_*elf 8 linux terminal ubuntu tmux

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

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

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

use*_*604 10

以下是如何设置 tmux 以使用gnome-terminal启动:

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

这些说明在 Ubuntu 11.04 上对我有用。等效的应该适用于任何风格的 Linux 的 gnome-terminal。


Gil*_*il' 9

启动任何东西.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
Run Code Online (Sandbox Code Playgroud)

另一种通过 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
Run Code Online (Sandbox Code Playgroud)

然后使用如下所示的 ssh 命令:

ssh -t hostname.example.com bin/tmux-login-session SESSION_NAME
Run Code Online (Sandbox Code Playgroud)


use*_*604 6

每次启动gnome-terminal 时,在终端执行以下命令,让tmux运行:

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"
Run Code Online (Sandbox Code Playgroud)

这些命令集使 gnome-terminal 在终端启动时启动 tmux。

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