如何為每個使用者指派一個螢幕會話並將其設定為登入 shell?

如何為每個使用者指派一個螢幕會話並將其設定為登入 shell?

如何設定 screen,使其在使用者使用 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。另外,使用 screen 等非 shell 作為登入 shell 可能會破壞 SFTP 等功能。

因此,我們要做的就是將 bash 設定為我們的登入 shell。然後我們將在 .bashrc(啟動時運行 bash 檔案)的末尾添加運行 screen 的程式碼。然後,Screen 將運行 中指定的任何 shell .screenrc

我們將使該命令僅在特殊條件下運行:僅噹噹前運行的 bash 副本尚未由 bash 的另一個副本啟動(可能是間接啟動)時。這將使如果您的用戶想要 bash 作為他們的 shell,並且屏幕在其中啟動 bash,用戶將不會看到俄羅斯娃娃爆炸的 bash inside of screen inside of bash inside of screen inside of 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 一起使用。)

相關內容