"Después del juego es antes del juego"
Sepp Herberger

jueves, 14 de abril de 2016

Configurando la VGA en los HP ProDesk 600 G2 SFF (Parte I)

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í...

6 comentarios:

  1. ¡Buen artículo Alfonso!
    Dos cuestiones para el apdo de alumnos:
    1) ¿hay que hacer algún cambio en la uefi/bios ->advanced -> seleccionando la intel en vez de la nvidia
    2) ¿qué puede estar ocurriendo si el mensaje can open display me sale cada vez que quiero ver con xandr el dp activo?
    gracias por tu trabajo nuevamente!!

    ResponderEliminar
  2. otra vez yo. sobre la segunda cuestión anterior, me pasaba porque el terminal sobre el que escribo el comando no estaba en modo grafico sino alfanumérico...
    queda la primera cuestión.
    Después de dejarlos infolabs encendidos toda la noche, hoy había algunos que no podían despertar. Todos estaban conectado por dp a la nvidia ¿Sería este síntoma de alguno de los problemas que comentabas daba el driver nvidia ?

    ResponderEliminar
    Respuestas
    1. En la BIOS puedes hacer 2 cosas, en sus opciones correspondientes: 1) deshabilitar por completo la intel de tal forma que solo se detecte la nvdia 2) dejar ambas activas e indicar cual es la tarjeta "prioritaria". En el documento colaborativo de infolabs tienes la ubicación y nombre concreto de cada opción.

      El xrandr solo funciona sobre terminal gráfico, dentro de una sesión X. Nunca desde consola o ssh. Si no hay sessión x, no hay xrandr.

      Sobre infolabs que no despiertan, suele ser a que están en suspensión. El compañero Francis del IES Francisco de Orellana envió uan tarjeta que impide que los equipos entren en suspensión e hibernación. Yo con eso he logrado que no se me queden en el "limbo" y arranquen todos.

      Eliminar
  3. Tenemos en un aula 30 equipos PC HP ProDesk 600 G2 con factor de forma reducido.
    Hemos tenido problemas con el Windows 10 que viene preinstalado.

    Primero: el ordenador conectado a un cañón de proyección se ponía en reposo de repente a pesar de haber desactivado el reposo, y no había forma de recuperarlo salvo desenchufando el equipo.

    Segundo: Estos equipos traen dos discos duros y curiosmante el disco SSD es muchísimo más lento que el HDD.

    Tercero: Decidimos instalar Linux como sistema huesped y Widnows 10 con licencia como sistema invitado sobre Virtual Box
    y los equipos van cada vez más lentos, hasta el punto de quedarse totalmente congelados, sin responder ni teclado ni ratón, ni tan siquiera el boton de encendido/apagado, teniendo que desenchufar los ordenadores para después de volver a arrancarlos poder trabajar al menos 15 minutos más.

    Llevamos varios años trabajando con sistemas virtuales sobre todo tipo de sistemas huesped y jamás nos habíamos encontrado con estos problemas.

    ResponderEliminar
    Respuestas
    1. Pues si has tenido problemas con Windows 10 yo pediría soporte a HP o a Microsoft, ya que las licencias te dan derecho a ello.

      En Linux, con equipos cada vez mas lentos puedes usar "top" "atop" e "iotop" para ver que los ralentiza.



      Eliminar
  4. Gracias por responder tan rápido.
    HP no me responde, creo que pasan si no dejas el sistema que traen los equipos. Yo ya he quitado el W10, eliminando las particiones y reinstalando Xubuntu.
    Microsoft me temo que no le gusta que se virtualicen sus sistemas.
    Muchas gracias no obstante. Probaré lo comandos que me indicas.

    ResponderEliminar