Linux:登录时在 fbterm 内启动 tmux

Linux:登录时在 fbterm 内启动 tmux

这就是我想要的:

  • 每次 tty 登录时,fbterm都会启动。它为我提供了比 Linux 控制台更好的分辨率,具有有效的 UTF-8 支持(我确信 Linux 控制台没有这两个功能完全是我的错,但我无法让它工作),并且允许我访问更多窗口(每个 10 个fbterm)。
  • 在每个fbterm窗口中,tmux都在运行。实例之间的会话fbterm完全独立,但在每个fbterm窗口中,tmuxes 共享同一组窗口(但显示不同的窗口)。

经过一番努力,我终于做到了这一点——我打算自己回答这个问题。你做过类似的事情吗,或者你会如何解决这个问题?

答案1

这是我现在所拥有的,我已经测试过了并且它可以正常工作:

#!/bin/sh
if [[ -n "$TMUX" ]]; then
    echo "CRITICAL - ALREADY INSIDE TMUX!"
    echo "Dropping you into /bin/sh..."
    /bin/sh -i
    echo "Exiting with /bin/sh exit code..."
    exit $?
fi
SESSION="$(whoami)-$(basename $(tty))";
# Start tmux server if it isn't already running
echo "Starting tmux server..."
/usr/bin/tmux start-server
echo "tmux server started."
# Create the session if it doesn't exist
echo "Checking for tty session..."
if /usr/bin/tmux has-session -t "$SESSION" 2> /dev/null; then
    echo "tty session already present, will spawn new window later."
else
    echo "Creating tty session..."
    /usr/bin/tmux new-session -d -s "$SESSION" -n "$SESSION-dummywindow" /bin/bash
    echo "tty session created."
fi
# Create a new session that shares the windows of the existing (or new) session
echo "Starting fbterm and tmux..."
( sleep 1; /usr/bin/tmux kill-window -t "$SESSION-dummywindow" ) &
/usr/bin/fbterm -- /usr/bin/tmux new-session -t "$SESSION" \; new-window /bin/bash;

将其放入某个文件中,使其可执行,然后从您的.profile(或.bash_profile)运行它。最初的意图是直接使用此脚本作为您的登录 shell,但目前还不稳定(对我的帐户有效,对新创建的虚拟测试帐户无效)。

答案2

我在我的中使用了以下内容.bashrc,我相信它实现了几乎相同的功能:

if [ -z "$SSH_CONNECTION" ]; then
  # if in virtual terminal, start fbterm
  if [[ "$(tty)" =~ /dev/tty ]] && type fbterm > /dev/null 2>&1; then
    fbterm
  # otherwise, start/attach to tmux
  elif [ -z "$TMUX" ] && type tmux >/dev/null 2>&1; then
    tmux new -As "$(basename $(tty))"
  fi
fi

这将打开 fbterm(如果可能),然后在任何新的交互式 shell 中打开 tmux。如果存在,它将连接到具有指定名称的 tmux 会话,如果不存在,则创建一个。

答案3

不确定这是否是您要找的答案,但我一直在努力让 fbterm 和 tmux 自动启动而不会互相干扰。 .profile 中的这个对我有用:

if [[ ! $TERM =~ screen ]]; then
   SHELL=tmux fbterm
fi

相关内容