Linux 系统在哪里/何时更改控制台显示模式?

ein*_*lum 6 linux console display screen-resolution boot

我正在我的一个盒子上安装 Debian Wheezy (7.0rc1)。由于我不会在这里讨论的原因,我不希望在启动期间(或之后)将帧缓冲区用于控制台显示。为了避免这种情况,我补充说:

GRUB_TERMINAL=console
GRUB_GFXPAYLOAD_LINUX=keep
Run Code Online (Sandbox Code Playgroud)

/etc/default/grub。事实上,我在 grub 中获得了文本模式,并且在启动的前几秒钟内。但是,控制台会切换到那个地狱般的帧缓冲区!:

[    4.407402] Console: switching to colour frame buffer device 128x48
[    4.408544] fb0: nouveaufb frame buffer device
Run Code Online (Sandbox Code Playgroud)

(这是摘自/var/log/dmesg。)

我在/etc/init.d脚本的任何地方都找不到它的踪迹。我想,也许它是与内核模块加载-我没有发现什么有趣的/etc/modules/etc/modprobe.d两种。

那么,这种情况何时/何地发生?我怎样才能避免这种切换?

ein*_*lum 8

(基于@MichaelHampton 的回答

显然,Linux 内核甚至在init 进程运行之前就设置了显示模式。现在,内核从引导加载程序中获取参数- 所以要做的是设置参数告诉它不要切​​换显示模式。然而,这还不是全部:在设置显示模式之后,还有一个字体设置本身就会使您的显示变得很糟糕;在 Debian Wheezy 上,这是由 完成的/etc/init.d/console-setup,因此您还必须考虑它究竟做了什么。

为了更加协调,你应该做的是:

  1. 在 中/etc/default/grub,添加行

     GRUB_CMDLINE_LINUX="nomodeset"
    
    Run Code Online (Sandbox Code Playgroud)

    或者,如果您已经有一个GRUB_CMDLINE_LINUX设置,请附加nomodeset到它。

  2. /etc/default/console-setup,替换

    FONTFACE="Fixed"
    
    Run Code Online (Sandbox Code Playgroud)

    FONTFACE="VGA"
    
    Run Code Online (Sandbox Code Playgroud)

    或者,不要/etc/init.d/console-setup在 rcS 非级别中运行(例如使用update-rc.d命令)。

    据我所知,“VGA”字体与您已经拥有的字体相同,因此如果您选择此字体,则更改字体不应有任何影响。但是,我不完全确定这是否普遍正确,因此也许您最好完全避免字体更改。