为什么我不能附加屏幕会话

Dan*_* B. 4 linux debian gnu-screen socket ubuntu-11.04

我有一个正在运行的屏幕会话,我想退出,但我不能,因为当我尝试重新连接时,我收到一条错误消息,说它无法打开我的终端。我确信我可以杀死守护进程或其他什么,但我需要学习“正确”的方式,以及实际发生的事情。

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -list
 There is a screen on:
        1424.pts-0.DELIRIUM     (06/23/2011 01:18:14 PM)        (Detached)
 1 Socket in /var/run/screen/S-daniel.

 daniel@DELIRIUM:~/server1/bin/plugins$ screen -r 1424
 Cannot open your terminal '/dev/pts/0' - please check.
Run Code Online (Sandbox Code Playgroud)

另外,什么是插座?你越能把它弄糊涂就越好。

Der*_*rfK 6

由于某种原因,您不拥有您的 TTY。您是否曾经su从另一个用户更改为该用户?通常,TTY 归最初登录该终端的人所有。

有一个巧妙的技巧可以解决这个问题(除了更改最初登录的用户对 /dev/pts/0 文件的权限之外),该bsdutils软件包有一个名为的程序script,当运行时,它的作用类似于键盘记录器,同时保存两者您键入的内容和打印的程序。它启动另一个shell并为该shell分配另一个pseudotty以记录所有这些,因此如果您运行script /dev/null它将创建一个具有适当权限的新pseudotty,并开始将其上的所有内容记录到/dev/null。然后您将能够使用 screen 重新附加您的会话。

至于“套接字”,这是屏幕中命名管道文件(也称为 FIFO)的术语/var/run/screen/S-username,例如

prw------- 1 derf derf 0 Jun 23 22:42 30029.pts-0.server
Run Code Online (Sandbox Code Playgroud)

首次启动 screen 时,会创建此管道文件,以便将screen用于查看显示的screen进程与SCREEN实际运行程序的后台进程(通常已重命名)连接起来。运行时screen -r,将打开正在运行的 screen 进程这个管道与后台屏幕进程交谈。