Запустить экран GNU автоматически
Я хочу запускать экран gnu автоматически при входе на удаленный компьютер через ssh, поэтому я добавляю
exec screen
в конце файла.bash_profile я узнаю, что когда я прекращаю проверку, мое соединение с хостом ssh также немедленно закрывается. Как я могу избежать этого?
В случае, если я хочу возобновить экран (например, с именем 'old-screen'), потому что я начинаю проверять каждый раз, когда я вхожу в систему, я сталкиваюсь с ситуацией, когда я присоединяюсь к 'new-screen', и я хочу снова присоединиться к 'старый экран. Если я просто
screen -r old-screen
Я нахожусь на рекурсивном экране, и я не могу перемещаться по "старому экрану", потому что все сочетания клавиш получаются с помощью "нового экрана". Если я попытаюсь выйти из текущего экрана, мое подключение к удаленному компьютеру также будет немедленно потеряно.
Любое решение для этого?
5 ответов
Вместо того, чтобы использовать screen -r
который пытается возобновить сеанс экрана, вы можете использовать screen -R
который пытается возобновить сеанс экрана и создает новый, если он не существует.
-r [pid.tty.host]
-r sessionowner/[pid.tty.host]
resumes a detached screen session. No other options (except com-
binations with -d/-D) may be specified, though an optional prefix
of [pid.]tty.host may be needed to distinguish between multiple
detached screen sessions. The second form is used to connect to
another user's screen session which runs in multiuser mode. This
indicates that screen should look for sessions in another user's
directory. This requires setuid-root.
-R attempts to resume the first detached screen session it finds. If
successful, all other command-line options are ignored. If no
detached session exists, starts a new session using the specified
options, just as if -R had not been specified. The option is set
by default if screen is run as a login-shell (actually screen uses
"-xRR" in that case). For combinations with the -d/-D option see
there.
Лично я склонен использовать screen -DRA
,
-D -R Attach here and now. In detail this means: If a session is run-
ning, then reattach. If necessary detach and logout remotely
first. If it was not running create it and notify the user.
This is the author's favorite.
-A Adapt the sizes of all windows to the size of the current termi-
nal. By default, screen tries to restore its old window sizes
when attaching to resizable terminals (those with "WS" in its
description, e.g. suncmd or some xterm).
Следующее, кажется, работает для меня в моем: ~ /.bash_profile
## если $STY не установлен... if [ -z "$STY" ]; затем screen -d -RR фи
Я взял ответ отсюда: /questions/815736/ispolzovat-ekran-gnu-kak-login-shell/815747#815747
но вместо того, чтобы создавать новый экран каждый раз, когда он заново запускает сеанс или создает его в случае необходимости. Также кажется, что ни ssh-соединение не завершается, когда экран снова подключен или закрыт.
Я часто обдумывал одно и то же.
Самое близкое, что я придумал, - это запуск экрана как часть команды ssh для подключения к удаленному серверу:
$ ssh -t foo@bar.com screen -r
или в шпатлевку введите screen -r
в Remote command
окно настроек SSH.
Я склонен псевдоним нескольких команд ssh для разных хостов и разных сеансов экрана.
Добавьте это к ~/.bash_profile
,
if [ $- = *i* ] && [ -z "${STY+x}" ] && which screen &>/dev/null; then
exec screen -RR -U
fi
Это будет
- checks for interactive (only run
screen
when interactive, otherwise it automated programs will fail (eg scp, WinSCP) - checks that
STY
is not set (ifSTY
is set thenscreen
is already running for this shell) - Проверь это
screen
is found in thePATH
And lastly run screen
с опцией -R
to resume an unattached session, if no unattached sessions then start a new session.
Начните screen
after importing ~/.bashrc
, например
if [ -f ~/.bashrc ]; then
source ~/.bashrc
fi
if [ $- = *i* ] && [ -z "${STY+x}" ] && which screen &>/dev/null; then
...
Может ли ваша ОС поддерживать переключатели командной строки с определением команды оболочки в параметре "login" для вашей учетной записи? Если это так, попробуйте изменить его на:
- / path / to / bash -c "screen -R"