在 shell 中執行螢幕找不到會話,但在 ssh 登錄期間執行螢幕可以
當我 ssh 進入主機時,我正在使用RemoteLoginAutoScreen腳本啟動螢幕會話。
與連結腳本的區別:我使用的是zsh,而 RemoteLoginAutoScreen 使用的是bash
我遇到的問題是我的 ssh 連接已斷開連接(這種情況經常發生,因此是自動螢幕配置),並且我無法重新連接到我現有的螢幕會話。
在主機上,我可以看到我的螢幕程序仍在執行,並且螢幕套接字仍然存在:
$ ps auxww | grep -i screen | grep alexq alexq 1818 0.0 0.0 103452 868 pts/19 S+ 18:08 0:00 grep --color=auto -i screen alexq 20270 0.0 0.0 120040 2004 ? Ss Jul21 0:19 SCREEN -R $ ls -al /var/run/screen/S-alexq total 6 drwx------ 2 alexq alexq 4096 Jul 29 17:26 . drwxrwxr-x 5 root screen 4096 Jul 21 21:33 .. prwx------ 1 alexq alexq 0 Jul 29 17:46 20270.pts-14.myhost
但是當我登錄(沒有在螢幕會話中)時,螢幕找不到我現有的會話:
$ screen -ls No Sockets found in /tmp/uscreens/S-alexq.
基於這個問題,我嘗試將
SCREENDIR
環境變數設置為 /var/run/screen/S-alexq 但是當我這樣做時,螢幕仍然找不到會話:$ export SCREENDIR=/var/run/screen/S-alexq $ screen -ls No Sockets found in /var/run/screen/S-alexq. $ export SCREENDIR=/var/run/screen $ screen -ls You are not the owner of /var/run/screen.
我真正感到困惑的是,當我在 ~/.zshrc 文件中用“screen -ls”替換起始螢幕時,我會在控制台上列印以下內容:
There are screens on: 20270.pts-14.myhost (Attached) 1 Sockets in /var/run/screen/S-alexq.
因此,由於某種原因,我 ssh 登錄期間的螢幕可以找到現有會話,但是當我在控制台螢幕上時找不到會話。
誰能幫我弄清楚為什麼螢幕只能在我的 ssh 登錄期間而不是之後看到會話?
您有兩份
screen
. 其中一個將其會話儲存在其中/tmp/uscreens
,另一個將其會話儲存在 中/var/run/screen
,因此它們看不到彼此的會話。即使你可以強迫他們看到彼此的會話,也有可能
screen
是不同版本的副本,如果兩人互相交談,就會發生不好的事情。但是,無論如何您已經觀察到它不允許您強制它使用不同的會話目錄$SCREENDIR
,這是一種安全措施(因為screen
是特權,可能是 setuid 或 setgid,取決於確切的作業系統和配置)。出現問題是因為您的
$PATH
登錄方式有所不同。解決方案是使用與啟動會話相同的螢幕副本來恢復會話。或者,您可以禁用或解除安裝其中一個副本,
screen
以消除未來混淆的可能性。