我正在尝试使用 构建自定义 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(根据名称);并且通常与openbox
WM 一起使用。因此,换句话说,我在这里想要跳过 DM,直接以实时ubuntu
用户身份转到 DE/WM。
回到启动脚本 - 特别是,init-bottom
和casper-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
启动序列:~/.bashrc
ubuntu
$ 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
” - 然而,
startx
在if [ ... ]
检查将成功(但我不明白为什么简单的事情会if []
有所不同?)!
在我的例子中,该startx
命令同时启动LXDE
和openbox
,因此 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 ]; 那么 启动 菲