No logre activar HDMI en una computadora portátil (que tiene optimus / bumblebee)

17

Estoy tratando de usar la salida HDMI en una PC (HP ZBook) con Debian (stretch). He configurado Bumblebee, funciona bien (glxinfo y optirun glxinfo informan la información esperada, y probé sombreadores GLSL complicados que también funcionan como se esperaba).

Ahora me gustaría poder enchufar un videoproyector en el HDMI. He leído aquí [1] que la salida intel-virtual se puede usar para configurarla cuando el HDMI está conectado a la placa NVidia (usando una salida VIRTUAL que puede ser manipulada por xrandr). Sin embargo, intel-virtual-output dice:

 no VIRTUAL outputs on ":0"

Cuando lo hago xrandr -q, no aparece ninguna salida VIRTUAL, solo tengo:

Screen 0: minimum 320 x 200, current 1920 x 1080, maximum 8192 x 8192
eDP-1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 345mm x 194mm
   1920x1080     60.02*+  59.93  
   1680x1050     59.95    59.88  
   1600x1024     60.17  
   ... other video modes ...
   400x300       60.32    56.34  
   320x240       60.05  
DP-1 disconnected (normal left inverted right x axis y axis)
HDMI-1 disconnected (normal left inverted right x axis y axis)
DP-2 disconnected (normal left inverted right x axis y axis)
HDMI-2 disconnected (normal left inverted right x axis y axis)

Mi versión instalada de xserver-xorg-video-intel es: xserver-xorg-video-intel_2.99.917 + git20160706-1_amd64.deb

Actualización (sábado 09 de diciembre de 2016) He actualizado Debian, y ahora X falla cuando el segundo monitor está activo cuando inicio algunas aplicaciones (por ejemplo, xemacs). Se sentó. 17 de diciembre de 2016: ¡Sí, descubierto! (actualizado la respuesta).

Actualización (mié, 27 de septiembre de 2017) El método funciona en el 99% de los casos, pero la semana pasada probé un proyector que solo acepta modos de 50Hz y no pudo obtener nada más que 60Hz (por lo que no funcionó). ¿Alguien sabe cómo forzar modos de 50Hz?

Actualización (mar 01 oct 2019) ¡Argh! Roto de nuevo: después de actualizar X y el controlador NVidia, optirun ahora se bloquea ( /var/log/Xorg.8.logdice bloqueo en Xorg, OsLookupColor + 0x139). Actualización (07 oct 2019) Se encontró una solución temporal (respuesta actualizada).

[1] https://github.com/Bumblebee-Project/Bumblebee/wiki/Multi-monitor-setup

BrunoLevy
fuente
1
No es una respuesta porque esto no usa la GPU Nvidia, pero como FYI, con una laptop nvidia 960m optimus (diciembre de 2016 dell inspiron 15) con Fedora 25, puedo usar el monitor HDMI externo sin nvidia o controladores de abejorros instalados. Con esta configuración, el monitor hdmi externo no se detecta si lo enchufo después del arranque. Para que esto funcione, conecte el monitor HDMI antes del arranque, y en el menú de grub use el conmutador de monitor Fn-F8 para obtener un monitor duplicado, inicie sesión en X con wayland y obtenga un monitor extendido.
carlsborg

Respuestas:

20

Sí, descubrí! Para activar la salida VIRTUAL del controlador de Intel, debe crear un 20-intel.confarchivo en el directorio de configuración de Xorg ( /usr/share/X11/xorg.conf.den Debian Stretch, descubierto mediante lectura /var/log/Xorg.0.log)

Section "Device"
    Identifier "intelgpu0"
    Driver "intel"
    Option "VirtualHeads" "2"
EndSection

Mi /etc/bumblebee/xorg.conf.nvidia es el siguiente:

Section "ServerLayout"
    Identifier  "Layout0"
    Option      "AutoAddDevices" "true"
    Option      "AutoAddGPU" "false"
EndSection

Section "Device"
    Identifier  "DiscreteNvidia"
    Driver      "nvidia"
    VendorName  "NVIDIA Corporation"
    Option "ProbeAllGpus" "false"
    Option "NoLogo" "true"
    Option "AllowEmptyInitialConfiguration"
EndSection

Section "Screen"
    Identifier "Screen0"
    Device "DiscreteNVidia"
EndSection

Algunas explicaciones: necesita una sección "Pantalla", de lo contrario, intenta usar el dispositivo Intel declarado en 20-intel.conf (que acabamos de agregar antes, oh mi ...). También necesita "AllowEmptyInitialConfiguration" para poder comenzar con optirun cuando no hay un monitor externo conectado.

