GNU 屏幕多用户模式在 OS X 10.6 (Snow Leopard) 中损坏

GNU 屏幕多用户模式在 OS X 10.6 (Snow Leopard) 中损坏

我正在使用 GNU screen 进行远程结对编程。我们将远程用户的本地帐户称为“pairpair”。我的文件中有以下几行.screenrc

multiuser on
acladd pairpair

我已经运行了sudo chmod u+s /usr/bin/screen。但是,当远程用户尝试使用该命令连接到我的屏幕时,screen -r [my_account_name]/[pid_of_screen]我收到以下消息:

Attach attempt with bad pid(xxx)

错误消息中列出的 pid 与远程用户运行的屏幕进程的 pid 匹配。远程用户的屏幕进程挂起;错误消息消失后​​,我的屏幕会话继续顺利运行。

我尝试过使用内置的screen(at /usr/bin/screen)和screenMacPorts 提供的版本,但在两种情况下都出现了相同的错误。

这在 OS X 10.5 (Leopard) 上运行良好。

我已经在 Google 上搜索了错误消息,但大多数结果都与 2003 年左右的 BSD 错误有关(已修复)。还有人见过这种现象吗?有人知道如何在 SL 中使屏幕支持多用户吗?

答案1

我不知道您是否还看到了这个,但是我看到了。

Screen 使用信号为零的 kill() 调用来验证 PID。问题的原因在于 kill() 意外失败,错误号为 EPERM。只有当调用进程的 UID 和 EUID 非零且与目标进程的 UID 和 EUID 不匹配时,才会发生这种情况。

在这个特定情况下,所涉及的两个进程的 UID 不同,并且两个进程的继承 EUID 均为零。这没什么问题,但作为 PID 健全性检查的一部分,两个进程的 EUID 都设置为拥有屏幕会话的 UID。在这个特定情况下,即使两个 EUID 相同,kill() 仍会失败,并出现 errno EPERM。

我已将错误 8965041 提交至 bugreport.apple.com。希望这是修复此问题的正确途径。

与此同时,我正在通过编译自己的屏幕二进制文件来解决这个问题,我强制 CheckPid() 返回 0。

答案2

我使用 Snow Leopard 服务器,并且我使用多用户屏幕没有任何问题 - 我exec screen -xRR.profile启动屏幕上使用,而不是使用明确的 PID。

这对你有用吗?如果是的话,这是 PID 语法的问题,而不是多用户屏幕本身的问题

答案3

我使用它screen进行远程结对编程。我们尝试了一些屏幕共享解决方案,如 iChat、Skype 和 VNC。对于共享文本,发送像素有点过分(而且很难远程读写),尤其是在互联网连接不稳定的情况下。

因为结对编程中已经暗含了很多信任(而且我们有一台共享的计算机),所以这种情况有一个解决方法:

  1. 创建共享用户帐户(例如“配对”)
  2. 授予该帐户管理员权限
  3. 为我要远程配对的用户添加公钥

远程用户现在可以通过 SSH 登录并加入屏幕会话。

感谢irc.freenode.netwwalker#screen的帮助。

相关内容