Как мне создать одну сессию экрана для каждого пользователя и установить ее в качестве оболочки входа?

Как мне создать одну сессию экрана для каждого пользователя и установить ее в качестве оболочки входа?

Как настроить 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.)

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