Стоит ли добавлять «screen -r» в мой .bashrc?

Стоит ли добавлять «screen -r» в мой .bashrc?

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

решение1

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

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

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

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

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

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

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

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


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

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

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

решение2

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

Я думаю, что все, что не завершается, может привести к зависанию запуска X. Это касается и screen -r.

Связанный контент