Назад | Перейти на главную страницу

Разрешить использование экрана без возможности отключения сеансов

Мне интересно, возможно ли это. Я бы хотел, чтобы пользователи могли запускать screen на некоторых из наших хостов с целью мультиплексирования сеансов входа в терминал. Однако я не хочу, чтобы они могли отсоединять экран и оставлять его работающим в фоновом режиме.

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

Вы можете "мягко" отключить отсоединение, поставив

bind d

в .screenrc, который удаляет привязку клавиш ^ A D по умолчанию для отсоединения. Или, может быть

bind d echo Don't detach screens, it won't work because of the cluster.

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

echo autodetach off >> ~/.screenrc

Прочтите экранную справочную страницу для autodetach. Это гарантирует, что он просто убьет все, если их соединение отключено.

Вам все равно понадобятся другие упомянутые решения ...

Вот взломать вы можете поместить в сценарий bash и запускать каждую минуту с cron, чтобы убить отдельные сеансы. Но не самое чистое решение :-P

screen -S $(screen -ls | grep Detached | awk '{ print $1}') -X kill

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

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

Идея сценария: перебрать серверы, grepдобыча who, а затем авторизация пользователя на сервере, который сообщает, что он вошел первым; в противном случае зарегистрируйте их как сейчас (чтобы обработать, когда пользователь выходит из системы чисто).