Jangan mengelola untuk mengaktifkan HDMI pada laptop (yang memiliki optimus / lebah)

17

Saya mencoba menggunakan output HDMI pada PC (HP ZBook) dengan Debian (stretch). Saya telah mengkonfigurasi Bumblebee, ini berfungsi dengan baik (glxinfo dan optirun glxinfo melaporkan informasi yang diharapkan, dan saya menguji GLSL shader rumit yang juga berfungsi seperti yang diharapkan).

Sekarang saya ingin bisa memasang videoprojector pada HDMI. Saya telah membaca di sini [1] bahwa intel-virtual-output dapat digunakan untuk mengkonfigurasinya ketika HDMI terhubung pada papan NVidia (menggunakan output VIRTUAL yang dapat dimanipulasi oleh xrandr). Namun, intel-virtual-output mengatakan:

 no VIRTUAL outputs on ":0"

Ketika saya melakukannya xrandr -q, tidak ada output VIRTUAL terdaftar, saya hanya punya:

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)

Versi xserver-xorg-video-intel yang saya instal adalah: xserver-xorg-video-intel_2.99.917 + git20160706-1_amd64.deb

Pembaruan (Sabtu, 09 Des 2016) Saya telah memperbarui Debian, dan sekarang X macet ketika monitor kedua aktif ketika saya memulai beberapa aplikasi (misalnya xemacs). Duduk. 17 Des 2016: Ya, ketahuan! (memperbarui jawabannya).

Pembaruan (Rabu 27 September 2017) Metode ini bekerja di 99% kasus, tetapi minggu lalu saya mencoba beamer yang hanya menerima mode 50Hz, dan tidak bisa mendapatkan apa pun selain 60Hz (sehingga tidak bekerja). Adakah yang tahu cara memaksa mode 50Hz?

Perbarui (Sel 01 Okt 2019) Argh! Rusak lagi: Setelah memperbarui X dan driver NVidia, optirun sekarang macet ( /var/log/Xorg.8.logkata crash di Xorg, OsLookupColor + 0x139). Pembaruan (07 Okt 2019) Menemukan perbaikan sementara (jawaban yang diperbarui).

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

BrunoLevy
sumber
1
Bukan jawaban karena ini tidak menggunakan GPU Nvidia, tetapi sebagai FYI - dengan laptop optimus 960m nvidia (des 2016 dell inspiron 15) yang menjalankan Fedora 25, saya dapat menggunakan monitor HDMI eksternal tanpa driver nvidia atau bumblebee terpasang. Dengan pengaturan ini, monitor HDMI eksternal tidak terdeteksi jika saya pasang setelah boot. Untuk membuatnya bekerja, pasang monitor HDMI sebelum boot, dan pada menu grub gunakan switcher monitor Fn-F8 untuk mendapatkan monitor cermin, masuk ke X dengan wayland dan dapatkan monitor tambahan.
carlsborg

Jawaban:

20

Ya, tahu! Untuk mengaktifkan output VIRTUAL dari driver intel, Anda perlu membuat 20-intel.conffile di direktori konfigurasi Xorg (di /usr/share/X11/xorg.conf.dbawah Debian stretch, ditemukan dengan membaca /var/log/Xorg.0.log)

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

/Etc/bumblebee/xorg.conf.nvidia saya adalah sebagai berikut:

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

Beberapa penjelasan: ia memerlukan bagian "Layar", jika tidak ia mencoba menggunakan perangkat Intel yang dideklarasikan dalam 20-intel.conf (yang baru saja kami tambahkan sebelumnya, oh my ...). Ini juga membutuhkan "AllowEmptyInitialConfiguration" untuk tetap dapat memulai dengan optirun ketika tidak ada monitor eksternal yang terpasang.

Dengan konfigurasi dan permulaan ini intel-virtual-output, saya dapat mengakses port HDMI saya. Yeehaa !!!

Pemecahan masalah: jika optirunatau intel-virtual-outputtidak bekerja, lihatlah /var/log/Xorg.8.log(bumblebee membuat server X dengan tampilan: 8 digunakan secara internal).

Catatan Saya membaca di beberapa tempat yang KeepUnusedXServerharus ditetapkan untuk truedan PMMethoduntuk nonedi /etc/bumblebee/bumblebee.conf, saya tidak melakukan itu dan itu bekerja dengan baik. Jika saya melakukan itu, itu berfungsi, tetapi kemudian GPU diskrit tetap menyala bahkan setelah keluar dari aplikasi optirun-ed atau membunuh intel-virtual-output, yang tidak saya inginkan.

Lebih banyak catatan Sesuatu yang lain yang membuat saya membenturkan kepala saya ke dinding adalah menonaktifkan Nouveau dan memulai server Intel X: perlu dilakukan oleh flag yang diteruskan ke kernel, ditentukan dalam parameter GRUB. Di /etc/defaults/grub, saya memiliki baris berikut:

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

(waspadalah dengan kutipan dan lolos dari penawaran).

Beberapa penjelasan: ia menghindari memuat nouveau (yang tidak kompatibel dengan server Nvidia X), dan memberi tahu driver Intel untuk masuk ke mode grafis tepat saat boot. Jika Anda tidak melakukan itu, maka server Intel X tidak dapat memulai, dan jatuh kembali ke server VESA biasa dengan rendering 3D sisi-CPU. The acpi_xxxbendera yang diperlukan pada mesin tertentu untuk mengatasi bug BIOS yang membuatnya menabrak ketika akan dalam mode grafis dengan GPU diskrit off. Perhatikan bahwa ini khusus untuk notebook khusus ini (HP ZBook portable workstation), mungkin tidak perlu atau berbeda untuk laptop lain.

