/etc/inittab
一般来说默认启动到命令行只需要将上面文件的 initdefault
改为相应的等级即可。但Ubuntu找不到/etc/inittab
文件,而且运行级别也有差别。
也就是说,默认情况下级别2、3、4、5都是一样的,同时系统的默认级别设定也不是在inittab
文件中,而是写在/etc/init/rc-sysinit.conf
文件中。打开此文件,可以找到下面一句:
env DEFAULT_RUNLEVEL=2
这表明系统当前默认是进入级别2。
另外,在此文见中还有一段以if [ -r /etc/inittab ]
开始的代码,这里保留了使用inittab
指定系统默认运行级别的功能,也就是说,如果用户手动创建了/etc/inittab
,那么init
将以/etc/inittab
中指定的默认运行级别进行系统的启动。比如说用户希望系统以级别3为默认运行级别,则只需在inittab
文件中加入如下一行:
id:3:initdefault:
在经过/etc/init/rc-sysinit.conf
确定运行级别后,init
将进一步运行/etc/init.d/rc
,然后根据级别进入/etc/rc[?].d
启动或关闭相应的服务。(参考 http://my.oschina.net/jackguo/blog/96656 )
下面是让 Ubuntu 默认启动到命令行的几种方法。
/etc/init/rc-sysinit.conf
,在第14行附近:确认env DEFAULT_RUNLEVEL=2
。2是新装系统默认的,确保不被修改。/etc/init/lightdm.conf
,在第12行附近,原句and runlevel [!06]
改为and runlevel [!026]
。系统启动过程中会有一个init
进程来拉起许多其他进程(各种系统服务,窗口界面)。在ubuntu上(11.10,12.04是这样,其他版本或其他linux发行版不确定)init
会执行两个目录下的脚本,一个是 /etc/init/
下的,另一个是/etc/rc?.d/
下的,问号可能是0~6的其中一个数字,代表运行级别。
在ubuntu上,init
进程首先执行/etc/init/
目录下的rc-sysinit.conf
,这个文件指明了本次启动的默认运行级别。上面第一步便是确保默认运行级别是2。接下来目录/etc/init
下的其他脚本的执行都会根据不同的运行级别做出不同的动作,比如lightdm
会判断运行级别是否处于1,2,3,4,5中的一个,是则启动lightdm
,不是则不启动lightdm
。这便是上面第二步的意义,修改lightdm.conf
,把2
加入到判断语句,使得lightdm
在运行级别2的时候不要启动。明白了这些,你就可以灵活一点,例如把默认级别设置为3,而把3加入那个判断语句,也可以达到阻止lightdm
启动的效果。完成了/etc/init/
目录下的启动动作,init
进程会继续执行/etc/rc2.d
目录下的脚本。
重启,即可发现开机后进入到命令行界面,并没有启动图形界面。
如果要进入图形界面,可以是使用命令
sudo init 3
注意,如果使用命令sudo init 2
不行,因为上面我们把它设置为无法启动图形界面了。
也不能使用命令startx
,因为如果使用这个命令会进入到一个界面,但是无法输入用户名和密码,据说这命令有问题,参考 http://forum.ubuntu.org.cn/viewtopic.php?t=401953
使用命令
sudo /etc/init.d/lightdm start
或者
sudo lightdm restart
也是可以的,只是会有几次跳转到命令行界面,需要手动回到图形界面(ctrl+alt+F7)。
(下面我其实没有碰到,比较第三种方法)
如果输入了登录密码后不能进入图形桌面,仍然回到登录界面,可以按 ctrl+alt+f1 返回命令行,会发现一个.Xauthority
的文件被拒绝写入,改变这个文件的权限
sudo chmod 646 .Xauthority
完成后,再sudo lightdm restart
,进入登录界面,输入密码后正常进入桌面
二者的区别,后者有点类似启动了某个程序,可以在刚开始的命令行界面 ctrl+c 关闭,而 init 3 则不知道怎么关闭。
重新回到默认启动图形界面,只需要将/etc/init/lightdm.conf
的改动恢复即可。
sudo vi /etc/default/grub
将其中一行
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
改为
GRUB_CMDLINE_LINUX_DEFAULT="text"
保存后
sudo update-grub
重启后发现进入到命令行界面。此时不能用sudo init 3
启动图形界面,只能使用
sudo /etc/init.d/lightdm start
或者
sudo lightdm restart
sudo vi /etc/X11/default-display-manager
里面就一行内容/usr/sbin/gdm
注释掉,加上一行false
重启即可。重启后屏幕上出现
* Stopping Light DM Display Manager [ OK ]
* Starting CUPS printing spooler/server [ OK ]
这个时候其实是位于 ctrl+alt+F7 的,切换到其他模式下即可,例如
ctrl+alt+F1
此时也不能用sudo init 3
启动图形界面,而需要用
sudo /etc/init.d/lightdm start
或者sudo lightdm restart
(下面实际当中碰到)
如果输入了登录密码后不能进入图形桌面,仍然回到登录界面,可以按 ctrl+alt+f1 返回命令行,会发现一个.Xauthority
的文件被拒绝写入,改变这个文件的权限
sudo chmod 646 .Xauthority
完成后,再sudo lightdm restart
,进入登录界面,输入密码后正常进入桌面
参考链接
http://blog.sina.com.cn/s/blog_698f90230100xt05.html
http://www.xuebuyuan.com/662992.html
http://forum.ubuntu.org.cn/viewtopic.php?t=401953
http://my.oschina.net/jackguo/blog/96656
CentOS7 不再使用init
托管服务了,改成了systemd
,也不需要/etc/inittab
这个文件。
命令模式
sudo systemctl set-default multi-user.target
图形模式
sudo systemctl set-default graphical.target
更改默认启动后输出示例
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
打开图形界面
sudo init 5
这里使用
startx
也可以,但二者不同的是init 5
会进入登录界面,需要重新输入用户名和密码,此时在terminal
输入sudo init 3
又可回到命令行模式;使用命令startx
直接进入到桌面,但与前者不同的是此时系统的语言变为英文的, 而且在terminal
输入sudo init 3
没有反应,此时可以通过sudo init 1
回到命令行模式,屏幕上会出现一些提示信息,没看懂,按下ctrl+d
等待一会就回到了命令行模式下。
参考链接
http://www.php230.com/weixin1410783943.html
https://blog.linuxeye.com/400.html