Не удается активировать HDMI на ноутбуке (у которого есть optimus / bumblebee)

17

Я пытаюсь использовать выход HDMI на ПК (HP ZBook) с Debian (растяжка). Я настроил Bumblebee, он работает хорошо (glxinfo и optirun glxinfo сообщают ожидаемую информацию, и я протестировал сложные шейдеры GLSL, которые также работают как положено).

Теперь я хотел бы иметь возможность подключить видеопроектор по HDMI. Я прочитал здесь [1], что виртуальный выход intel можно использовать для его настройки, когда HDMI подключен к плате NVidia (используя выход VIRTUAL, которым может управлять xrandr). Тем не менее, intel-virtual-output говорит:

 no VIRTUAL outputs on ":0"

Когда я это делаю xrandr -q, в списке нет ВИРТУАЛЬНОГО выхода, у меня есть только:

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)

Моя установленная версия xserver-xorg-video-intel: xserver-xorg-video-intel_2.99.917 + git20160706-1_amd64.deb

Обновление (суббота, 09 декабря 2016 г.) Я обновил Debian, и теперь X падает, когда второй монитор активен, когда я запускаю некоторые приложения (например, xemacs). Сидел. 17 декабря 2016: Да, узнал! (обновил ответ).

Обновление (среда, 27 сентября 2017 г.) Метод работает в 99% случаев, но на прошлой неделе я попробовал проектор, который принимает только режимы 50 Гц, и не мог получить ничего, кроме 60 Гц (поэтому он не работал). Кто-нибудь знает, как заставить работать режим 50Гц?

Обновление (вт 1 октября 2019) Argh! Снова сломано: после обновления X и драйвера NVidia optirun теперь падает ( /var/log/Xorg.8.logговорит об ошибке в Xorg, OsLookupColor + 0x139). Обновление (07 октября 2019 г.) Нашли временное исправление (обновленный ответ).

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

BrunoLevy
источник
1
Не ответ, потому что здесь используется не графический процессор Nvidia, а FYI - с ноутбуком Optimus nvidia 960m (декабрь 2016 г. dell inspiron 15), на котором установлена ​​Fedora 25, я могу использовать внешний монитор HDMI без установленных драйверов nvidia или шмеля. При такой настройке внешний монитор hdmi не обнаруживается, если я подключаю его после загрузки. Чтобы это работало, подключите монитор HDMI перед загрузкой, и в меню grub используйте переключатель монитора Fn-F8, чтобы получить зеркальный монитор, войдите в X с помощью Wayland и получите расширенный монитор.
Карлсборг

Ответы:

20

Да, узнал! Чтобы активировать вывод VIRTUAL драйвера intel, вам нужно создать 20-intel.confфайл в каталоге конфигурации Xorg (в /usr/share/X11/xorg.conf.dразделе Debian stretch, который можно узнать, прочитав /var/log/Xorg.0.log)

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

Мой /etc/bumblebee/xorg.conf.nvidia выглядит следующим образом:

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

Некоторые объяснения: ему нужен раздел «Экран», иначе он пытается использовать устройство Intel, объявленное в 20-intel.conf (которое мы только что добавили ранее, о боже ...). Также необходимо, чтобы «AllowEmptyInitialConfiguration» мог запускаться с optirun, когда внешний монитор не подключен.

С этой конфигурацией и запуском intel-virtual-outputя смог получить доступ к своему порту HDMI. Даааа !!!

Устранение неисправностей: если optirunили intel-virtual-outputне работает, взгляните на /var/log/Xorg.8.log(шмель создает X-сервер с дисплеем: 8 используется внутри).

Примечания я прочитал в нескольких местах , которые KeepUnusedXServerдолжны быть установлены в trueи PMMethodк noneв /etc/bumblebee/bumblebee.conf, я не делал этого , и это работает отлично. Если я это сделаю, это будет работать, но тогда дискретный графический процессор останется включенным даже после выхода из запущенного приложения или убийства intel-virtual-output, чего я не хотел.

Еще примечания Еще одна причина, заставившая меня удариться головой о стену, была деактивация Nouveau и запуск сервера Intel X: это нужно сделать с помощью флагов, передаваемых ядру, указанных в параметрах GRUB. У /etc/defaults/grubменя есть следующая строка:

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

(остерегайтесь кавычек и избежавших кавычек).

Некоторые объяснения: он избегает загрузки nouveau (что несовместимо с сервером Nvidia X) и указывает драйверу Intel переходить в графический режим прямо во время загрузки. Если вы этого не сделаете, то сервер Intel X не сможет запуститься, и он вернется к обычному старому серверу VESA с 3D-рендерингом на стороне процессора. Эти acpi_xxxфлаги необходимы на этой конкретной машине , чтобы преодолеть ошибку BIOS , что делает его сбой при переходе в графическом режиме с дискретным GPU выключены. Обратите внимание, что он специфичен для данного ноутбука (портативная рабочая станция HP ZBook), он может быть ненужным или отличаться для других ноутбуков.

