如何让TTY与NVIDIA驱动程序兼容?

如果我正在调试我的图形驱动程序,我依赖于按Ctrl + Alt + F1-F6访问的命令行。 但是,在安装了最新的NVIDIA驱动程序后,当我切换到这些TTY时屏幕会变黑。 我该如何让TTY与NVIDIA驱动程序一起工作?
我尝试了其他问题的一些建议,例如在此处“关闭为太局部”的问题中:How do I get my blacked out ttys back?和在此处非常详细的建议:Can't view output in tty. (Ctrl+alt+f1 to f6 don't work, and display a black screen). 我正在运行具有所有最新更新的Ubuntu 14.04。以下是一些系统信息:
└─>lspci | grep -i vga
01:00.0 VGA compatible controller: NVIDIA Corporation GK107M [GeForce GT 640M Mac Edition] (rev a1)

└─>lsmod
Module                  Size  Used by
pci_stub               12622  1 
vboxpci                23194  0 
vboxnetadp             25670  0 
vboxnetflt             27613  0 
vboxdrv               409768  3 vboxnetadp,vboxnetflt,vboxpci
bnep                   19624  2 
rfcomm                 69160  12 
nls_iso8859_1          12713  1 
arc4                   12608  2 
snd_hda_codec_hdmi     46254  1 
btusb                  32412  0 
bluetooth             391196  22 bnep,btusb,rfcomm
uvcvideo               80885  0 
videobuf2_vmalloc      13216  1 uvcvideo
videobuf2_memops       13362  1 videobuf2_vmalloc
videobuf2_core         40664  1 uvcvideo
videodev              134688  2 uvcvideo,videobuf2_core
b43                   387371  0 
snd_hda_codec_cirrus    18855  1 
mac80211              630653  1 b43
cfg80211              484040  2 b43,mac80211
ssb                    62379  1 b43
snd_hda_intel          52355  5 
snd_hda_codec         192906  3 snd_hda_codec_hdmi,snd_hda_intel,snd_hda_codec_cirrus
snd_hwdep              13602  1 snd_hda_codec
snd_pcm               102099  3 snd_hda_codec_hdmi,snd_hda_codec,snd_hda_intel
snd_page_alloc         18710  2 snd_pcm,snd_hda_intel
snd_seq_midi           13324  0 
snd_seq_midi_event     14899  1 snd_seq_midi
snd_rawmidi            30144  1 snd_seq_midi
snd_seq                61560  2 snd_seq_midi_event,snd_seq_midi
intel_rapl             18773  0 
x86_pkg_temp_thermal    14205  0 
intel_powerclamp       14705  0 
coretemp               13435  0 
snd_seq_device         14497  3 snd_seq,snd_rawmidi,snd_seq_midi
kvm_intel             143060  0 
snd_timer              29482  2 snd_pcm,snd_seq
kvm                   451511  1 kvm_intel
crct10dif_pclmul       14289  0 
crc32_pclmul           13113  0 
snd                    69238  21 snd_hwdep,snd_timer,snd_hda_codec_hdmi,snd_pcm,snd_seq,snd_rawmidi,snd_hda_codec,snd_hda_intel,snd_seq_device,snd_hda_codec_cirrus,snd_seq_midi
ghash_clmulni_intel    13216  0 
applesmc               19308  0 
input_polldev          13896  1 applesmc
aesni_intel            55624  0 
aes_x86_64             17131  1 aesni_intel
lrw                    13286  1 aesni_intel
gf128mul               14951  1 lrw
glue_helper            13990  1 aesni_intel
ablk_helper            13597  1 aesni_intel
cryptd                 20359  3 ghash_clmulni_intel,aesni_intel,ablk_helper
parport_pc             32701  0 
ppdev                  17671  0 
lpc_ich                21080  0 
lp                     17759  0 
bcma                   52096  1 b43
parport                42348  3 lp,ppdev,parport_pc
nvidia              10527448  31 
soundcore              12680  1 snd
drm                   303102  2 nvidia
video                  19476  0 
mac_hid                13205  0 
apple_bl               13993  0 
mei_me                 18627  0 
mei                    82276  1 mei_me
hid_apple              13386  0 
hid_generic            12548  0 
tg3                   166442  0 
sdhci_pci              23172  0 
sdhci                  43015  1 sdhci_pci
ptp                    18933  1 tg3
pps_core               19382  1 ptp
ahci                   25819  4 
usbhid                 52570  0 
libahci                32560  1 ahci
hid                   106148  3 hid_generic,usbhid,hid_apple
uvesafb                28686  0 

