Linux: Запустите tmux внутри fbterm при входе в систему
Итак, вот что я хочу:
- При каждом входе в систему,
fbterm
начинается. Он дает мне лучшее разрешение, чем консоль linux, имеет работающую поддержку UTF-8 (я уверен, что я полностью виноват, что консоль linux не имеет этих двух, но я не могу заставить ее работать), и дает мне доступ к большему количеству окон (10 заfbterm
). - В каждом
fbterm
окно,tmux
бежит. Сессии междуfbterm
экземпляры полностью независимы, но в каждомfbterm
окноtmux
Они имеют один и тот же набор окон (но показывают разные окна).
После некоторой борьбы мне удалось этого добиться - я собираюсь ответить на этот вопрос сам. Вы сделали что-то подобное, или как бы вы решили это?
3 ответа
Вот то, что у меня сейчас, я проверил, и это работает:
#!/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
). Первоначально предполагалось напрямую использовать этот сценарий в качестве оболочки для входа, но в настоящее время он нестабилен (работает для моей учетной записи, не работает для вновь созданной фиктивной тестовой учетной записи).
Я использую следующее в моем .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 с указанным именем, если оно существует, или создаст его, если нет.
Не уверен, что это ответ, который вы ищете, но я изо всех сил пытался заставить fbterm и tmux автоматически запускаться, не мешая друг другу. Это в.profile сделал трюк для меня:
if [[ ! $TERM =~ screen ]]; then
SHELL=tmux fbterm
fi