我如何才能为每个用户创建一个屏幕会话并将其设置为登录 shell?

我如何才能为每个用户创建一个屏幕会话并将其设置为登录 shell?

如何设置屏幕,使其在用户使用 CLI 界面登录时自动运行?如果该用户已在运行屏幕会话,我希望任何新登录都附加到该屏幕会话。如果在附加到屏幕会话时为每个新登录创建一个新窗口,那就太好了。

答案1

首先,对于你要执行此操作的用户,请确保他们~/.screenrc有以下行

shell /bin/bash

(或用户当前使用的任何其他 shell)。如果您没有设置此设置,并且像我们一样更改了他们的 shell,则用户将无法登录。您也可以考虑使用以下行让屏幕启动消息消失

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

问题是,据我所知,您无法将标志传递给登录 shell。此外,使用非 shell 程序(如 screen)作为登录 shell 可能会破坏 SFTP 之类的功能。

因此,我们要做的是将 bash 设置为我们的登录 shell。然后,我们将在 .bashrc(启动时 bash 运行的文件)末尾添加运行 screen 的代码。然后 Screen 将运行 中指定的任何 shell .screenrc

我们将使此命令仅在特殊条件下运行:仅当当前正在运行的 bash 副本尚未由另一个 bash 副本启动(可能间接启动)时。这样,如果用户希望将 bash 作为其 shell,并且 screen 在其中启动 bash,则用户不会在计算机内存耗尽之前看到 bash 在 screen 中在 bash 中在 screen 中在 bash 中在 bash 中的俄罗斯娃娃爆炸。

首先,通过运行将 shell 更改为 /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 以外的其他 shell,请继续输入它。它甚至可以与 bash 一起使用。)

相关内容