Non riesci ad attivare HDMI su un laptop (che ha optimus / bumblebee)


17

Sto cercando di utilizzare l'uscita HDMI su un PC (HP ZBook) con Debian (tratto). Ho configurato Bumblebee, funziona bene (glxinfo e optirun glxinfo riportano le informazioni previste e ho testato shader GLSL complicati che funzionano anche come previsto).

Ora vorrei essere in grado di collegare un videoproiettore su HDMI. Ho letto qui [1] che l'intel-virtual-output può essere usato per configurarlo quando l'HDMI è collegato sulla scheda NVidia (usando un'uscita VIRTUAL che può essere manipolata da xrandr). Tuttavia, intel-virtual-output dice:

 no VIRTUAL outputs on ":0"

Quando lo faccio xrandr -q, non è elencato alcun output VIRTUAL, ho solo:

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)

La mia versione installata di xserver-xorg-video-intel è: xserver-xorg-video-intel_2.99.917 + git20160706-1_amd64.deb

Aggiornamento (sabato 09 dicembre 2016) Ho aggiornato Debian e ora X si arresta in modo anomalo quando il secondo monitor è attivo quando avvio alcune applicazioni (ad esempio xemacs). Sat. 17 dicembre 2016: Sì, scoperto! (aggiornata la risposta).

Aggiornamento (mercoledì 27 settembre 2017) Il metodo funziona nel 99% dei casi, ma la settimana scorsa ho provato un proiettore che accetta solo modalità a 50Hz e non è stato possibile ottenere nient'altro che 60Hz (quindi non ha funzionato). Qualcuno sa come forzare le modalità a 50Hz?

Aggiornamento (mar 01 ott 2019) Argh! Rotto di nuovo: dopo aver aggiornato X e il driver NVidia, optirun ora si arresta /var/log/Xorg.8.login modo anomalo ( dice crash in Xorg, OsLookupColor + 0x139). Aggiornamento (07 ott 2019) Trovata una correzione temporanea (risposta aggiornata).

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


1
Non è una risposta perché questa non utilizza la GPU Nvidia, ma come FYI - con un laptop nvidia 960m optimus (dicembre 2016 dell inspiron 15) con Fedora 25, posso usare il monitor HDMI esterno senza nessun driver nvidia o bumblebee installato. Con questa configurazione, il monitor hdmi esterno non viene rilevato se lo collego dopo l'avvio. Per farlo funzionare, collega il monitor HDMI prima dell'avvio e nel menu di grub usa lo switcher monitor Fn-F8 per ottenere un monitor con mirroring, accedi a X con wayland e ottieni un monitor esteso.
Carlsborg,

Risposte:


20

Sì, scoperto! Per attivare l'output VIRTUAL del driver Intel, è necessario creare un 20-intel.conffile nella directory di configurazione di Xorg ( /usr/share/X11/xorg.conf.din tratto Debian, scoperto leggendo /var/log/Xorg.0.log)

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

Il mio /etc/bumblebee/xorg.conf.nvidia è il seguente:

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

Alcune spiegazioni: ha bisogno di una sezione "Schermo", altrimenti tenta di utilizzare il dispositivo Intel dichiarato in 20-intel.conf (che abbiamo appena aggiunto prima, oh mio ...). È inoltre necessario "AllowEmptyInitialConfiguration" per rimanere in grado di iniziare con optirun quando non è collegato alcun monitor esterno.

Con questa configurazione e l'avvio intel-virtual-output, sono stato in grado di accedere alla mia porta HDMI. Yeehaa !!!

Risoluzione dei problemi: se optiruno intel-virtual-outputnon funzionano, dare un'occhiata a /var/log/Xorg.8.log(calabrone crea un server X con display: 8 utilizzato internamente).

Note che ho letto in diversi luoghi che KeepUnusedXServerdevono essere impostati su truee PMMethodad nonea /etc/bumblebee/bumblebee.conf, non ho fatto che e funziona benissimo. Se lo faccio, funziona, ma poi la GPU discreta rimane accesa anche dopo essere uscito da un'applicazione optirun o aver ucciso l'output virtuale-intel, che non volevo.

Altre note Qualcos'altro che mi ha fatto sbattere la testa sul muro stava disattivando Nouveau e avviando il server Intel X: deve essere fatto da flag passati al kernel, specificati nei parametri di GRUB. In /etc/defaults/grub, ho la seguente riga:

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

(attenzione alle virgolette e alle citazioni di escape).

Alcune spiegazioni: evita il caricamento di nouveau (che è incompatibile con il server Nvidia X) e dice al driver Intel di passare alla modalità grafica proprio all'avvio. Se non lo fai, il server Intel X non può avviarsi e ricade su un vecchio server VESA con rendering 3D sul lato CPU. I acpi_xxxflag sono richiesti su questa macchina specifica per superare un bug del BIOS che lo fa in crash quando si va in modalità grafica con la GPU discreta disattivata. Si noti che è specifico per questo particolare notebook (workstation portatile HP ZBook), potrebbe non essere necessario o differire per altri laptop.

