如何設定 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 一起使用。)