Обновление (6 декабря 2017 г.) В последнем дистрибутиве Debian (Buster) «915.modeset = 1 gfxpayload = 640x480» не требуется. Чтобы удалить nouveau, мне нужно было также создать файл nouveau.conf в /etc/modprobe.d с «черным списком nouveau» в нем, а затем заново создать виртуальный диск с помощью «update-initramfs -u». Перезагрузитесь и убедитесь, что «nouveau» больше не загружается с «lsmod | grep nouveau».

Обновление (17 декабря 2016 г.) В последнем xorg-сервере (1.19), похоже, существует проблема в функции RandR, которая управляет гаммой при использовании с intel-virtual-output. Вот процедура для исправления Xserver и заставить его работать:

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

отредактируйте hw / xfree86 / mode / xg86RandR12.c Строка 1260, вставьте «return» (чтобы функция xf86RandR12CrtcComputeGamma()ничего не делала)

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

(замените на n.nn.n-nправильную версию), перезагрузитесь и Yehaa !! снова работает! (но это быстрое и грязное исправление)

Обновление подало отчет об ошибке (было уже известно, и только что было исправлено): https://bugs.freedesktop.org/show_bug.cgi?id=99129

Как я разобрался: установил xserver-xorg-core-dbgи сделал gdb /usr/lib/xorg/Xorg <xorg pid>с другой машины через ssh.

Обновление (11 января 17) Похоже, что ошибка теперь исправлена ​​в последних пакетах Debian.

Обновление (24 января 18) Если вы хотите подключить проектор для проведения презентации и вам нужно все настроить перед запуском (intel-virtual-output + xrandr), это может вызвать стресс. Вот небольшой скрипт, который делает эту работу (отказ от ответственности: много возможностей для улучшения, в отношении стиля и т. Д.):

# 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

обновление (10/07/2019)

«Исправление» для нового сбоя: напишите, что следует в скрипте (назовите его, bumblebee-startx.shнапример):

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/

(замените PCI: nn: nn: n на адрес вашей карты NVidia, полученный с помощью lspci)

Запустите этот сценарий из окна терминала в качестве корня ( sudo bumblebee-startx.sh), держать терминал открытым, то optirunи intel-virtual-outputработать , как и ожидалось (примечание: иногда мне нужно запустить xrandrв дополнение , чтобы сделать экран / видеопроектор обнаружен). Теперь я не понимаю, почему та же самая команда началась с аварий со сбоями, так много загадок здесь ... (но, по крайней мере, это дает временное исправление)

Как я понял: написал скрипт-обертку для запуска xserver, объявил его как XorgBinary в bumblebee.conf, заставил сохранить командную строку ($ *) в файл, попробовал некоторые вещи, включая LD_PRELOAD, добавив патч к XServer для исправить ошибку в osLookupColor (не работало), но когда я попытался запустить ту же командную строку вручную, она работала и продолжала работать без моего патча (но я до сих пор не понимаю, почему).

Обновление 15.11.2009 После обновления у меня появилось много мерцаний, из-за которых система стала непригодной для использования. Исправлено добавлением параметра ядра i915.enable_psr=0(in /etc/defaults/grub, затем sudo update-grub). Если вы хотите сейчас, PSR означает «самообновление панели», энергосберегающую функцию графических процессоров Intel (которая может вызвать мерцание экрана).

BrunoLevy
источник
3
Ты, ты мне нравишься! : D Я на Arch Linux, я не смог начать intel-virtual-output. выход с кодом выхода 111. Я даже пытался понять, с чем это связано strace. Нашел ваш пост, я создал его так /etc/X11/xorg.conf.d/20-intel.confже, как ваш, также добавил свой на BusID "PCI:2:0:0"всякий случай. Используются аналогичные настройки /etc/bumblebee/xorg.conf.nvidiaи бац, intel-virtual-outputотлично работает. xrandrтеперь обнаруживает все мои другие порты! : D <3, часть устранения неполадок о /var/log/Xorg.8.logдействительно помогла
GabLeRoux
Хорошо, после тестирования немного, да, я вижу устройства, перечисленные с xrandr, но подключение кабеля показывает мне мышь, но окна не отображаются на внешнем дисплее. Иногда он показывает копию моего основного экрана, а затем оба экрана становятся черными, и ничего не происходит. и оказалось, что система не запускается, /etc/X11/xorg.conf.d/20-intel.confи я ничего не вижу в журналах. В любом случае, спасибо, что поделились этим, я полагаю, что все ближе к решению.
GabLeRoux
Это может зависеть от среды рабочего стола, которую вы используете. Я использую KDE, и мне нужно немного подправить конфигурацию экрана в настройках.
BrunoLevy
Я думаю, что теперь это работает. У меня не получалось с моим телевизором, но он работает с моим дисплеем :)
GabLeRoux
1
@BrunoLevy Наконец-то работает. Спасибо, что подарили моему старому ноутбуку новую жизнь!
Джозеф Р.