Не получается активировать HDMI на ноутбуке (на котором установлен Оптимус/Бамблби)

Не получается активировать HDMI на ноутбуке (на котором установлен Оптимус/Бамблби)

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

Теперь я хотел бы иметь возможность подключить видеопроектор к HDMI. Я прочитал здесь [1], что intel-virtual-output можно использовать для его настройки, когда 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 Гц?

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

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

решение1

Да, узнал! Для активации ВИРТУАЛЬНОГО вывода драйвера 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

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

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

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

ПримечанияЯ читал в нескольких местах, что KeepUnusedXServerнужно установить в trueи PMMethodв none, /etc/bumblebee/bumblebee.confя этого не делал и все работает нормально. Если я это делаю, все работает, но тогда дискретный графический процессор остается включенным даже после выхода из приложения optirun-ed или убийства 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, которая приводит к сбою при переходе в графический режим с отключенным дискретным графическим процессором. Обратите внимание, что это относится только к этому конкретному ноутбуку (портативная рабочая станция HP ZBook), для других ноутбуков это может быть ненужным или отличаться.

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

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

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

отредактируйте hw/xfree86/modes/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на правильную версию), перезагрузите иДааа!! снова работает!(но это быстрое и грязное решение)

Обновлятьотправил отчет об ошибке (было уже известно и только что исправлено): 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)

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

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

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

Связанный контент