Это хорошая идея, чтобы поместить «screen -r» в мой .bashrc?

17

Я хотел бы использовать экран, чтобы сохранить сеансы SSH на моем сервере. Было бы хорошо, если бы я мог автоматически возобновить любой сеанс работы для моего пользователя при входе в систему. Простой способ сделать это - добавить «screen -r» в мой .bashrc, и это, похоже, работает нормально. Мне просто интересно, сломается ли что-нибудь в условиях, которые я еще не проверял. Кто-нибудь с опытом здесь, кто может сказать мне, это то, что я должен делать?

marcusw
источник

Ответы:

20

Вам необходимо screen -R -dавтоматически подключиться к существующему сеансу, если таковой существует, и создать сеанс в противном случае.

Убедитесь, что вы делаете это только на интерактивных оболочках . Bash исходники ~/.bashrcдаже для неинтерактивных оболочек, когда его родительским процессом является rshd или sshd (это упоминается в документации, но его легко пропустить). Вы можете сказать, что оболочка является интерактивной, потому что $-содержит i.

case $- in
  *i*) screen -Rd;;
esac

Это не позволит вам легко запускать разные сеансы экрана в разных терминалах.

Вам нужно отсоединиться от экрана, а затем выйти из родительской оболочки, чтобы выйти из системы. Это можно решить, используя exec screenвместо screen.

Если вы запустите оболочку, отличную от оболочки входа в систему, вы попадете на экран, а это не то, что вам нужно в большинстве случаев. Я бы по крайней мере ограничил это тем, когда вы работаете непосредственно в интерактивном сеансе SSH, с чем-то вроде следующего ~/.bash_profile:

case "/$(ps -p $PPID -o comm=)" in
  */sshd) screen -R -d;;
esac

Будьте осторожны, когда вы делаете сложные вещи, так .bashrcкак ошибка, которая приводит к выходу оболочки, затруднит вход в систему.


Я рекомендую не изменять файлы инициализации оболочки на сервере, а вместо этого запускать экран явно из клиента, как в

ssh -t host.example.com screen -R -d

(Вы, вероятно, создадите псевдоним оболочки или ярлык среды рабочего стола на клиенте.) Таким образом, вы можете легко не запускать экран, указывать альтернативное имя сеанса и т. Д.

Жиль "ТАК - перестань быть злым"
источник
Отлично. Должно быть в справочной странице.
Marcusw
Не лучше ли запустить ssh screen -D -Rили хотя бы screen -D -RR?
ниутех
2

Сценарии запуска вашего X-сервера часто запускают новую оболочку, например, если вы входите в систему, используя gdm, используя «Определенную пользователем сессию».

Я думаю, что все, что не выходит, может привести к зависанию вашего запуска X. Это будет включатьscreen -r .

Mikel
источник
Скрипты запуска X-сервера не запускаются .bashrc. Но есть и другие обстоятельства, в которых это может быть проблемой, например, при запуске ssh host.example.com somecommand(странно, тогда bash запускается .bashrc).
Жиль "ТАК - перестань быть злым"
Это в некоторых дистрибутивах, если вы выбираете «Сеанс, определенный пользователем». В Ubuntu он явно получает .profile, другие вызывают .xsession из оболочки входа в систему, что обычно означает .bash_profile, а большинство пользователей получают .bashrc изнутри своего .bash_profile.
Микель