だからここに私が欲しいものがあります:
fbterm
が開始されます。 Linuxコンソールよりも優れた解像度を提供し、UTF-8をサポートしています(Linuxコンソールにこれら2つがないのは完全に私のせいですが、動作させることはできません)。より多くのウィンドウにアクセスできます(fbterm
ごとに10個)。fbterm
ウィンドウで、tmux
が実行されています。 fbterm
インスタンス間のセッションは完全に独立していますが、各fbterm
ウィンドウで、tmux
esは同じウィンドウのセットを共有します(ただし、異なるウィンドウを表示します)。苦労した後、私はこれを達成することができました-私はこの質問に自分で答えるつもりです。同様のことをしたことがありますか、それともこれをどのように解決しますか?
これは私が今持っているものです、私はそれをテストしました、そしてそれは働いています:
#!/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
)から実行します。当初の意図は、このスクリプトをログインシェルとして直接使用することでしたが、現在は不安定です(私のアカウントでは機能し、新しく作成されたダミーテストアカウントでは機能しません)。
それがあなたが探している答えかどうかはわかりませんが、私はお互いの邪魔をせずにfbtermとtmuxを自動起動させるのに苦労しています。 .profileのこれは私のためにトリックをしました:
if [[ ! $TERM =~ screen ]]; then
Shell=tmux fbterm
fi
私は.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(可能な場合)が開き、新しいインタラクティブシェルでtmuxが開きます。指定された名前のtmuxセッションが存在する場合はアタッチし、存在しない場合は作成します。