安装后如何修复/dev/pts?

安装后如何修复/dev/pts?

我犯了与这个问题相同的错误:Debian chroot 阻止主机上的 PTTY

我在 chroot 中安装了“devpts”文件系统,现在 urxvt 无法创建 ptys。奇怪的是 xterm 仍然可以。重新挂载 /dev/pts 并不能解决问题。

我该怎么做才能让我的系统再次正常工作而无需重新启动?

答案1

感谢@mikeserv 的评论,我已经找到了如何恢复它。

我只在 Linux 4.0.7 上测试过这个,所以对于更早或更晚的版本它可能不起作用。

挂载 /dev/pts -o 重新挂载,gid=5,模式=620

在不使用该选项的情况下devpts在 a 中挂载文件系统会导致它挂载包含相同 pty 的相同“实例”。根据手册页,不传递任何参数会导致使用与生成它的进程相同的 gid 创建新的 pty。显然,这个(缺少)安装选项会影响整个实例,因此原始实例不再将 ptys 重新分配给该组。我仍然不知道为什么 urxvt 需要其 ptys 位于该组中,而 xterm 不需要。chrootnewinstance/dev/ptsgiddevpts/dev/ptstty

对此还有一些注意事项:

  • /dev/pts/ptmx模式 000 (root:root) 而/dev/ptmx模式 666 (root:tty)似乎很正常。然而,它们确实指向同一个块设备,因此设置ptmxmode似乎不必要但无害。
  • 默认值mode(600) 似乎可以工作,但无论如何,tty 都是使用模式 620 创建的。有些东西可能正在改变它的模式。当我的系统启动时,它会通过mode=620,覆盖默认值mode,因此我将其放在上面的命令行中,以便更好地恢复 /dev/pts 的默认功能。
  • 不要设置uid。它会导致您出现安全问题或终端未生成的相同问题。
  • 添加newinstance是可选的,但可以提高安全性。使用此选项,容器无法安装“真实”,/dev/pts因为主机系统没有使用它。如果使用它,您应该确保ptmxmode=666/dev/ptmx是一个到 的符号链接pts/ptmx。安装新devpts实例/dev/pts可能会导致现有终端出现奇怪的行为(例如gpg不工作),因此如果使用此选项,您应该重新启动这些终端。

相关内容