编辑:我正在使用来自xorg-edgers PPA的nvidia-340软件包。
└─>apt-cache policy nvidia-340
nvidia-340:
  Installed: 340.24-0ubuntu1~xedgers14.04.1
  Candidate: 340.24-0ubuntu1~xedgers14.04.1
  Version table:
 *** 340.24-0ubuntu1~xedgers14.04.1 0
        500 http://ppa.launchpad.net/xorg-edgers/ppa/ubuntu/ trusty/main amd64 Packages
        100 /var/lib/dpkg/status

我也尝试了在这里描述的禁用帧缓冲:http://forums.linuxmint.com/viewtopic.php?f=42&t=168108#p864284。仍然没有运气。
编辑:我现在正在使用来自xorg-edgers PPA的软件包nvidia-343
└─>apt-cache policy nvidia-343
nvidia-343:
  Installed: 343.13-0ubuntu1~xedgers14.04.1

还是没有运气。

我会从启动时添加“vga=773”到内核参数开始。或者通过添加“nomodeset”来禁用KMS。 - Rinzwind
我试过了。没有效果 - 屏幕仍然是黑的。 - Jonathan
你有安装Webmin吗?它可以显示所有在启动时加载的内容(以及其他功能),你可以启用或禁用TTYs。(当然还有其他方法可以做到这一点,但我发现Webmin非常易于使用)。它们已经启用了吗? - hatterman
如果您使用欢迎程序而不是 startx,调试可能会比较困难,因为任何修改都可能导致错误,并且您必须在看不到自己输入的情况下进行修复。尝试按ALT+CTRL+F1,几次按Ctrl+C,等待几秒钟,然后盲目地输入 sudo modprobe -r nvidia;sudo modprobe nvidia - Alex
@hatterman,不是TTY没有启用,而是当我切换到它们时,显示屏变黑了。 - Jonathan
@Alex,这似乎没有任何效果。我还尝试了盲目登录,输入那些命令,然后输入我的sudo密码,但也没有任何效果。 - Jonathan
如果按下Ctrl-Alt-F1等键时屏幕变黑,那么ttys是被禁用了,对吧? - hatterman
@hatterman,不,它们肯定是启用的,因为盲目输入命令仍然有效。只是它们没有显示出来。这显然是NVIDIA驱动程序的一个常见问题。 - Jonathan
超越常规思维,你试过这个吗?http://askubuntu.com/questions/463306/change-color-of-command-line-text - Elder Geek
你还有这个问题吗? - Elder Geek
Nvidia 340+驱动在Ubuntu(14.10)上对我无效。我相信我正在使用331版本。我的显卡是GTX 460,所以它已经有几年了,但理论上它仍然应该受到最新的Nvidia驱动程序的支持。不幸的是,我被困在旧版本中,无限期地使用它。 - nick
此外,每次我启动桌面时仍然会收到错误信息。不确定具体是什么问题,但肯定与Nvidia有关。尽管如此,我的机器非常稳定,我没有遇到331版本的任何问题。如果其他人也遇到这个问题,我建议从Nvidia官方网站下载.deb文件。 - nick
@ElderGeek,我还是遇到这个问题。 - Jonathan
@Jon 你能否编辑一下你的问题,告诉我们你尝试了哪些解决方案和建议以及结果如何? - Elder Geek
你看过这里相当详细的回答了吗?http://askubuntu.com/questions/61396/how-do-i-install-the-nvidia-drivers - Elder Geek
相关链接:http://askubuntu.com/questions/162535/why-does-switching-to-the-tty-give-me-a-blank-screen - Elder Geek
@所有人 + 在我看来,这似乎是一个用于显示情况的丢失矩阵?!(需要扫描给定的内存大小来进行此操作)+ - dschinn1001
7个回答