Aggiornamento (6 dic 2017) Con l'ultima distribuzione Debian (Buster), "915.modeset = 1 gfxpayload = 640x480" non è necessario. Per rimuovere nouveau, avevo anche bisogno di creare un file nouveau.conf in /etc/modprobe.d con "blacklist nouveau", quindi ricreare il ramdisk con "update-initramfs -u". Riavvia e assicurati che "nouveau" non sia più caricato con "lsmod | grep nouveau".

Aggiornamento (17 dic 2016) Con l'ultimo xorg-server (1.19), sembra esserci un problema in una funzione RandR che gestisce Gamma quando usato con intel-virtual-output. Ecco la procedura per patchare Xserver e farlo funzionare:

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

modifica hw / xfree86 / modes / xg86RandR12.c Riga 1260, inserisci "return" (in modo che la funzione xf86RandR12CrtcComputeGamma()non faccia nulla)

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

(sostituisci n.nn.n-ncon la versione corretta), riavvia e Yehaa !! funziona di nuovo! (ma è una soluzione rapida e sporca)

L'aggiornamento ha presentato una segnalazione di bug (era già noto ed è stato appena corretto): https://bugs.freedesktop.org/show_bug.cgi?id=99129

Come ho capito: installato xserver-xorg-core-dbge fatto gdb /usr/lib/xorg/Xorg <xorg pid>da un'altra macchina tramite ssh.

Aggiornamento (11 gennaio 17) Sembra che il bug sia stato corretto negli ultimi pacchetti Debian.

Aggiornamento (24 gennaio 18) Quando si desidera collegare un proiettore per fare una presentazione e è necessario configurare tutto subito prima di iniziare (intel-virtual-output + xrandr), può essere stressante. Ecco una piccola sceneggiatura che fa il lavoro (dichiarazione di non responsabilità: molto margine di miglioramento, riguardo allo stile ecc ...):

# 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

aggiornamento (10/07/2019)

Una "correzione" per il nuovo crash: scrivi ciò che segue in uno script (chiamalo bumblebee-startx.shper esempio):

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/

(sostituisci PCI: nn: nn: n con l'indirizzo della tua scheda NVidia, ottenuto con lspci)

Eseguire questo script da una finestra di terminale come root ( sudo bumblebee-startx.sh), tenere il terminale aperto, quindi optirune intel-virtual-outputil lavoro come previsto (nota: a volte ho bisogno di correre xrandroltre a rendere lo schermo / videoproiettore rilevato). Ora non capisco perché lo stesso comando sia partito da crash di calabrone, così tanti misteri qui ... (ma almeno dà una soluzione temporanea).

Come ho capito: ho scritto uno script 'wrapper' per avviare l'xserver, lo ha dichiarato come XorgBinary in bumblebee.conf, l'ho fatto salvare la riga di comando ($ *) in un file, ho provato alcune cose che coinvolgono LD_PRELOADing una patch sull'XServer per risolto il crash in osLookupColor (non funzionava), ma quando ho provato a lanciare manualmente la stessa riga di comando, ha funzionato e ha continuato a funzionare senza la mia patch (ma ancora non capisco perché).

Aggiornamento 15/11/2019 Dopo l'aggiornamento, ho riscontrato un sacco di sfarfallio, rendendo il sistema inutilizzabile. Risolto aggiungendo il parametro del kernel i915.enable_psr=0(in /etc/defaults/grub, quindi sudo update-grub). Se lo desideri ora, PSR significa "aggiornamento automatico del pannello", una funzione di risparmio energetico delle GPU Intel (che può causare sfarfallio dello schermo).


3
Tu mi piaci! : D Sono su Arch Linux, non sono stato in grado di iniziare intel-virtual-output. stava uscendo con il codice di uscita 111. Stavo persino cercando di capire cosa stesse facendo strace. Ho trovato il tuo post, l'ho creato /etc/X11/xorg.conf.d/20-intel.confproprio come il tuo, ho aggiunto anche il mio BusID "PCI:2:0:0"per ogni evenienza. Usato impostazioni simili /etc/bumblebee/xorg.conf.nvidiae bam, intel-virtual-outputfunziona bene. xrandrora sta rilevando tutte le mie altre porte! : D <3 la parte Risoluzione dei problemi su /var/log/Xorg.8.logdavvero aiutato
GabLeRoux

Ok dopo aver testato un po ', sì, vedo i dispositivi elencati xrandr, ma l'aggancio del cavo mi mostra il mouse, ma le finestre non vengono visualizzate sul display esterno. A volte mostra una copia della mia schermata principale e quindi entrambe le schermate diventano nere e non succede nulla. e si è scoperto che il sistema non inizia con /etc/X11/xorg.conf.d/20-intel.confe non vedo nulla nei registri. Comunque, grazie per averlo condiviso, suppongo che mi sto avvicinando a una soluzione.
GabLeRoux l'

Potrebbe dipendere dall'ambiente desktop che si sta utilizzando. Sto usando KDE e ho dovuto modificare un po 'la configurazione dello schermo nelle preferenze.
BrunoLevy,

Penso di averlo fatto funzionare ora.
Stava

1
@BrunoLevy Finalmente funziona. Grazie per aver dato al mio vecchio laptop una nuova prospettiva di vita!
Joseph R.,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.