Con esta configuración e inicio intel-virtual-output, pude acceder a mi puerto HDMI. Yeehaa !!!

Solución de problemas: si funciona optiruno intel-virtual-outputno, eche un vistazo /var/log/Xorg.8.log(bumblebee crea un servidor X con pantalla: 8 utilizados internamente).

Notas he leído en varios lugares que KeepUnusedXServerse debe establecer en truey PMMethodpara noneen /etc/bumblebee/bumblebee.conf, yo no lo hicieron y trabaja muy bien. Si hago eso, funciona, pero la GPU discreta permanece encendida incluso después de salir de una aplicación optiruned o matar la salida de Intel virtual, que no quería.

Más notas Algo más que me hizo golpearme la cabeza contra la pared fue desactivar Nouveau e iniciar el servidor Intel X: debe hacerse mediante indicadores pasados ​​al núcleo, especificados en los parámetros de GRUB. En /etc/defaults/grub, tengo la siguiente línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet blacklist.nouveau=1 i915.modeset=1 gfxpayload=640x480 acpi_backlight=vendor acpi_osi=! acpi_osi=\"Windows 2009\""

(Cuidado con las citas y las citas escapadas).

Algunas explicaciones: evita cargar nouveau (que es incompatible con el servidor Nvidia X), y le dice al controlador Intel que vaya al modo de gráficos en el momento del arranque. Si no hace eso, entonces el servidor Intel X no puede iniciarse, y vuelve a un servidor VESA antiguo con representación 3D en el lado de la CPU. Los acpi_xxxindicadores se requieren en esta máquina específica para superar un error de BIOS que hace que se bloquee cuando entra en modo de gráficos con la GPU discreta apagada. Tenga en cuenta que es específico para este portátil en particular (estación de trabajo portátil HP ZBook), puede ser innecesario o diferente para otros portátiles.

Actualización (6 de diciembre de 2017) Con la última distribución de Debian (Buster), "915.modeset = 1 gfxpayload = 640x480" es innecesario. Para eliminar nouveau, también necesitaba crear un archivo nouveau.conf en /etc/modprobe.d con "blacklist nouveau", y luego volver a crear el ramdisk con "update-initramfs -u". Reinicie y asegúrese de que "nouveau" ya no esté cargado con "lsmod | grep nouveau".

Actualización (17 de diciembre de 2016) Con el último servidor xorg (1.19), parece haber un problema en una función RandR que administra Gamma cuando se usa con intel-virtual-output. Aquí está el procedimiento para parchar el Xserver y hacer que funcione:

sudo apt-get build-dep xserver-xorg-core
apt-get source xorg-server

edite hw / xfree86 / modes / xg86RandR12.c Line 1260, inserte "return" (para que la función xf86RandR12CrtcComputeGamma()no haga nada)

dpkg-buildpackage -rfakeroot -us -uc
cd ..
sudo dpkg -i xserver-xorg-core_n.nn.n-n_amd64.deb

(reemplace n.nn.n-ncon la versión correcta), reinicie y Yehaa !! funciona de nuevo! (pero es una solución rápida y sucia)

La actualización presentó un informe de error (ya se conocía y solo se corrigió): https://bugs.freedesktop.org/show_bug.cgi?id=99129

Cómo lo descubrí: lo instalé xserver-xorg-core-dbgy lo hice gdb /usr/lib/xorg/Xorg <xorg pid>desde otra máquina a través de ssh.

Actualización (11 de enero 17) Parece que el error ahora está corregido en los últimos paquetes de Debian.

Actualización (24 de enero de 18) Cuando desea conectar un proyector para hacer una presentación y necesita configurar todo justo antes de comenzar (intel-virtual-output + xrandr), puede ser estresante. Aquí hay un pequeño script que hace el trabajo (descargo de responsabilidad: mucho margen de mejora, con respecto al estilo, etc.):

# beamer.sh: sets Linux display for doing a presentation, 
#  for bumblebee configured on a laptop that has the HDMI
#  plugged on the NVidia board.
#
# Bruno Levy, Wed Jan 24 08:45:45 CET 2018
#
# Usage: 
#    beamer.sh widthxheight
#    (default is 1024x768)


# Note: output1 and output2 are hardcoded below,
#  change according to your configuration.
output1=eDP1
output2=VIRTUAL1

# Note: I think that the following command should have done
# the job, but it does not work. 
#    xrandr --output eDP1 --size 1024x768 --output VIRTUAL1 --size 1024x768 --same-as eDP1
# My guess: --size is not implemented with VIRTUAL devices.
# Thus I try to find a --mode that fits my needs in the list of supported modes.

wxh=$1