首先,
修复 grub 分辨率:
sudo nano /etc/default/grub

现在,请找到这行代码:

#GRUB_GFXMODE=640x480 

将其更改为所需分辨率,即将1280x800更改为:
GRUB_GFXMODE=1280x800 
GRUB_GFXPAYLOAD_LINUX=keep

接下来,

添加帧缓冲区(不,这不是拼写错误;使用 echo 两次):

echo "echo FRAMEBUFFER=y" | sudo tee /etc/initramfs-tools/conf.d/splash

最后,更新grub和initramfs:
sudo update-initramfs -u
sudo update-grub

重新启动以使更改生效

什么是帧缓冲?这个echo命令到底是做什么的? - steoiatsl
@minamichael https://en.m.wikipedia.org/wiki/Linux_framebuffer @minamichael https://zh.wikipedia.org/wiki/Linux_Framebuffer - mchid

昨晚更新软件包/内核后,我遇到了同样的问题,安装了这些软件后,我的nVidia显卡又被检测到了。
nvidia-331
nvidia-331-updates
nvidia-current
nvidia-current-updates
xserver-xorg-lts-raring
nvidia-prime

当然你可以用其他版本的软件库替换311,但我认为解决问题的是xserver-xorg-lts-raring。
然后运行。
glxinfo | grep renderer

应该显示你的卡片(之前对我来说没有显示)。



是的。在上面的编辑中,我展示了哪个版本(nvidia-340)。我既不使用KDE也不使用Unity,但这并不重要,因为TTY应该在任何桌面环境之前/之后。 - Jonathan
1虽然这个链接理论上可以回答问题,但请尽量在帖子中总结链接内容。链接有时会失效。此外,“P.S.”并不是很恰当的形式,尤其是对于问题来说。相反,请在原始帖子中进行评论。 - Kaz Wolfe
@Whaaaaaat,只是为了记录,上面的链接并没有回答问题。在问题中,我解释了如何使用该链接中的指南安装xorg-edgers PPA,这个PPA提供了我正在使用的驱动程序,而这些驱动程序正是导致这个问题的原因。 - Jonathan
@Jon 这就是为什么我说“可能”。 - Kaz Wolfe

用你的文本编辑器打开这个文件

sudo gedit /etc/default/grub

编辑此内容以符合您的要求:
GRUB_GFXMODE=1920x1080
GRUB_GFXPAYLOAD_LINUX=keep

保存并退出:
按下Ctrl+O进行保存
按下Ctrl+X进行退出
更新GRUB并重新启动:
sudo update-grub
sudo reboot

你能详细解释一下这个答案吗?将初始的GRUB图形模式设置为特定的分辨率如何防止终端显示为黑屏? - Elder Geek
这只是一个尝试。我知道我的TTY正在高分辨率下运行。可能发生的一件事是显示器本身可能不支持低分辨率。因此,尝试将其设置为更高的分辨率可能会解决问题。 - David
好想法。我们应该弄清楚他的显示器支持什么。 - Elder Geek
由於重要的是更新grub並重新啟動,否則您將無法看到解析度變化,所以我添加了一些我忘記提及的額外步驟。 - David

你是否尝试过为你的特定设备下载驱动程序,并通过WINE运行安装程序?这是你可以尝试的一种可能途径。当我运行Ubuntu 13.10时,它无法识别我的nVidia显卡,所以我也做了同样的事情。我把安装光盘放进电脑,在光驱上右键单击“在WINE中运行”。然后安装完成后,我只需将Ubuntu调整到正确的分辨率,就可以使用了。我只需要将驱动程序移动到驱动器下的C驱动器,并重新启动Ubuntu。我不确定这是否适用于所有不同的设备,但如果你问我,这值得一试。

你试过使用所有的启动选项了吗?
nomodeset, noapic no1apic,
等等(livecd提供了完整的列表,这个链接也有:https://help.ubuntu.com/community/BootOptions
当我遇到显示问题时,我尝试了这些选项,直到找到一个能让我进入可用系统的选项。然后从那里,我能够解决问题并移除启动选项。