Linux 桌面环境无法启动的解决方案 (linux 桌面不启动)

Linux作为一款自由软件,开源、免费、安全等优点备受青睐,尤其是在服务器领域中广泛应用。但是,在桌面领域中,相对于 Windows 和 Mac OS,使用 Linux 的人却比较少。其中一个原因就是,相对于其他操作系统,Linux 的操作更为复杂,遇到问题的解决也相对更加困难。特别对于 Linux 桌面环境无法启动这一问题,更是让很多初学者望而生畏。因此,本文将为大家提供一些常见的解决方案。

1.重启电脑

有时系统出现问题,重启电脑就能解决。如果你的 Linux 桌面环境无法启动,之一步可以尝试重启。

2.进入文本界面

如果重启电脑不能解决问题,可以尝试进入文本界面。在 Linux 中有六个虚拟控制台,可以在图形界面下按下Ctrl + Alt + F1 或者 F2 到 F6,进入六个不同的虚拟终端。在这个操作系统的控制台下面,可以直接操作系统的 shell,输入你的用户名和密码,这样就可以进入到系统的命令行界面,可以直接操作系统,修复桌面环境的问题。

3.查看系统出错信息

在文本界面中,可以通过查看系统日志文件或者控制台输出信息了解问题所在。系统日志文件一般保存在/var/log目录下。其中重要的日志文件包括 messages、dmesg、Xorg.0.log。通过查看这些文件中的内容,可以了解到出错的原因。

4.修复系统包

有时,无法启动 Linux 桌面环境的问题可能与系统包损坏有关。可以尝试使用一些工具来修复系统包。例如,可以使用dpkg,yum,apt-get等工具来修复损坏的包。

5.重新安装桌面环境

如果重启电脑、进入文本界面、查看系统日志、修复系统包等方法都没有解决问题,还可以尝试重新安装桌面环境。这个可以先卸载桌面环境,然后再重新安装,在重新安装的时候尝试一下其他桌面环境,比如 GNOME、KDE 等。

正常情况下,Linux系统的桌面环境启动是非常稳定可靠的。但是如果出现问题,上述方法应该可以解决问题。如果还不能解决,则需要更深入的处理。不过,正如操作系统本身,遇到问题是很正常的,特别是在刚学习使用 Linux 系统时,会遇到各种问题和挑战。如果你遇到问题,要保持耐心和冷静,一步一步地解决。这样学习的过程更有收获,也更能对 Linux 系统有更全面的认识。

相关问题拓展阅读:

怎样让linux启动后不运行桌面而是运行自己写的图形界面程序?

本文以redhat 8.0操作系统平台为背景,阐述如何实现启动级别为3时的自动登录,及自动运行相应程序,并简要介绍了如何在redhat 8.0下自动登录X window(系统启动级别为5),并自动运行指定的应用程序。

一、启动级别为3时自动登录的实现

启动级别为3时自动登录的实现涉及两个软件包:mingetty-1.00-3.src.rpm软件包及util-linux-2.11r-10.src.rpm软件包。

(1)mingetty-1.00-3.src.rpm软件包

对于启动级别为3的自动登录的实现,仍然需要考察/etc/inittab脚本,

3:123:respawn:/in/mingetty tty3

因此,如果想在启动级别3的情况下实现自动登录,必须要了解mingetty的功能,甚至要修改mingetty的代码。用命令rpm -qf /in/mingetty 可知redhat 8.0版本的mingetty包含在mingetty-1.00-3.src.rpm软件包中,下载该软件包,安装源代码,缺省情况下,代码会安装在/usr/src/redhat/下,我们关心的只是mingetty.c源文件。mingetty.c约有五百行代码,主要实现如下功能:

打开指定的tty(由参数指定);

提示用户登录(login:);

获得登录用户名;

把用户登录名作为参数,调用/bin/login。

我们所关心的部分实质上只有以下三行:

… …

while ((logname = get_logname ()) == 0);//mingetty.c文件438行

execl (_PATH_LOGIN, _PATH_LOGIN, “–“, logname, NULL);

error (“%s: can’t exec ” _PATH_LOGIN “: %s”, tty, sys_errlist);

… …

