startx命令有什么作用?

在阅读有关Ubuntu时,我发现以下声明…..

如果默认情况下未在默认运行级别中启动显示管理器,则可以在登录到文本模式控制台后,通过从命令行运行startx,以不同的方式启动X.

成为默认运行级别意味着什么? 当我在终端上尝试这个时,我得到了这个:

anupam@JAZZ:~$ startx X: user not authorized to run the X server, aborting. xinit: giving up xinit: unable to connect to X server: Connection refused xinit: server error 

曾几何时(1),当计算机的内存以千字节为单位并且磁盘以兆字节为单位时,一直运行图形界面被认为是有害的。

大多数用于在多用户环境中进行科学计算和模拟的Unix计算机,以及在其上运行的图形界面将减少它们可用的内存和CPU功率。

因此,当您需要图形界面时,您只需使用startx (2)启动它。

startx基本上运行一个Xserver (图形“驱动程序”)和一个在它上面运行的命令,它通常是一个窗口管理器 。 默认情况下,运行的命令位于主目录中的~/.xinitrc文件中,否则位于某些通用系统文件中。

现代系统从底层开始被认为是一直运行的图形系统,所以没有人可能检查过startx的工作年龄 – 这解释了你可以拥有的许多奇怪的行为。

如果你想尝试并感受好时光,那么最好的做法是:

A)安装Xnestfvwm 。 Xnest是一个服务器内的图形服务器,一种在普通系统中作为窗口打开的服务器。 Fvwm是一个非常简单的窗口管理器,当时非常受欢迎。 你也需要旧的pixmap字体。

 sudo apt-get install xnest fvwm sudo apt-get install xfonts-100dpi xfonts-100dpi-transcoded xfonts-75dpi-transcoded xfonts-75dpi 

B)把这个文件写在某个地方,例如你家里的dir,然后调用它~/test

 #!/bin/bash # xterm & exec fvwm2 

C)运行(注意: startx通常首先运行客户端命令,然后运行双破折号,然后运行服务器命令。正如我所说,大多数新系统没有单独的startx合理默认值。)。

 cd ~ startx ~/test -- /usr/bin/Xnest -ac :1 -geometry 800x600 

…你有一个80年代的工作站屏幕:

在此处输入图像描述

(您可以通过单击“Xnest”桌面来获取菜单)。

…如果你真的喜欢冒险,你可以在另一个虚拟控制台上开始一个原生会话(阅读其他答案),然后使用Ctrl-Alt-F1,登录,和

 startx ~/test 

通常会在Ctrl-Alt-F8上打开。

注意 :现代桌面环境并非设计为同一用户在两个不同的控制台中同时运行。 因此,在进行此实验时不要使用gnome-shellunity或现代的东西,否则您可能会搞砸您的配置。


脚注:

(1)在这里谈到1980-90左右。

(2)例如,我有一台256k RAM的笔记本电脑。 在(B&W!)图形界面中它很慢,但在控制台中很快。 所以我在控制台模式下完成了大部分工作(编辑CLaTeX和类似文件),并且仅在真正需要时切换到图形环境。

startx启动xsession或图形界面,您可以在其中看到登录屏幕,而不仅仅是ascii控制台(文本会话)。

您收到此错误是因为xsession已经启动并且您正尝试从tty7上的xsession内部执行命令。

tty7是存在于ctrl + alt + f7 (默认为xsession)的用户界面。

tty1是存在于ctrl + alt + f1的用户界面。

tty2是存在于ctrl + alt + f2的用户界面。 。 。 等等。

tty1 – tty6是文本会话,您可以在其中一个屏幕上使用您的用户名和密码登录。 登录后,您可以运行命令startx ,如果tty7尚未运行,则xsession将在tty7中启动;如果tty7已在运行xsession,则tty8将启动。


运行级别:

run-level 0 Halt – 关闭系统。

run-level 1单用户模式 ​​- 管理任务的模式。

run-level 2具有网络function的图形多用户 – 正常启动系统。

运行级别3-5未使用但配置与运行级别2相同

运行级别6重新启动 – 重新启动系统。

术语运行级别是指在实现Unix System V样式初始化的计算机操作系统之一中的操作模式。 通常,存在七个运行级别,编号从0到6; 虽然可以使用多达十个,从零到九[需要引用]。 S有时用作其中一个级别的同义词。 启动时只执行一个“运行级别” – 运行级别不按顺序执行,即执行运行级别2或3或4,而不执行运行级别2或3,然后运行级别。 – en.wikipedia.org/wiki/Runlevel

它只是意味着不同的tty 。

引用链接的问题:

默认情况下,Ubuntu有7个tty。

1-6只是命令行, 7运行你的X会话(你的普通图形桌面)。

要访问它们,请使用此键盘快捷键: Ctrl + Alt + F1

(将F1改为F1-F6以访问您需要的终端)

要返回X会话(普通桌面),请使用: Ctrl + Alt + F7

after logging on to a text-mode console只需登录到其他tty并键入命令即可:

 startx 

Buildroot最小的例子

我最喜欢的方法是通过制作一个运行它的最小例子来学习它所做的事情。

在Ubuntu上,这很难,因为第二个startx可能会与您当前的桌面冲突。

https://askubuntu.com/a/519164/52975建议Xnest ,但使用Xnest ,我们可以更加Xnest ,并创建一个只安装了X11的微型发行版。

这样就可以更容易理解发生了什么。

我在以下url描述了发行版: https : //unix.stackexchange.com/a/306116/32558

一旦你在QEMU上运行了图像,就可以从TTY shell开始了。

然后你做的时候:

 root startx 

它启动了一个X11 GUI:

在此处输入图像描述

现在看一下该发行版中startx的源代码,它只是一个shell脚本。

它是/usr/bin/xinit上的一个简单包装器,它将/etc/X11/xinit/xinitrc传递给xinit

如果打开/etc/X11/xinit/xinitrc ,它包含以下行:

 twm & xclock -geometry 50x50-1+1 & xterm -geometry 80x50+494+51 & xterm -geometry 80x20+494-0 & 

所以我们看到它启动了:

  • twm :一个非常简单和老的窗口管理器
  • 我们在屏幕上看到的xclockxterm

对于/usr/bin/xinit ,我们可以这样做:

 man xinit 

这说:

如果在命令行上没有给出特定的客户端程序,xinit将在用户的主目录中查找名为.xinitrc的文件,以作为shell脚本运行以启动客户端程序。 如果不存在此类文件,xinit将使用以下内容作为默认值:

 xterm -geometry +1+1 -n login -display :0 

如果命令行中没有给出特定的服务器程序,xinit将在用户的主目录中查找名为.xserverrc的文件,以作为shell脚本运行以启动服务器。 如果不存在此类文件,xinit将使用以下内容作为默认值:

 X :0 

正如Rmano所说,startx是一种非常古老的方法。 当使用它时,X11二进制文件安装了setuid root。

我只是在虚拟机中尝试了这一点,实际上,默认情况下, startx失败。 chmod u+s /usr/lib/xorg/Xorg修复了这个问题。

我不建议Xorg成为setuid root。 世界已经远离善意的理由。 但是,如果你在一个丢弃的虚拟机中玩游戏,那就是如何使startx工作。