Ubuntu – Can’t detect external monitor on Thinkpad W530 running Ubuntu 14.04

driversmultiple-monitorsnvidiathinkpad

I have a Thinkpad W530 running Ubuntu 14.04; I've tried connecting external monitors via both VGA and DisplayPort, but neither are being detected.

I turned off Optimus, and am only using the discrete graphics card (an NVIDIA Quadro K1000M). I'm using the "recommended proprietary driver" (according to System Tools -> Preferences -> Additional Drivers): NVIDIA binary driver – version 331.38 from nvidia-331 (proprietary, tested). I've also tried the nvidia-current package, which I think is version 304, but it's not working either.

lshw -C video gives

*-display UNCLAIMED     
   description: VGA compatible controller
   product: GK107GLM [Quadro K1000M]
   vendor: NVIDIA Corporation
   physical id: 0
   bus info: pci@0000:01:00.0
   version: a1
   width: 64 bits
   clock: 33MHz
   capabilities: pm msi pciexpress vga_controller bus_master cap_list
   configuration: latency=0
   resources: memory:f2000000-f2ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff ioport:5000(size=128) memory:f3080000-f30fffff

The "UNCLAIMED" thing is weird, since the laptop display is working fine (and with the correct resolution and all).

Strangely, nvidia-settings gives me a window that looks significantly different from what is claimed at the Ubuntu help page, which shows detected X screens on the left:
screenshot according to Ubuntu help page

Instead, I see
"Application Profiles"
which seems a lot less helpful.

Best Answer

Well, here's what I did to fix it (and I'm not 100% sure that it's fixed, but it seems like it! Hopefully there's no regressions!) Everything is run as sudo; I probably rebooted at some points during this, but I don't remember exactly when :/ I'm guessing you should reboot after step 5, and maybe after step 3.

  1. Disable Optimus in BIOS; only use the discrete NVIDIA video card.
  2. apt-get remove --purge bumblebee nvidia*
  3. apt-get install --reinstall libgl1-mesa-dri libgl1-mesa-glx libegl1-mesa-drivers
  4. apt-get install nvidia-common nvidia-settings nvidia-331
  5. Run nvidia-xconfig (not sure if this is necessary, but it seems like you have to do it at some point)
  6. Add nvidia_331 to /etc/modules
  7. At this point, my libGL was pointing to mesa's version of openGL for whatever reason, so I followed the advice here: I added /usr/lib/nvidia-331 and /usr/lib32/nvidia-331 to /usr/lib/nvidia-331/alt_ld.so.conf, and ran ldconfig.

And now I have multiple external monitors connected, openGL working, and no weird pixelly artifacts on my screen. Nvidia persistenced daemon doesn't crash on boot, and the nvidia kernel module is loaded on boot.

Related Question