之一行的功能是输出login提示,并获得用户输入的登录用户名,登录用户名由logname返回。因此,可作如下修改

… …

// while ((logname = get_logname ()) == 0);//注释掉本行,不再提示login:

logname = “root”;//添加本行代码

execl (_PATH_LOGIN, _PATH_LOGIN, “–“, logname, NULL);

error (“%s: can’t exec ” _PATH_LOGIN “: %s”, tty, sys_errlist);

… …

注意,枯伍这里假定用户以超级用户身份登录。

第二行以用户登录名为参数,调用/bin/login程序,进一步实现登录。因此,要想实现自动登录,还应该了解/bin/login的功能,必要时还应修改其源代码。

第三行为出错处理。

(2)util-linux-2.11r-10.src.rpm软件包

采用同样的方法,查看/bin/login所属软件包(redhad8.0版本的login包含在util-linux-2.11r-10.src.rpm软件包中),下载并安装util-linux-2.11r-10.src.rpm,login可执行文件有几个源文件编译而成,我们最关心的是login.c源文件(大约1500行的代码)。下面简要分析一下login要实现的功能,并对相应部分作必要的修改。

Login程序主要可以分为以下几个主要部分:

1.Login首先检查登录者是否为超级用户,如果不是超级用户,并且存在/etc/nologin文件,则输出该文件内容,并中止登镇罩录过程;主要由checknologin()实现;

2.如果登录用户是超级用户,那么login必须在/etc/securetty/中指定的tty列表中实现登录,否则将导致登录失败。同样没旅或可以不指定/etc/securetty文件,此时,超级用户可以在任何tty上登录。

3.经过前两步测试后,login接下来将提示输入登录密码(由getpass()调用完成,有兴趣的读者可参考其手册页面),并进行验证,如果密码不对,则提示重新登录。

4.顺利经过密码验证后,login还将检查是否存在.hushlogin文件,如果该文件存在,则执行一次”quiet”登录(所谓的quiet登录指的是,登录时不再提示邮件mail,不再显示最后一次登录时间,不输出任何消息。启动级别为3时,正常情况下输出这些信息)

5.login接下来设置登录tty的用户ID和组ID,并设置相应的环境变量,包括HOME、PATH、SHELL、TERM、LOGNAME等。对于普通用户来说,PATH缺省被设置成/usr/local/bin: /bin/usr/bin:;对于超级用户来说,PATH被设置成/in: /bin: /usr/in: /usr/bin:

6.login的最后一步是为用户启动shell。如果在/etc/passwd中没有为用户指定shell,那么将使用/bin/sh,如果在/etc/passwd中没有给出当前工作目录,则使用”/”。

至此,一个完整的登录过程就结束了。

从以上对login源程序分析过程中可发现,如果要实现自动登录,应该在第三步做文章,设法绕过提示输入密码以及对密码进行验证这一过程。实际上很简单,login源程序对是否要求输入密码设置了一个开关控制passwd_req,缺省情况下,其值为1(passwd_req = 1),即要求输入密码进行身份验证。把该行代码改为(passwd_req = 0)后,问题就解决了。即对源文件作如下修改即可:

… …

fflag = hflag = pflag = 0;//login.c文件402行

//passwd_req =//缺省时,要求进行密码验证,注释掉本行

passwd_req = //添加本行

… …

修改后,可以直接使用util-linux-2.11r-10.src.rpm提供的Makefile进行重新编译,也可以自己对其编译:

gcc -o login login.c setproctitle.c checktty.c xstrncpy.c -Wall -lcrypt注意包含后面的编译选项-lcrypt,否则会出问题。

有了新版的mingetty及login后,拷贝mingetty到/in/目录,拷贝login到/bin目录,并将/etc/inittab中的启动级别设置为3,再重新引导系统即可(读者可以自己写一个脚本实现上述过程)。

如果读者对mingetty或login代码的其他部分感兴趣,可以反复修改login.c或mingetty.c的源代码,测试一下代码的功能,这里要注意的是,在拷贝新版mingetty和login之前,一定要把原来的mingetty和login备份,同时还要准备系统引导盘(有系统安装盘亦可,这样读者有机会键入linux rescue),在测试新版程序前更应如此,如果对代码修改稍有不当,系统将不能正常启动。

