我想知道这是否可能。 我希望用户能够在我们的一些主机上启动屏幕,以便复用他们的terminallogin会话。 但是,我不希望他们能够分离屏幕,并让它在后台运行。
这是因为login这些机器的唯一方法是通过一个集群作业提交系统,所以如果一个屏幕变得分离,用户注销唯一的方法是如果他们碰巧返回同一个节点在他们的下一个工作提交。
echo autodetach off >> ~/.screenrc
阅读屏幕手册页以获取autodetach。 这将确保它只是简单地杀死所有的连接被禁用。
你仍然需要提到的其他解决scheme…
你可以做一个“软”禁用分离通过放置
bind d
在.screenrc ,它删除了用于分离的默认^ AD键绑定。 或者可能
bind d echo Don't detach screens, it won't work because of the cluster.
要强制禁用分离(包括命令行表单),需要分叉你自己的screen版本并编写出能力。 哪个,你知道,可以做,它是一个开源项目和所有。
这里是一个黑客,你可以把它放到一个bash脚本中,用cron运行每一分钟来杀死分离的会话。 不是最干净的解决scheme:-P
screen -S $(screen -ls | grep Detached | awk '{ print $1}') -X kill
他们总是能够断开而不closures他们的terminal,除非你自动杀入屏幕当然。
由于分离屏幕使用户login,您可以在login脚本中添加一个检查来查看用户已经login到哪个服务器。 这将比停用detach更有效,但对用户来说更有用。
对于脚本的一个想法是:遍历服务器,清点who ,然后将用户login到报告他们login的服务器; 否则,请按照他们现在的方式login(在用户完全注销时处理)。