if [ -z "$wxh" ]; then
  wxh=1024x768
fi

# Test whether intel-virtual-output is running and start it.
ivo_process=`ps axu |grep 'intel-virtual-output' |egrep -v 'grep'`
if [ -z "$ivo_process" ]; then
   intel-virtual-output
   sleep 3
fi

# Mode names on the primary output are simply wxh (at least on
#  my configuration...)
output1_mode=$wxh

echo Using mode for $output1: $output1_mode

# Mode names on the virtual output are like: VIRTUAL1.ID-wxh
# Try to find one in the list that matches what we want.
output2_mode=`xrandr |grep $output2\\\. |grep $wxh |awk '{print $1}'`
# There can be several modes, take the first one.
output2_mode=`echo $output2_mode |awk '{print $1}'` 

echo Using mode for $output2: $output2_mode

# Showtime !
xrandr --output $output1 --mode $output1_mode --output $output2 --mode $output2_mode --same-as $output1

actualización (10/07/2019)

Una "solución" para el nuevo bloqueo: escriba lo que sigue en un script (llámelo, bumblebee-startx.shpor ejemplo):

optirun ls # to load kernel driver
/usr/lib/xorg/Xorg :8 -config /etc/bumblebee/xorg.conf.nvidia \
 -configdir /etc/bumblebee/xorg.conf.d -sharevts \
 -nolisten -verbose 3 -isolateDevice PCI:01:00:0 \
 -modulepath /usr/lib/nvidia/nvidia,/usr/lib/xorg/modules/

(reemplace PCI: nn: nn: n con la dirección de su tarjeta NVidia, obtenida con lspci)

Ejecutar esta secuencia de comandos desde una ventana de terminal como root ( sudo bumblebee-startx.sh), mantenga el terminal, luego abierta optiruny intel-virtual-outputel trabajo como se esperaba (nota: a veces tengo que correr xrandr, además de hacer que la pantalla / proyector de vídeo detectada). Ahora no entiendo por qué el mismo comando comenzó desde accidentes de abejorros, tantos misterios aquí ... (pero al menos da una solución temporal).

Cómo lo descubrí: escribí un script 'envoltorio' para iniciar el servidor x, lo declaró como XorgBinary en bumblebee.conf, lo hice guardar la línea de comando ($ *) en un archivo, probé algunas cosas que involucran LD_PRELOAD un parche en el XServer para solucionó el bloqueo en osLookupColor (no funcionó), pero cuando intenté iniciar la misma línea de comando a mano, funcionó y continuó funcionando sin mi parche (pero todavía no entiendo por qué).

Actualización 15/11/2019 Después de la actualización, experimenté muchos parpadeos, haciendo que el sistema fuera inutilizable. Se solucionó agregando el parámetro del kernel i915.enable_psr=0(en /etc/defaults/grub, entonces sudo update-grub). Si lo desea ahora, PSR significa 'actualización automática del panel', una función de ahorro de energía de las GPU de Intel (que puede causar parpadeo de la pantalla).

BrunoLevy
fuente
3
¡Tu me gustas tu! : D Estoy en Arch Linux, no pude comenzar intel-virtual-output. estaba saliendo con el código de salida 111. Incluso estaba tratando de averiguar qué estaba haciendo strace. Encontré tu publicación, la creé /etc/X11/xorg.conf.d/20-intel.confcomo la tuya, también agregué mi por BusID "PCI:2:0:0"si acaso. Utiliza configuraciones similares /etc/bumblebee/xorg.conf.nvidiay bam, intel-virtual-outputfunciona bien. xrandr¡ahora está detectando todos mis otros puertos! : D <3 la parte de /var/log/Xorg.8.log
resolución de
Ok, después de probar un poco, sí, veo los dispositivos enumerados xrandr, pero enganchar el cable me muestra el mouse, pero las ventanas no se muestran en la pantalla externa. A veces muestra una copia de mi pantalla principal y luego ambas pantallas se ponen negras y no pasa nada. y resultó que el sistema no comienza /etc/X11/xorg.conf.d/20-intel.confy no veo nada en los registros. De todos modos, gracias por compartir esto, supongo que me estoy acercando a una solución.
GabLeRoux
Puede depender del entorno de escritorio que esté utilizando. Estoy usando KDE, y necesitaba ajustar un poco la configuración de la pantalla en las preferencias.
BrunoLevy
Creo que lo tengo funcionando ahora. Estaba fallando con mi televisor, pero funciona con mi puerto de visualización :)
GabLeRoux
1
@BrunoLevy Finalmente funciona. ¡Gracias por darle a mi vieja computadora portátil una nueva oportunidad de vida!
Joseph R.