如果不想再作进一步的代码测试,只是按本文给出的方法进行代码修改,在系统启动上不会出现什么问题。

二、自动登录后,自动运行特定的应用程序

在实现了启动级别3时的自动登录后,自动运行应用程序非常简单,把应用程序添加在/etc/rc.d/rc.local脚本中既可。(读者可以尝试一下把startx加入脚本中,看一看效果如何。在某种意义上,又增加了一种自动登录X window的方法)

三、对自动登录X window(系统启动级别为5),并自动运行指定的应用程序的补充

在”如何实现自动登录linux”中,主要以redhat 7.2平台为背景进行阐述的,其中的自动登录部分可以直接用于redhat 8.0中,不需要任何修改。

但是,登录后自动运行应用程序的接口在redhat 8.0中有所不同,主要是登录gnome后,自动运行应用程序的接口有所改变:首先点击面板上的GNOME帮助(那个红色的小帽子),然后选择/其它/首选项/Sessions,在Session对话框的启动程序属性页中添加要启动的程序即可。

对于登录kde后,自动运行程序的接口没有改变。

四、结论

本文同”如何实现自动登录linux”一文,基本上解决了如何实现自动登录Linux,并自动运行相应应用程序的问题。对于两个最常见的启动级别(3、5),都给出了各自的方法。

在系统初始化到mingetty及login这一阶段,内核实际上已经完成了引导过程,已经到了系统初始化的更高阶段,与内核没什么关系了。此时,主要是/in/init根据/etc/inittab的内容而相机行事。读者可通过(man 8 init)或者(man 5 inittab)了解更多东西。

在对文中提到的软件包修改时,请遵守GNU General Public License(GPL)相关标准,另外,替换login通常被视为黑客行为,应当谨慎行事。

参考文献

1.login手册页面

2.mingetty-1.00-3.src.rpm,在redhat 8.0的发行版本的源代码中,包含该软件包;

3.util-linux-2.11r-10.src.rpm,

可在

处下载,注意下载源代码包(..src.rpm)

关于作者

郑彦兴,男,现攻读国防科大计算机学院博士学位。您可以通过电子邮件

楼主看看 startx 这个常见命令,简闭他其实就是一个启动 X 进程,之后再由 X 进程启动一个 session 程序的东西。

你可以把启动 session 进程的地方改成启动你的程序的内容,这样 startx 就可以启动 X 后直接岁咐轿启动你的程序了。

其实 start 在某些系统里面,会首先看当前用户目录里面的 .xinitrc ,如果有就执行这个脚本,这个脚本用 exec 命令启动你的程序就行了。

这种系统你可以方便的添加一个专用的用户,之后在用户目录里面写好 .xinitrc 。

之后在 inittab 或者 rc.local 里面写上 su user -c startx 就行了。

另外,不一定非要用 startx ,你只要知道如何启动 xinit 后乎肆再启动你的程序就行了。

这一切都是看系统的设计。

更佳的还是看看如何自己写脚本启动 X ,再由 xinit 进程启动你的图形程序。这是最正统的办法。详细可以参考 xfce4 ,他自己有一个 startxfce4 的脚本,这个好像是绕过 startx 命令的,当然其实他们俩没啥区别,就是一个启动默认的界面,一个启动 xfce4 而已。

把你的程序放到这冲虚个目录歼判咐下行麽?

在/etc/rc.local文件中加入你想启动的东西 因为这个目录是Linux启氏纯动必须检测执行的一个目录。

不进入图形磨差界面,只要把/etc/inittab 里面的id:5:initdefault:其中的5改成3即可.

运行自己的程瞎敏皮序有好几种拿运方法, 参考这个吧:

如下例,把initab里的

x:5:respawn:/usr/毁笑bin/xdm -nodaemon

改成

x:5:respawn:/usr/bin/my_program

linux利用desktop实行开机自启失败

linux利用desktop实行开机自改毕启失败的解决方法如下:。环亮歼拿境:redhat6,进入单用户模式,敬搭把错误的开机启动应用去掉,重新启动服务即可。

关于linux 桌面不启动的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux 桌面环境无法启动的解决方案 (linux 桌面不启动)