我犯了与这个问题相同的错误: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 不需要。chroot
newinstance
/dev/pts
gid
devpts
/dev/pts
tty
对此还有一些注意事项:
/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
不工作),因此如果使用此选项,您应该重新启动这些终端。