尝试在 Gentoo 上启动 X 时无法打开虚拟控制台 7(权限被拒绝)

尝试在 Gentoo 上启动 X 时无法打开虚拟控制台 7(权限被拒绝)

当我尝试通过键入 i3 启动 X 时,startx /usr/bin/i3收到以下错误消息: (EE) xf86OpenConsole: Cannot open virtual console 7 (Permission denied)

以 root 身份启动或在 chowning /dev/tty7 后启动startx可以解决该问题(预计输入不起作用,甚至无法切换终端),但我认为这不是正确的方法。

Sway 和 Weston 工作完美,为什么 X 不这样做呢?

答案1

startx在我的系统(Fedora)上运行良好。然而,Gentoo Wiki 上的一个过时页面提到了另一种运行它的方法:

startx /usr/bin/i3 -- vt1

1是您登录的“终端”的号码。如果您不在终端上1,请相应地调整命令。

显然这修复了Permission denied错误,并允许 X 启动。

我不明白为什么startx需要明确传递它。我不明白 Gentoo 为何会做出与 Fedora 不同的事情。那好吧。至少它应该停止startx/Xorg停止尝试打开tty7。这绝对不是现代的做事方式,而且也不适合你。

答案2

Cannot open virtual console (Permission denied)也可能是由于 的权限问题引起的/dev/ttyX

例如在我的 openSUSE MicroOS 上登录之前:

$ ls -l /dev/tty1
crw--w---- 1 root tty /dev/tty1

但登录后:

$ ls -l /dev/tty1
c--xr-xr-T 1 $USER tty /dev/tty1

login实用程序正在更改 TTY 的所有者,以便您可以在其中键入内容。然而在这种情况下,它也改变了权限,不再允许读写!因此,startx显示权限被拒绝错误,因为它无法在设备上写入。

解决方法

之前更改TTY的权限startx。在我的.zprofile

# Auto-start Xorg when logging in on TTY1
check_tty() {
    local temp=$(tty)
    echo ${temp:5}
}

if [ $(check_tty) = "tty1" ]; then
    chmod 1600 /dev/tty1              # Notice the permission change before startx
    exec startx
fi

可能的原因

我找不到问题的确切原因。它可能systemd-logind与我也有相同的所有权问题有关这份报告这个startx失败时。

我还研究了 PAM 和 udev,但在实践中似乎没有什么可以改变/dev/tty模式!1155

相关内容