Запустить экран 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

Это будет

  1. checks for interactive (only run screen when interactive, otherwise it automated programs will fail (eg scp, WinSCP)
  2. checks that STY is not set (if STY is set then screen is already running for this shell)
  3. Проверь это screen is found in the PATH

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"
Другие вопросы по тегам