Los equipos que hemos recibido para los laboratorios de informática son HP ProDesk 600 G2 SFF. Aunque en la licitación se supone que los equipos deberían ser compatibles 100% con Ubuntu y venir preparados para ello, lo cierto es que hemos tenido que resolver varias "features" por nuestra parte para hacerlos funcionales, estables y sin cuelgues.
Estos equipos traen 2 tarjetas VGA:
00:02.0 8086:1912 VGA compatible controller: Intel Corporation Sky Lake Integrated Graphics (rev 06)
01:00.0 10de:1287 VGA compatible controller: NVIDIA Corporation GK208 [GeForce GT 730] (rev a1)
La tarjeta Intel está en la placa y la nVidia está pinchada en un bus.
En el aspecto gráfico hemos tenido 2 problemas:
- Si encendemos el PC conectado por una salida DisplayPort al monitor (un HP ProDisplay P232) con éste apagado, al encender el monitor a posteriori resulta que permanece "fundido en negro" y no hay manera de ver nada, aunque el PC sea accesible por ssh.
- El uso o la simple presencia del driver xorg y/o el módulo del kernel "nouveau" provoca cuelgues aleatorios, en los que la pantalla se apaga y el equipo no es accesible por ssh.
Vamos a ver como resolver estos problemillas.
1) Solución al monitor que no muestra imagen al encenderse a posteriori.
Como este problema no aparecía con cables VGA estaba a punto de tirar la toalla y conectar todos los PC con cable VGA, pero afortunadamente mi compañero Francis Paniagua dió con la solución:
"He estado buscando información y he leído que desactivando DDC/CI Support en el propio monitor funcionaba ... pero nada, me he puesto a hacer mas pruebas y entrando en la configuración del monitor en "Input Control": desactivando "Auto Switch Input" (poner a valor Off) y poniendo "DP Hot-Plug Detection" a Always Active, sí funciona."
Pues nada, nos toca ir monitor a monitor haciendo esto, lástima de no tener un alumno castigado y aburrido para ayudarnos.
2) Solución 1 a los problemas provocados por el driver/módulo nouveau.
Esta consiste en instalar el driver propietario de nvidia, que anula el nouveau y usar la tarjeta nvidia para conectar la pantalla. Para ello me guié en
este enlace.
En esta solución, usada para el PC del profesor, quiero además que el monitor esté conectado a la salida DisplayPort y tener un cañon de video con la imagen del principal clonada en la salida DVI/VGA. Veamos los pasos:
1) Asegurarnos de que no se carga el módulo nouveau del kernel, metemos este fichero y reiniciamos:
# cat /etc/modprobe.d/nvidia-installer-disable-nouveau.conf
# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0
2) Paramos el lightdm desde consola.
# service lightdm stop
3) Entramos en consola y ejecutamos el fichero:
# ./NVIDIA-Linux-x86_64-361.28.run
que hemos descargado de la
página de drivers de nvidia y hecho ejecutable con "chmod +x". Si se queja por algo le decimos que si una y otra vez, lo importante es que continúe. Después de quejarse por todo llegamos al final y resulta que lo ha instalado. nVidia debería contratar a otra gente para hacer los instaladores: los que tiene ahora parecen una gincana.
4) Ajuste de resolución para cañón y pantalla:
Hemos dicho que queremos tener clonados monitor (salida DIRECTPORT) y cañon de vídeo (salida DVI). Si no es tu caso, olvida este apartado o adáptalo a tus circunstancias. Por experiencia puedo decir que lo mas sencillo es crear un script de inicio que use xrandr.
# cat /usr/bin/resolucion_infolab_nvidia
#!/bin/bash
test -e $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml && rm $HOME/.config/xfce4/xfconf/xfce-perchannel-xml/displays.xml
DVI=$(xrandr | grep " connected" | grep DVI | cut -d" " -f1)
DIRECTPORT=$(xrandr | grep " connected" | grep DP | cut -d" " -f1)
xrandr --output $DIRECTPORT --mode 1440x900 --pos 0x0 --rotate normal \
--output $DVI --mode 1024x768 --pos 0x0 --rotate normal \
--same-as $DIRECTPORT --scale-from 1440x900
exit 0
Que ejecutamos con:
# cat /etc/xdg/autostart/Resolucion.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=false
Icon[zh_CN]=
Exec=/usr/bin/resolucion_infolab_nvidia
Name[zh_CN]=Resolución
Name=Resolución
Icon=/usr/share/icons/gmusicbrowser.png
En plan maniático además añadimos un xorg.conf hecho a medida para la nvidia con la herramienta nvidia-settings que instala el driver propietario::
# cat /etc/X11/xorg.conf
# nvidia-settings: X configuration file generated by nvidia-settings
# nvidia-settings: version 361.28 (buildmeister@swio-display-x64-rhel04-04) Wed Feb 3 16:26:48 PST 2016
Section "ServerLayout"
Identifier "Layout0"
Screen 0 "Screen0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "Mouse0" "CorePointer"
Option "Xinerama" "0"
EndSection
Section "Files"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# generated from default
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "Monitor"
# HorizSync source: edid, VertRefresh source: edid
Identifier "Monitor0"
VendorName "Unknown"
ModelName "HP P232"
HorizSync 24.0 - 80.0
VertRefresh 50.0 - 60.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Device0"
Driver "nvidia"
VendorName "NVIDIA Corporation"
BoardName "GeForce GT 730"
Option "TwinViewOrientation" "Clone"
Option "TwinView"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Device0"
Monitor "Monitor0"
DefaultDepth 24
Option "Stereo" "0"
Option "nvidiaXineramaInfoOrder" "DFP-2"
Option "metamodes" "DP-1: 1440x900 +0+0, DVI-I-0: 1024x768 +0+0"
Option "SLI" "Off"
Option "MultiGPU" "Off"
Option "BaseMosaic" "off"
SubSection "Display"
Depth 24
EndSubSection
EndSection
Y ya como buen dobleplusparanoico he desactivado la tarjeta VGA intel (la que viene en la placa) en la BIOS del PC, de tal forma que al hacer "lspci | grep -i vga" sale solo la nVidia.
Con esto tenemos un sistema muy estable que no nos dará problemas.
3) Solución 2 a los problemas provocados por el driver/módulo nouveau.
Esta es la solución opuesta: ignorar la tarjeta nvidia y usar la Intel embebida en la placa base. Es la solución empleada para los PC de los alumnos, a los que conecto el monitor por el puerto Display Port 1 de esta tarjeta (que sorpresivamente tiene 3 salidas: 2 DisplayPort y 1 VGA).
Como son muchos PC lo he automatizado con estos recursos puppet:
# cat /etc/puppet/modules/infolab_ajustes/manifests/init.pp
import "/etc/puppet/defines/*.pp"
class infolab_ajustes {
......
......
#Los alumnos van con la tarjeta VGA intel, desactivamos nvidia y nouveau para evitar cuelgues innecesarios
file {"/etc/modprobe.d/disable-nouveau.conf":
owner => root , group => root , mode => 644 ,
source => "puppet:///modules/infolab_ajustes/disable-nouveau.conf",
}
#Añade a rc.local (si no está ya) el código que desactiva en el arranque la tarjeta VGA nvidia
add_line_above { desactiva_nvdia_vga_infolab:
file=> "/etc/rc.local",
line=> 'bus=$(lspci | grep "VGA compatible controller: NVIDIA" | cut -d" " -f1) ; test -n $bus && echo 1 > "/sys/bus/pci/devices/0000:$bus/remove"',
search=> "VGA compatible controller: NVIDIA",
above=> "^exit 0$"
}
#Desactivamos el DPMS en las X.
file {"/usr/share/X11/xorg.conf.d/10-monitor.conf":
owner => root , group => root , mode => 644 ,
source => "puppet:///modules/infolab_ajustes/10-monitor.conf",
......
......
}
El fichero que quita el módulo nouveau:
# cat /etc/puppet/modules/infolab_ajustes/files/disable-nouveau.conf
# generated by nvidia-installer
blacklist nouveau
options nouveau modeset=0
El que desactiva DPMS en la salida DP1 (adáptalo a tu caso):
# cat /etc/puppet/modules/infolab_ajustes/files/10-monitor.conf
Section "Monitor"
#Los monitores están en la salida DP1. Eso se averigua con xrandr si quieres adaptarlo a otro caso.
Identifier "DP1"
Option "DPMS" "false"
EndSection
Section "ServerLayout"
Identifier "ServerLayout0"
Option "StandbyTime" "0"
Option "SuspendTime" "0"
Option "OffTime" "0"
Option "BlankTime" "0"
EndSection
Y el rc.local que vaporiza la tarjeta VGA nvidia de los PC de los alumnos debe quedar:
# cat /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
............
bus=$(lspci | grep "VGA compatible controller: NVIDIA" | cut -d" " -f1) ; test -n $bus && echo 1 > "/sys/bus/pci/devices/0000:$bus/remove"
............
exit 0
Y con esto tenemos estables los PC de los alumnos. Vaya trabajito nos ha costado llegar aquí...