当我开始一个新的shell会话时,我如何才能使TMUX处于活动状态?

不必每次都inputtmux我怎样才能将tmux始终用于新的会话窗口

所以,如果我没有terminal窗口打开,然后打开一个,那么第一个会话怎么能在tmux

好像是一个.bashrc类的东西?

警告 这可能会破坏你的Ubuntulogin。 请谨慎使用,并确保您在计算机上有第二个pipe理员帐户,以防您遇到同样的问题。 看到我的答案更多的细节和一个不同的方法。

最简单的解决scheme是将tmux调用追加到.bashrc的末尾,例如

 alias g="grep" alias ls="ls --color=auto" # ...other stuff... if [[ ! $TERM =~ screen ]]; then exec tmux fi 

请注意, exec意味着打开terminal时启动的bash进程被replacetmux ,因此Ctrl-B D (即从tmux断开连接)实际上closures了窗口,而不是返回到原来的bash进程,这可能是你想要的行为?

此外, if语句是必需的(它检测当前的bash窗口是否已经在tmux进程中),否则每次启动tmux时,包含的bash进程将尝试启动自己的tmux会话,导致无限数量的嵌套tmuxen这可能是,很呃,很烦人(说,它看起来很酷)。


但是这样做的风险非常小,可以使bash以其他程序不期望的方式运行,因为运行bash可能会导致它变成一个tmux进程,所以最好修改启动terminal的方式模拟器。

我使用了一个小的可执行shell脚本~/bin/terminal (在$PATH~/bin ,所以它会自动find),看起来有点像:

 #!/bin/sh exec gnome-terminal -e tmux 

(我不使用gnome-terminal,所以你可能不得不删除exec ,我不确定。)

现在,无论何时运行terminal scipt,都有一个带有tmux的terminal。 您可以将其添加到您的菜单/桌面/键盘快捷方式,以取代默认terminal。

(这种方法还可以让你更方便地定制关于terminal仿真器的其他内容,如果你有任何愿望的话)。

如果你想有一个单独的tmux会话,把下面的内容放在你的〜/ .bashrc中用于bash或〜/ .zshrc for zsh

 tmux attach &> /dev/null if [[ ! $TERM =~ screen ]]; then exec tmux fi 

tmux attach是为了确定是否有会话连接到,如果没有会话,你将不会得到有关“ 没有会话 ”的警告。

我最初接受的答案是,最近升级后,我的Ubuntu14系统停止工作。

使用任一

 [ -z "$TMUX" ] && command -v tmux > /dev/null && TERM=xterm-256color && exec tmux 

要么

 [ $TERM != "screen" ] && TERM=xterm-256color && exec tmux 

会阻止我甚至无法login。 我只能通过在计算机上进行第二次pipe理login来解决此问题。

Ubuntu上的修复程序(也是在osx中​​)是改变我的terminal程序来实际运行tmux

在这里输入图像说明

我还有

 [ `uname -s` != Linux ] && exec tmux 

作为我最后的.bashrc行,但他现在只有我的Mac OSX系统。

对于我来说,我喜欢每次在远程计算机上进行shell程序启动时的tmux,并且当我从tmux中分离或退出时,连接应该自动closures。 在深入研究这个问题一段时间后,下面的代码完全符合我的要求,并据我所知是最优化的。

 [ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;} 

注意这行应该是你的bashrc文件中的第一行,以确保它首先被加载。 我们不能在“tmux attach”前面加一个“exec”调用,因为在exec使用tmuxreplace了bash进程之后,即使没有会话连接,连接也会被closures。 因此,我们需要一个“退出”呼叫来终止连接后,我们分离或退出附加的会议。 但是在新会话命令前面放置一个“exec”就好了,因为这是最后一个要执行的命令。

将以下代码行追加到.bashrc的末尾,

 [[ $TERM != "screen" ]] && exec tmux 

单线也确保terminaltypes正确设置为256色:

 [ -z "$TMUX" ] && export TERM=xterm-256color && exec tmux 

要为login和ssh会话启用tmux,可以将其添加到.bashrc的末尾:

 # enable tmux at login PNAME="$(ps -o comm= $PPID)"; if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] ; then exec tmux fi 

这个脚本查找bash shell的父进程。 如果bash从sshlogin或启动,它将执行tmux。 如果你想要这个GUIterminal的工作,你可以在那里添加。 例如,如果你想在启动Ubuntu的标准gnome-terminal时自动启动tmux,你可以使用下面的命令:

 PNAME="$(ps -o comm= $PPID)"; if [ $PNAME == "login" ] || [ $PNAME == "sshd" ] || [ $PNAME == "gnome-terminal" ] ; then exec tmux fi 

我已经在Live Ubuntu Desktop上testing了上述内容,之后我就可以login了。 这不应该打破GUIlogin,除非它调用login命令login。我不知道这样做的Linux GUI。

我开始使用这个https://wiki.archlinux.org/index.php/Tmux#Bash,并加强它回收分离的会议,如果所有的会议已经附加,新的;

 # .bashrc case $- in *i*) if command -v tmux>/dev/null; then if [[ ! $TERM =~ screen ]] && [[ -z $TMUX ]]; then if tmux ls 2> /dev/null | grep -q -v attached; then exec tmux attach -t $(tmux ls 2> /dev/null | grep -v attached | head -1 | cut -d : -f 1) else exec tmux fi fi fi ;; esac 

如何添加

 # If not running interactively, do not do anything [[ $- != *i* ]] && return [[ -z "$TMUX" ]] && exec tmux 

到你的.bashrc。 它也适用于zsh。

取自https://wiki.archlinux.org/index.php/Tmux#Start_tmux_with_default_session_layout

我只是把它做成了键盘快捷键(在Linux Mint中不是Ubuntu;所以我不确定这是否容易)…


定制tmux终端的快捷方式


这可能很难看,但自定义的快捷方式gnome-terminal --window --maximize -e tmux 。 这将启动一个新的gnome-terminal窗口最大化,然后exec你的tmux

另外我还有另外一个自定义的快捷方式来启动一个“正常的” gnome-terminal最大化(没有-e tmux也是一样的)。

我觉得这是最好的方法,因为你可以以任何你想要的方式启动任何terminal,并且是最可定制的方式。

在xfce4(我正在运行Fedora 24 XFCE自旋,这很好),我发现最简单的解决scheme是编辑面板快捷方式,以便他们运行:

xfce4-terminal -e tmux

这个相同的命令可以用来replace键盘应用程序快捷方式。

我曾经在我的.bashrc中插入了一个if语句,但是它导致login失败(只要input了正确的密码,就会循环回login框)。

Thunar的Open Terminal Here命令的命令略有不同。 要改变这个转到:

Thunar>编辑>configuration自定义操作…>在此处打开terminal>编辑button,并replace:

exo-open –working-directory%f – 启动TerminalEmulator

用:xfce4-terminal –working-directory%f -e tmux