如何在 LiveCD 中启动 ubuntu live 用户图形会话(startx)?

如何在 LiveCD 中启动 ubuntu live 用户图形会话(startx)?

我正在尝试使用 构建自定义 ISO ubuntu-builder。我以 12.40 mini remix ISO 为起点。这是我的具体示例 - 但是,我对该过程的原理很感兴趣(因此我可以将其应用于其他 DE/WM)。

当我运行直接从 mini remix 起始 ISO 构建的新 ISO 时,一切都如预期的那样 - 我可以在虚拟机中运行新 ISO,并且启动过程以对实时用户的纯文本提示终止ubuntu

现在,我尝试安装 LXDE(在 中有它的条目ubuntu-builder,显然它会安装lxde-core和 X 依赖项;我必须手动安装lxterminal,而且由于缺少图标,可能lxde-icon-theme也是如此)。我还必须手动安装xinit,所以我有startx。但这本身并没有多大作用:如果我在虚拟机中启动此自定义 ISO,则会发生与“原始”ISO 完全相同的事情 - 启动过程以文本模式提示实时用户完成ubuntu

如果我现在startx在此提示符下键入,则 LXDE 将启动(startlxde在此提示符下运行将会抱怨 X),这样当您lxterminal从该桌面启动时,它将在实时用户下启动ubuntu


LiveCDCustomization - 启动初始化中提到:

