使用的是ubuntu-focal 20.04 桌面版。因为在熟悉使用ubuntu出现这个问题。


启动startx 

1、首先要了解ubuntu几种运行级(参考init_百度百科),ubuntu桌面版默认启动的是init 5 :如下的正常登录界面。

 2、进入和从terminal中输入sudo init 3,进入字符模式。也就是不运行X11/X Window系统了,包括X server 、X client 都不运行。如果对X11 、X server 、X client 不了解,请参考X11、GTK、QT、GNOME和KDE之间的区别与联系_antdz的博客-CSDN博客_gnome qt

 3、在字符模式下,输入sudo startx,进入startx 的图形桌面界面。这个界面与init 5的界面是有区别的,虽然在我电脑上都是启动gnome。

还有一种启动startx 的方法,
1、默认桌面环境的terminal 中输入sudo init 3进入字符环境
2、登录后sudo xinit,进入xinit提供的xterm中,xterm 显示是需要依赖X server的。
3、在xinit的terminal中输入sodu startx ,进入startx界面。

在上面步骤2 之后在xterm中输入firefox命令启动了firefox浏览器,可以看到浏览器窗口是无法移动且右上角没有窗口缩放关闭最小化按钮的。因为xinit没有启动gnome窗口管理器(在进程中医gnome-session-b/c/d来显示)。

startx 与xinit 关系

通过who可以查看linux当前开启的终端。下面的who是第二种启动startx方法时的结果,tty1是init 3时默认字符终端,pts/0是xterm,pts/1是我用外部SSH客户端来开启的虚拟终端。startx 在

 

 通过按钮ctrl+alt+F1~F6来切换tty,在字符模式下默认有六个 TTY_百度百科 终端可用。一个tty中只能启动一个X server
使用第二种启动startx方式,我按ctrl+alt+F4进入了xterm中,可以通过ctrl+c来终止startx。

退出startx

在startx 的桌面环境中按Ctrl+alt+insert 然后log out或者由上角选择log out。或者直接在startx 的terminal 中输入“sudo init 5”,进入系统默认桌面环境就行。
也可以“sudo init 3”进入字符界面 或者“sudo init 6”。或者直接杀死X server 进程(我用的版本是Xorg)直接杀死X server进程是非正常做法,不提倡。

xinit启动只会开启gnome-keyring-d的gnome相关进程,但是在xinit启动后偶尔会看到gnome-shell-cal进程。gnome-shell-cal未退出大概是系统的一个bug。具体出现过程在下面第五点有给出。

1、在默认桌面环境中(init 5)输入sudo startx,是无法通过startx和xinit命令直接进入startx和xinit界面的,因为不管是startx 还是xinit 还是默认桌面环境都会重新启动一个X server ,而一个tty中X server只能在一个时间启动一个,所以只能在init 3的字符界面中启动这两个命令。

2、在init 1中也无法通过startx 命令进入startx,但可以通过xinit进入xinit 界面(也就是说Xorg服务能开启)。大概是我电脑上startx启动需要依赖其他的在init 1中默认不开启的服务。
 

3、有碰到在上面一顿操作后进入init 5 后卡在登录界面无法进去的现象,通过ctrl+alt+F2,进入init 3 界面后再init 6做个重启。就能顺利登录了。原因未找到。


4、在startx进入的桌面环境中无法启动xinit,因为startx 已经启动了x server。 在该tty下xinit无法再次启动x server。
 

5、在init 3中用普通用户账号进入xstart 界面后,然后再切换init 1后有一个gnome-shell-cal 进程仍然在运行,这大概是我在使用的版本的一个bug
 

6、我使用的ubuntu的桌面环境是gnome,默认就已经安装好了。不需要安装lightdm 和 desktop-manager。gnome 、KED、lightdm 都是桌面环境,是同级别的工具,不需要重复安装。

7、xinit 、startx、init 5模式下登录问题基本可以根据xorg和gnome相关进程来进行断定。强制杀死相关的进程可以在不重启的情况下暂时解决问题。


8、init 5进入的登录界面会占用一个tty默认是tty1,登录后的桌面环境另外占用一个tty,如果tty没有被启用过,会取编号最小的未启用tty。Ctrl + alt+F1~F6分别启用tty1~6

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