这就是我想要的:
- 每次 tty 登录时,
fbterm
都会启动。它为我提供了比 Linux 控制台更好的分辨率,具有有效的 UTF-8 支持(我确信 Linux 控制台没有这两个功能完全是我的错,但我无法让它工作),并且允许我访问更多窗口(每个 10 个fbterm
)。 - 在每个
fbterm
窗口中,tmux
都在运行。实例之间的会话fbterm
完全独立,但在每个fbterm
窗口中,tmux
es 共享同一组窗口(但显示不同的窗口)。
经过一番努力,我终于做到了这一点——我打算自己回答这个问题。你做过类似的事情吗,或者你会如何解决这个问题?
答案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