Как настроить screen так, чтобы он запускался автоматически каждый раз, когда пользователь входит в систему с помощью интерфейса CLI? Если для этого пользователя уже запущен сеанс screen, я бы хотел, чтобы все новые входы прикреплялись к этому сеансу screen. Было бы очень здорово, если бы при присоединении к сеансу screen для каждого нового входа создавалось новое окно.
решение1
Во-первых, для пользователей, для которых вы собираетесь это сделать, убедитесь, что у них ~/.screenrc
есть строка
shell /bin/bash
(или любую другую оболочку, которую в данный момент использует ваш пользователь). Если у вас не установлен этот параметр и вы меняете его оболочку, как мы, пользователь не сможет войти. Вы также можете рассмотреть возможность убрать сообщение при запуске экрана с помощью этой строки
startup_message off
Хорошо, теперь давайте создадим исполняемый скрипт, который прикрепляется к первому уже запущенному сеансу экрана, если он завершается, и если ни один из них еще не запущен, он запускает его. Запустить в терминале
sudo nano /bin/screenlogin.sh
Вставьте две следующие строки:
#!/bin/bash
screen -x -r || screen
Нажмите Ctrl xи затем yсохраните файл. Запустить
sudo chmod 755 /bin/screenlogin.sh
Наконец, запустите его chsh
на целевом пользователе и введите /bin/screenlogin.sh
команду shell, когда появится соответствующий запрос.
решение2
Бег screen -xR
по сути будет иметь тот же эффект, что и бег screen -xr || screen
.
Проблема в том, что, насколько я знаю, нельзя передавать флаги в оболочку входа. Кроме того, наличие чего-то не-оболочки, например, screen, в качестве оболочки входа, вероятно, сломает такие вещи, как SFTP.
Итак, что мы сделаем, так это установим bash в качестве нашей оболочки входа. Затем мы добавим в конец .bashrc (файл, который bash запускает при запуске) код, который запускает screen. Затем Screen запустит любую оболочку, указанную в .screenrc
.
Мы сделаем так, что эта команда будет запускаться только при специальном условии: только если текущая запущенная копия bash не была запущена (возможно, косвенно) другой копией bash. Это сделает так, что если ваш пользователь хочет bash в качестве своей оболочки, и screen запускает bash внутри него, пользователь не получит взрыв матрешек bash внутри screen внутри bash внутри screen внутри bash до тех пор, пока у компьютера не закончится память.
Сначала измените оболочку на /bin/bash, запустив chsh
, затем введя свой пароль, затем набрав его /bin/bash
и нажав Enter.
Затем отредактируйте скрытый .bashrc
файл в вашей домашней папке, добавив в конец следующее:
if [ ${SHLVL} -eq 1 ]; then
((SHLVL+=1)); export SHLVL
exec screen -xR
fi
Теперь отредактируйте (создайте, если не выходит) скрытый файл .screenrc
в домашней папке. Добавьте или отредактируйте следующие настройки:
shell /bin/zsh
startup_message off
(Конечно, если вам нужна какая-то другая оболочка, а не Zsh, смело ставьте ее. Она должна работать даже с bash.)