Pembaruan (6 Des 2017) Dengan distro (Buster) Debian terbaru, "915.modeset = 1 gfxpayload = 640x480" tidak diperlukan. Untuk menghapus nouveau, saya juga perlu membuat file nouveau.conf di /etc/modprobe.d dengan "blacklist nouveau" di dalamnya, lalu buat ulang ramdisk dengan "update-initramfs -u". Nyalakan kembali dan pastikan "nouveau" tidak dimuat lagi dengan "lsmod | grep nouveau".

Pembaruan (17 Des 2016) Dengan xorg-server terbaru (1,19), tampaknya ada masalah dalam fungsi RandR yang mengelola Gamma saat digunakan bersama intel-virtual-output. Berikut adalah prosedur untuk menambal Xserver dan membuatnya berfungsi:

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

edit hw / xfree86 / mode / xg86RandR12.c Baris 1260, masukkan "kembali" (sehingga fungsi xf86RandR12CrtcComputeGamma()tidak melakukan apa-apa)

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

(ganti n.nn.n-ndengan versi yang benar), reboot dan Yehaa !! bekerja lagi! (tapi ini perbaikan cepat dan kotor)

Pembaruan mengajukan laporan bug (sudah diketahui, dan baru saja diperbaiki): https://bugs.freedesktop.org/show_bug.cgi?id=99129

Bagaimana saya menemukan: Dipasang xserver-xorg-core-dbgdan lakukan gdb /usr/lib/xorg/Xorg <xorg pid>dari komputer lain melalui ssh.

Pembaruan (11 Jan 17) Tampaknya bug sekarang diperbaiki dalam paket Debian terbaru.

Pembaruan (24 Jan 18) Ketika Anda ingin memasang beamer untuk melakukan presentasi dan perlu mengkonfigurasi semuanya sebelum memulai (intel-virtual-output + xrandr), itu bisa membuat stres. Berikut adalah skrip kecil yang melakukan pekerjaan (penafian: banyak ruang untuk perbaikan, mengenai gaya dll ...):

# 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

pembaruan (10/07/2019)

"Perbaikan" untuk crash baru: tulis apa yang mengikuti di skrip (sebut saja bumblebee-startx.shmisalnya):

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/

(ganti PCI: nn: nn: n dengan alamat kartu NVidia Anda, diperoleh dengan lspci)

Jalankan skrip ini dari jendela terminal sebagai root ( sudo bumblebee-startx.sh), biarkan terminal terbuka, lalu optirundan intel-virtual-outputbekerja seperti yang diharapkan (catatan: kadang-kadang saya perlu menjalankan xrandrselain membuat layar / videoprojector terdeteksi). Sekarang saya tidak mengerti mengapa perintah yang sama dimulai dari crash bumblebee, begitu banyak misteri di sini ... (tapi setidaknya itu memberikan perbaikan sementara).

Bagaimana saya menemukan: menulis skrip 'wrapper' untuk memulai xserver, mendeklarasikannya sebagai XorgBinary di bumblebee.conf, membuatnya menyimpan baris perintah ($ *) ke file, mencoba beberapa hal yang melibatkan LD_PRELOADing patch ke XServer untuk perbaiki crash di osLookupColor (tidak berfungsi), tetapi ketika saya mencoba untuk meluncurkan baris perintah yang sama dengan tangan, itu berhasil, dan itu terus bekerja tanpa tambalan saya (tapi saya masih tidak mengerti mengapa).

Pembaruan 11/15/2019 Setelah memperbarui, saya mengalami banyak kedipan, membuat sistem tidak dapat digunakan. Diperbaiki dengan menambahkan parameter kernel i915.enable_psr=0(dalam /etc/defaults/grub, lalu sudo update-grub). Jika Anda mau sekarang, PSR berarti 'penyegaran diri panel', fitur hemat daya dari intel GPU (yang dapat menyebabkan layar berkedip).

BrunoLevy
sumber
3
Kamu, aku menyukaimu! : D Saya di Arch linux, saya tidak dapat memulai intel-virtual-output. keluar dengan kode keluar 111. Saya bahkan mencoba mencari tahu apa yang dilakukannya strace. Ditemukan posting Anda, saya buat itu /etc/X11/xorg.conf.d/20-intel.confseperti milik Anda, juga menambahkan BusID "PCI:2:0:0"jaga-jaga saya. Digunakan pengaturan yang sama /etc/bumblebee/xorg.conf.nvidiadan bam, intel-virtual-outputberjalan dengan baik. xrandrsekarang mendeteksi semua port saya yang lain! : D <3 bagian Pemecahan Masalah tentang /var/log/Xorg.8.logsangat membantu
GabLeRoux
Ok setelah menguji sedikit, ya saya melihat perangkat terdaftar xrandr, tetapi menghubungkan kabel menunjukkan mouse, tetapi windows tidak muncul di layar eksternal. Kadang-kadang itu menunjukkan salinan layar utama saya dan kemudian kedua layar menjadi hitam dan tidak ada yang terjadi. dan ternyata sistem tidak dimulai dengan /etc/X11/xorg.conf.d/20-intel.confdan saya tidak melihat apa pun di log. Bagaimanapun, terima kasih telah berbagi ini, saya kira saya semakin dekat dengan solusi.
GabLeRoux
Ini mungkin tergantung pada lingkungan desktop yang Anda gunakan. Saya menggunakan KDE, dan perlu mengubah sedikit konfigurasi layar di preferensi.
BrunoLevy
Saya pikir saya membuatnya bekerja sekarang. Itu gagal dengan tv saya, tetapi bekerja dengan displayport saya :)
GabLeRoux
1
@ BrunoLevy Akhirnya berhasil. Terima kasih telah memberikan laptop lama saya kesempatan hidup baru!
Joseph R.