web-dev-qa-db-ja.com

Linux:ログイン時にfbterm内でtmuxを起動します

だからここに私が欲しいものがあります:

  • Ttyにログインするたびに、fbtermが開始されます。 Linuxコンソールよりも優れた解像度を提供し、UTF-8をサポートしています(Linuxコンソールにこれら2つがないのは完全に私のせいですが、動作させることはできません)。より多くのウィンドウにアクセスできます(fbtermごとに10個)。
  • fbtermウィンドウで、tmuxが実行されています。 fbtermインスタンス間のセッションは完全に独立していますが、各fbtermウィンドウで、tmuxesは同じウィンドウのセットを共有します(ただし、異なるウィンドウを表示します)。

苦労した後、私はこれを達成することができました-私はこの質問に自分で答えるつもりです。同様のことをしたことがありますか、それともこれをどのように解決しますか?

2

これは私が今持っているものです、私はそれをテストしました、そしてそれは働いています:

#!/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)から実行します。当初の意図は、このスクリプトをログインシェルとして直接使用することでしたが、現在は不安定です(私のアカウントでは機能し、新しく作成されたダミーテストアカウントでは機能しません)。

2

それがあなたが探している答えかどうかはわかりませんが、私はお互いの邪魔をせずにfbtermとtmuxを自動起動させるのに苦労しています。 .profileのこれは私のためにトリックをしました:

if [[ ! $TERM =~ screen ]]; then
   Shell=tmux fbterm
fi
0
MajorBriggs

私は.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セッションが存在する場合はアタッチし、存在しない場合は作成します。

0
Ryan Lue