启动初始化
您必须编辑 edit/usr/share/initramfs-tools/scripts/casper-bottom/* 中的文件。例如,您可以更改主机名或 livecd 用户。

...但我不太明白那里到底在运行什么。解压ubuntu-builder这些文件/home/ubuntu-builder/FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/- 但据我所知,其中大多数只是运行一些内联sed​​命令,我看不到那里有多少执行命令?

尽管如此,我还是尝试将其中一个脚本复制为一个新脚本,51startx该脚本的可执行部分包含以下内容:

log_begin_msg "$DESCRIPTION"

chroot /root startx
chroot /root startlxde

log_end_msg

这根本没什么作用——再次,启动后,我得到了通常的文本提示ubuntu@ubuntu:~$


然后我发现修改:自动启动x,添加apt等 - backtrack-linux.org

要进行图形登录,只需安装 gdm 并在启动时运行它:

能力更新
安装 gdm

然后,编辑 /etc/rc.local,并在“exit 0”之前添加一行,如下所示:

服务 gdm 启动

这不是最好的方法,但可以运行!。这必须通过运行“update-rc.d gdm defaults”才能工作,但这种方式会失败。

确实如此——我补充道:

startx
startlxde

... /etc/rc.local- 这确实可以启动,并自动启动 LXDE - 但是,当我运行时lxterminal,它是在用户下root- 而不是在实时用户下ubuntu


那么,我应该怎么做才能在实时ubuntu用户下自动在启动时启动(任何)X 和/或任何桌面环境?

请注意,在这种情况下,我会不是喜欢使用额外的桌面管理器(例如gdm)或相应的欢迎程序 - 但如果自动启动 X 的解决方案也适用于桌面管理器或欢迎程序,那就太好了。

答案1

好的,我想我已经明白了一点,但还是不太明白,因此如果能得到正确的回答我将非常感激:)

但是,基本上:启动过程开始,进程在某个地方init运行,内核加载 - 但同时,一些启动脚本也在运行。这些脚本是 的一部分initramfs,在启动内核中它们被称为/scripts/...- 但是,在解压的文件系统中ubuntu-builder它们将位于 中./FileSystem/usr/share/initramfs-tools/scripts/。最终 - 在典型的安装中 - 这将以加载给定的显示管理器 (DM) 结束,它“向用户显示登录屏幕,提示输入用户名和密码“;显然,DM 中这种屏幕的一种设计被称为招待员。在 DM 欢迎程序中执行登录后,控制权将传递到桌面环境/窗口管理器 (DE/WM)。我仍然不清楚谁/什么首先启动了 DM;但如果启动了,我猜 DM 之后就是 DE/WM 的启动器(取决于登录身份验证和设置)。或者:

(boot start) --> initramfs --> scripts --> (kernel?) --> DM --> (login) --> DE+WM --> (boot completion)

我仍然无法正确区分 DE 和 WM,但例如,LXDE显然是 DE(根据名称);并且通常与openboxWM 一起使用。因此,换句话说,我在这里想要跳过 DM,直接以实时ubuntu用户身份转到 DE/WM。

回到启动脚本 - 特别是,init-bottomcasper-bottom在启动日志消息中可见 - 也可以在文件中找到/var/log/boot.log,一旦 ISO 完成启动,我们就可以使用less。这些脚本特别有趣:

$ sudo grep -ri "Adding live" ./FileSystem/usr/share/initramfs-tools/
./FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/25adduser:DESCRIPTION="Adding live session user..."

$ sudo grep -ri dm ./FileSystem/usr/share/initramfs-tools/scripts/ | grep 'if \['
(./FileSystem/usr/share/initramfs-tools/scripts/casper-bottom/15autologin)
15autologin:if [ -d /root/etc/gdm ]; then
15autologin:if [ -f /root/etc/kde4/kdm/kdmrc ]; then
15autologin:if [ -f /root/etc/lxdm/lxdm.conf ]; then
15autologin:if [ -f /root/etc/xdg/lubuntu/lxdm/lxdm.conf ]; then
15autologin:if [ -d /root/etc/lightdm ]; then

因此,autologin脚本基本上依靠显示管理器 (DM)已经安装(在 CD 映像中) - 并简单地搜索可能的配置文件,并使用 进行替换sed,这样特定的 DM 一旦启动(通常由任何启动它的人启动)就会执行自动登录。另一方面,脚本adduser创建实时用户ubuntu 从头开始在启动期间 - 因此,我们没有可以先验编辑和存储在 CD 映像上的文件。

不过,好消息是这些脚本肯定在/etc/rc.local运行之前运行,而运行在bash终端最终在启动结束时启动之前运行。所以我所做的就是使用该文件向用户/etc/rc.local“注入”X启动序列:~/.bashrcubuntu

$ tail -n 15 ./FileSystem/etc/rc.local 
#
# By default this script does nothing.

#sed -i 's/console/anyone/' /etc/X11/Xwrapper.config
#su - ubuntu -c "touch /home/ubuntu/.Xauthority"
#su - ubuntu -c startx
#sed -i 's/anyone/console/' /etc/X11/Xwrapper.config

echo ls -la /home/ubuntu
ls -la /home/ubuntu
# echo startx >> /home/ubuntu/.bashrc # this gives error "Server is already active for display 0"
echo 'if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then startx ; fi' >> /home/ubuntu/.bashrc
ls -la /home/ubuntu

exit 0

简而言之:

  • 试图捣乱.Xauthority在这里是没有用的;失败将是“ X: user not authorized to run the X server, aborting.
  • 只推startx.bashrc不会有帮助;失败(长时间黑屏后)将是“ Server is already active for display 0
  • 然而,startxif [ ... ]检查将成功(但我不明白为什么简单的事情会if []有所不同?)!

在我的例子中,该startx命令同时启动LXDEopenbox,因此 DE 和 WM(我还是不明白为什么)。所以现在一切看起来都很好 - 除了图标,而且我有没有关机、挂起、休眠和重启选项。但至少我的原帖中的直接问题已经解决了。不过,我仍然希望对这里发生的事情有一个更恰当的描述。


以下是我认为有用的一些链接/引述:

XDM(全称 X Window Display Manager)是 X Window 系统的默认显示管理器。它是一个基本的 X 显示管理器。它于 1988 年 10 月随 X11 Release 3 一起推出,以支持刚刚进入市场的独立 X 终端。

我不明白的是,为什么您要使用 xdm,而您却不打算使用它?我的意思是,让 xdm 自动登录恰恰与它的设计目的相反:为您提供图形登录提示。

使用运行级别 3 并将“su - -c startx”添加到 /etc/init.d/rc.local 或(如果使用 inittab)将“x:5:respawn:/etc/X11/prefdm -nodaemon”更改为“x:5:respawn:su - -c startx”。

如果您创建自己的 /etc/inittab 文件,Ubuntu 将会尊重它。

要以 Ubuntu 方式更改运行级别,请查看包含启动脚本的 /etc/init.d/。然后查看包含指向 /etc/init.d/ 中脚本的符号链接的 /etc/rc#.d/。符号链接的名称决定了将启动/停止的内容以及启动/停止的顺序。

在 bashrc 中尝试类似

[ -z "$DISPLAY" ] && startx && {sleep 5; DISPLAY=0:0 setsid Guake; }

为了自动启动,
编辑 .bash_profile (或登录时运行的其他文件)并添加

如果 [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; 那么
   启动

相关内容