[分享]从登录界面到出现可用桌面很慢 之我解

系统安装、升级讨论
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
回复
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

[分享]从登录界面到出现可用桌面很慢 之我解

#1

帖子 lionkingfly » 2007-09-23 16:24

大家是否出现过这种情况,当你输入完用户名,密码后,就要开始漫长的等待,少则30秒,多者一两分钟。
而且当进入系统后,却没有桌面,panel倒是有的。这时如果你查看进程,(可以用终端命令ps,或者图形工具gnome-system-monitor等等),会发现nautilus进程占用了很高的进程,这说明nautilus桌面管理程序它是启动了,可是异常了。我相信这是7.04,7.10版本的一个bug,我尝试过登出再登录许多次,nautilus时灵时不灵,而且灵的时候少,不灵的时候多。 你可以kill它,然后重新start它(直接用命令nautilus就可以了,它会自动Initialize gnome-mount extension挂载你windows的盘如果你有的话),这时美丽的桌面又回来了。

但是,这还是没有解决根本的问题。难道每次都要这样等待吗?我尝试过而且花了很多时间在网上google,baidu过,可是没有找到过可行的办法,因此我决定自己来看看能不能解决,这样就要对gdm管理,gnome-session相关使用到的文件有个必要的了解,查看/etc/gdm下的文件发现gdm.conf和gdm.conf-custom(在它们的头部有段英文有说明)的关系,你用系统/系统管理/登录窗口(也就是gdmsetup)对里面的修改都将反应到gdm.conf-custom中。还有Xsession真正管理会话的脚本,感兴趣的不妨看看它,
里面有一段:

代码: 全选

# use run-parts to source every file in the session directory; we source
# instead of executing so that the variables and functions defined above
# are available to the scripts, and so that they can pass variables to each
# other
SESSIONFILES=$(run_parts $SYSSESSIONDIR)
if [ -n "$SESSIONFILES" ]; then
  for SESSIONFILE in $SESSIONFILES; do
    . $SESSIONFILE      //看这里,其实它这是在循环执行$SYSSESSIONDIR也就是/etc/X11/Xsession.d中的脚本
  done
fi
对了这里有必要说下我的配置,我使用的是NVIDIA GeForce FX 5200,我装的是官方的驱动(*.run), CPU: p4 2.4G,内存宇瞻2×256。由于装了官方显卡驱动所以要删除所有开源驱动相关。还有xserver-xgl(在7.04和7.10版本里它实现了自动启动xgl,不需要手动添加xgl运行脚本),我删除它是因为它的glx模块(可能还有其他模块)和官方驱动冲突了,会导致进入不了桌面(刚刚看到桌面,它又自动返回登录界面)。

刚开始我没有删除它只是将/etc/X11/Xsession.d中它新增加的一个文件98xserver-xgl_start-server删除(最好备份),你看看它就会发现真正执行的是/usr/share/xserver-xgl/Xgl-session,你再看看/usr/share/xserver-xgl下的另一个文件,你会发现其实它的自动让xgl运行也不是多么神奇!别害怕它。我也是刚使用ubuntu不久,对脚本也不熟,对C++倒是还好(专业课)。即使都不懂,你看看那些文件的头部说明也能有个大概的了解的。

废话了些,继续正题,上面这一段是我对xserver-xgl的兴趣,没兴趣的大可以直接sudo apt-get remove xserver-xgl。恩,省事!不过,请注意这是对装nv官方驱动的来说的,其他的情况请谨慎!

还挺难说清楚的,待续吧。
czlpk
帖子: 25
注册时间: 2007-09-05 14:52

我想说的上用户转换的现象

#2

帖子 czlpk » 2007-09-23 16:46

LZ说的问题我不太明白,你说的意思是不是反复转换用戶时要等?这个问题我或者能解答,因为我也试过N次,就是普通用户转到ROOT再转回普通用户时要等,有时不用等 估计和你在另一个用户下的时间长短有关系。其实我也不知道对不对,反正我要等时就点一下键盘上下 的箭头就行了,不过要再输一次密码,估计是我们转换下一个用户时 前一个用户会锁定屏幕,还有我们转换到另一个用户的时,上一个用户可能是在待机,反正转到原用户时黑屏幕时就点一下箭头就没错,我百试百灵的。
czlpk
帖子: 25
注册时间: 2007-09-05 14:52

我还试过用登出的方法来转换用户竟然是不用等

#3

帖子 czlpk » 2007-09-23 16:56

我还试过用登出的方法来转换用户竟然是不用等,而且每都能成功直接进入桌面
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#4

帖子 lionkingfly » 2007-09-23 18:31

不是的,用同样的用户登出再登录。用其他用户的话,里面的配置可能是不同的,不能反映出问题来。
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#5

帖子 lionkingfly » 2007-09-23 18:52

续上:
当选择会话时,有四个选项,重点说gnome,和运行Xclient脚本两个选项。
当选择gnome时,gnome-session会首先到~/gnome2下看看有没有一个叫session的文件,有的话就按照它来进行下一步。没有的话,就按照/usr/share/gnome下的default.session来进行下一步。
先看看default.session文件:

代码: 全选

# This is the default session that is launched if the user doesn't
# already have a session.
# The RestartCommand specifies the command to run from the $PATH.
# The Priority determines the order in which the commands are started
# (with Priority = 0 first) and defaults to 50.
# The id provides a name that is unique within this file and passed to the
# app as the client id which it must use to register with gnome-session.
# The clients must be numbered from 0 to the value of num_clients - 1.

