Я дозрел, наконец, начать запускать screen автоматом на удалённых серверах (пока сам, без
сына). Начал
отсюда, благо там эта проблема уже разжёвана. И быстро наткнулся, что тамошнее решение мне надо допиливать в самую неожиданную сторону.
Тут же выяснилось, что fix_ssh_auth_sock мне не нужен совсем, у меня этот сокет и так зафиксирован, благо я пользуюсь не ssh-agent, а gpg-agent, и сокет у меня ~/.gnupg/S.gpg-agent.ssh.
Далее, if [ -n "$SSH_CONNECTION" ]; then exec screen -xRR; fi. Проблема оказалась в том, что bash выполняет .profile и в интерактивном, и в неинтерактивном шеллах, а в неинтерактивном screen совсем не нужен. Например, в ssh -t host command, или когда ssh используется как транспорт для git или rsync. Пришлось добавить в .profile проверки на интерактивность. В результате хвост моего .profile стал выглядеть так:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return ;;
esac
# Stop if non-interactive shell
[ -z "$PS1" ] && return
if [ -n "$SSH_CONNECTION" -a -z "$STY" -a -t 0 ] &&
which screen >/dev/null 2>&1
then
exec screen -xRR -S default
fi
Полностью можно посмотреть в
https://phdru.name/Software/dotfiles/ и
https://git.phdru.name/dotfiles.git/ Upd. Я вернул прежний .profile, т.е. удалил запуск screen. Вместо этого я делаю запуск screen вместе с терминалом и ssh:
rxvt-unicode -e ssh -t remote_host exec screen -xRR -S default
Репост из DW не работает, так что
копирую.