无法从屏幕会话内运行“startx”

无法从屏幕会话内运行“startx”

我正在运行 Slackware GNU/Linux 14.2,默认情况下它不会启动 X 服务器。一时兴起,我尝试在会话startx中运行screen并收到警告

/usr/libexec/Xorg.wrap: Only console users are allowed to run the X server
xinit: giving up
xinit: unable to connect to X server: Connection refused
xinit: server error
Couldn't get a file descriptor referring to the console

为什么我无法startx从屏幕会话内部运行?哪些资源可以在“原始”控制台上访问,而在屏幕下运行的 shell 上却无法访问?

答案1

startx只有当你在电脑前时,跑步才有意义。测试控制台所有权是确定这一点的一种方法。正如您所发现的,它可以通过在screen会话中操作来欺骗。在这种情况下,你就没有 X 了。

答案2

典型的 Linux 系统具有固定数量的虚拟终端/控制台 (VC),它们被分配为设备/dev/tty1/dev/tty2。这些用于控制台登录 shell,可以使用按键 Ctrl-Alt-F1、Ctrl-Alt-F2 进行访问, ETC。

此外,还有伪终端 (PTY),其名称类似于/dev/pts/19.它们用于 Xterm 等终端仿真器、SSH 会话、屏幕窗口等。

您可以像这样找出您的 shell 运行在哪种类型上:

$ echo $TTY
/dev/pts/19

由于我不太清楚的原因,像 Xorg 这样的全屏图形软件需要与虚拟控制台关联。由于 X 除非有权限写入 VC 设备(例如/dev/tty7),否则无法运行,因此它可能首先打开该设备并使用它向内核发送某些请求。我想 PTY 设备不会理解这些请求。

下面,您可以看到两个 VC 设备的权限。在第一个中/dev/tty1,我登录为myusername,您可以看到登录我的程序已将设备更改为我拥有的。第二行/dev/tty2属于,root因为它仍然显示登录提示:

$ ls -al /dev/tty{1,2}
crw------- 1 myusername tty 4, 1 Dec  9 05:47 /dev/tty1
crw--w---- 1 root       tty 4, 2 Dec  9 05:11 /dev/tty2

如果您想startx在指定的 VC 上运行,但无法直接访问它(例如,如果您通过 SSH 登录,或与屏幕窗口对话),那么您可以systemd-run按所述使用这里。该方法需要sudo权限,但最终您将以startx普通用户身份运行,就像登录到指定的 VC 一样。

答案3

要理解这一点,我们首先必须理解之间的区别终端、外壳和控制台。

  • 终端是一个运行 shell 的程序,过去它是一个物理设备(在终端是带有键盘的显示器之前,它们是电传打字机),然后它的概念被转移到软件中,例如 Gnome-Terminal。
  • Gnome-Terminal,运行时出现黑色窗口这样我们就可以运行我们的命令了。
  • 安慰是一种特殊的终端,它也是一种物理设备。 Linux 中的例子虚拟控制台我们可以通过 Ctrl + Alt + F1 到 F7 的组合来访问它们。

虚拟控制台,因为在早期它是一个物理设备。但现在它不是一个单独的专用设备。所以我们称之为虚拟终端..

严格来说,现在的大多数终端都是终端模拟器。它是类 UNIX 系统工作中的一种角色,同时也是系统提供的基本接口。

事实上,一切,包括 GUI 都建立在它之上。[1]

通俗地说,我们可以说“终端”是指具有星形拓扑的计算机网络中的端点。

那么就出现了一个问题。由于 GUI 是在控制台上构建的。那么如果我们想要进行一些命令行操作该怎么办呢?答案是终端......它进一步模拟控制台......并让我们在其中输入我们最喜欢的命令。

[1]的解释

所以在这里我们知道,即使 GUI 也是在控制台上构建的.. 通过输入命令,startx您再次请求打开新的 XServer。因此,请您自己思考为什么 GUI 终端应该让您这样做???[您想破坏您的 XServer 吗??]。和如果您确实想强制执行该命令..只需startx通过管理权限运行命令即可。 你会成功,但肯定会破坏你的 XServer 运行时。

并回答您的最后一个问题.. [您可以在“原始”控制台上访问哪些资源,而无法在屏幕下运行的 shell 上访问?]

事实上,到目前为止,我还没有看到任何无法通过 Xserver 上运行的终端访问资源的情况。您必须能够通过内部 Xserver GUI 终端访问所有资源..(因为这也是为了满足普通控制台所提供的所有需求而设计的!!!)..

但是运行一个命令,其结果与在正好坐在树枝上切割树枝相同......肯定会产生错误。

在计算机科学领域,一切都是有意义的。

相关内容