.png)
Я пытаюсь использовать выход 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 (которая может вызывать мерцание экрана).