[Default]
num_clients=6
0,id=default0
0,Priority=10
0,RestartCommand=gnome-wm --sm-client-id default0
1,id=default1
1,Priority=40
1,RestartCommand=gnome-panel --sm-client-id default1
2,id=default2
2,Priority=40
2,RestartCommand=nautilus --no-default-window --sm-client-id default2
3,id=default3
3,Priority=60
3,RestartCommand=gnome-cups-icon --sm-client-id default3
4,id=default4
4,Priority=40
4,RestartCommand=gnome-volume-manager --sm-client-id default4
5,id=default5
5,Priority=50
5,RestartCommand=vino-session --sm-client-id default5
开始的那段说明说的挺清楚的了。gnome-session会先执行gnome-wm(优先级10)默认的就是Matacity窗口管理器了。这些都是将会运行的进程(软件),还有所有autostart目录里面的进程也会运行(/etc/xdg/autostart,~/.config/autostart,/usr/share/autostart,/usr/share/gnome/autostart)。[/code]
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#6

帖子 lionkingfly » 2007-09-23 19:12

你使用系统/首选项/会话,添加的程序,都会放进~/.config/autostart.以.desktop作为文件名后缀。在系统刚刚进入桌面,你先别运行其他程序,而点进系统/首选项/会话,选择“当前会话”标签,就可以看到所有default.session指定的程序和autostart里面的程序了。

相信大家都在用beryl吧,要想让系统使用beryl作为窗口管理器,你可以修改default.session中的"gnome-wm"为“beryl”。但是不提倡这么做,你可以复制它到~/gnome2命名为session(直接用命令sudo cp /usr/share/gnome/default.session ~/gnome2/session就行了),然后对session进行修改。就可以屏蔽default.session了。原理上面说过。
当然你可以将里面你自己认为不需要的程序给注释或删除。不过要注意符合它的规则。

我的session文件:

代码: 全选

# This is the default session that is launched if the user doesn't
# already have a session.
# The RestartCommand specifies the command to run from the $PATH.
# The Priority determines the order in which the commands are started
# (with Priority = 0 first) and defaults to 50.
# The id provides a name that is unique within this file and passed to the
# app as the client id which it must use to register with gnome-session.
# The clients must be numbered from 0 to the value of num_clients - 1.

[Default]
num_clients=4
0,id=default0
0,Priority=10
#0,RestartCommand=gnome-wm --sm-client-id default0
0,RestartCommand=beryl --sm-client-id default0
1,id=default1
1,Priority=30
1,RestartCommand=nautilus --no-default-window --sm-client-id default1
2,id=default2
2,Priority=40
2,RestartCommand=gnome-panel --sm-client-id default2
3,id=default3
3,Priority=40
3,RestartCommand=gnome-volume-manager --sm-client-id default3
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#7

帖子 lionkingfly » 2007-09-23 19:30

由于7.04和7.10的nautilus的那个bug(上面说过),不知道你们的是不是也是和我一样。我也搞不定,所以替代方法是将session文件中nautilus对应的那三行也删除,先不自动运行它,等进入系统后自己来通过命令来启动它,这样就不需要等待很长时间才能使用系统了。

现在说说另一个登录选项“运行Xclient脚本”。
先找到/usr/share/gdm/BuiltInSessions目录下,你会发现一个文件“运行Xclient脚本”,其实它真正的文件名是default.desktop.
你可以将它拖进gedit里面。
在文件的最后一段是:

代码: 全选

Comment[zh_CN]=此会话将运行 Xclients 脚本
Exec=default
# The "default" Exec is a very special one and is handled specially in
# the Xsession script, you could also have "custom" which would just run
# "~/.xsession" directly
Icon=
Type=Application
X-Ubuntu-Gettext-Domain=gdm
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#8

帖子 lionkingfly » 2007-09-23 19:47

# The "default" Exec is a very special one and is handled specially in
# the Xsession script, you could also have "custom" which would just run
# "~/.xsession" directly

注意理解以上这一段的意思。它说"default"默认是由Xsession脚本进行特殊处理的。我们可以自己写段脚本在~/.xsession里,这样它就将直接运行我们写的脚本了。

先写这些,不知道我说的够不够清楚了,大致上就是这样。事实上我写这篇文章是想看看自己能不能将想说的正确的表达出来分享给有需要的朋友。同时也算是自己这段时间使用学习ubuntu的小结。


忠告或建议:在使用命令的时候尽量知道它所起到的效果,这样当发现不妥时好补救!有兴趣的话,多了解些运行的机制。尽量自己思考解决问题,这样可以促进学习。

我说写的这篇文章,是自己通过摸索,(使用find,locate,man等等命令找出相关的文件阅读它们),而得到的对登录和会话管理的理解。肯定会有错误或不够完善的地方(也可能我没有描述详尽造成误解),希望大家可以指出来。
另外,转载请注明出处,谢谢。
---lionkingfly 2007-9-23
头像
windwiny
帖子: 2254
注册时间: 2007-03-13 17:26

#9

帖子 windwiny » 2007-09-23 20:01

。。。出现登录之类的这些问题时,最先应该尝试的办法是新建一个用户,登陆测试

如果新用户登录或其它什么程序运行正常的话,就应该检查用户配置文件/启动项目之类的东西
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#10

帖子 eexpress » 2007-09-23 21:00

~/.gnome2改名不就可以了
● 鸣学
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#11

帖子 lionkingfly » 2007-09-24 18:57

我都试过将~/.gnome2删除(先备份)了。问题和你想的不一样吧。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#12

帖子 eexpress » 2007-09-24 22:50

剩下就是看~/.xsession-error啊。

顺便提下,很多时候,软件启动,和字体设置不对有关。
● 鸣学
lionkingfly
帖子: 34
注册时间: 2007-09-14 15:58

#13

帖子 lionkingfly » 2007-09-25 12:34

嗯,我也经常看~/.xsession-error,都成为一种习惯了。
回复