노트북(Optimus/Bumblebee 포함)에서 HDMI를 활성화할 수 없습니다.

노트북(Optimus/Bumblebee 포함)에서 HDMI를 활성화할 수 없습니다.

Debian(stretch)이 설치된 PC(HP ZBook)에서 HDMI 출력을 사용하려고 합니다. Bumblebee를 구성했는데 잘 작동합니다(glxinfo 및 optirun glxinfo가 예상 정보를 보고하고 복잡한 GLSL 셰이더를 테스트했는데 예상대로 작동합니다).

이제 HDMI를 통해 비디오 프로젝터를 연결할 수 있기를 원합니다. 여기[1]에서 HDMI가 NVidia 보드에 연결되면 intel-virtual-output(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입니다.

업데이트됨 (2016년 12월 9일 토요일)Debian을 업데이트했는데 이제 특정 응용 프로그램(예: xemacs)을 시작할 때 두 번째 모니터가 활성화되면 X가 충돌합니다. 토요일. 2016년 12월 17일: 네, 찾았습니다! (업데이트된 답변).

업데이트됨 (2017년 9월 27일 수요일)이 방법은 99% 작동하지만 지난 주에 저는 50Hz 모드만 허용하고 60Hz 이외의 모드는 사용할 수 없는 프로젝터를 사용해 보았습니다(그래서 작동하지 않았습니다). 50Hz 모드를 강제로 설정하는 방법을 아는 사람이 있나요?

업데이트됨 (2019년 10월 1일 화요일)아! 다시 중단됨: X 및 NVidia 드라이버를 업데이트한 후 optirun이 이제 충돌합니다( /var/log/Xorg.8.logOsLookupColor+0x139를 사용하여 Xorg에서 충돌을 표시함).업데이트됨 (2019년 10월 7일)임시 수정 사항이 발견되었습니다(업데이트된 답변).

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

답변1

응, 찾았어! 인텔 드라이버의 VIRTUAL 출력을 활성화하려면 20-intel.confXorg 구성 디렉터리에 파일을 만들어야 합니다( /usr/share/X11/xorg.conf.dDebianstretch 아래에서 읽어서 찾으세요 /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

몇 가지 설명: "화면" 섹션이 필요합니다. 그렇지 않으면 20-intel.conf에 선언된 Intel 장치를 사용하려고 시도합니다(이전에 방금 추가한 것입니다...). 또한 외부 모니터가 연결되지 않은 경우에도 optirun을 통해 시작할 수 있으려면 "AllowEmptyInitialConfiguration"이 필요합니다.

이를 구성하고 부팅하면 intel-virtual-outputHDMI 포트에 액세스할 수 있었습니다.야하! ! !

문제 해결:optirun그래도 작동하지 않으면 intel-virtual-output살펴보십시오 /var/log/Xorg.8.log(Bumblebee는 X 서버를 생성하고 내부적으로 display :8을 사용합니다).

노트KeepUnusedXServer에서 true로 설정해야 한다는 내용을 몇 군데 읽었는데 그렇게 하지 않았지만 잘 작동합니다. 이렇게 하면 작동하지만 optirun-ed 응용 프로그램을 종료하거나 intel-virtual-output을 종료한 후에도 개별 GPU가 계속 켜져 있어 원하지 않습니다.PMMethodnone/etc/bumblebee/bumblebee.conf

추가 메모나에게 두통을 주는 또 다른 일은 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 서버가 부팅되지 않고 CPU 측 3D 렌더링을 사용하는 기존의 일반 VESA 서버로 대체됩니다. 이러한 플래그는 acpi_xxx개별 GPU가 꺼진 상태에서 그래픽 모드에 들어갈 때 충돌을 일으키는 BIOS 버그를 극복하기 위해 이 특정 시스템에 필요합니다 . 이 특정 노트북(HP ZBook 휴대용 워크스테이션)에만 해당되며 다른 노트북에는 필요하지 않거나 다를 수 있습니다.

업데이트됨(2017년 12월 6일)최신 Debian 배포판(Buster)을 사용하면 "915.modeset=1 gfxpayload=640x480"이 필요하지 않습니다. nouveau를 제거하려면 /etc/modprobe.d에 "blacklist nouveau"가 포함된 nouveau.conf 파일을 생성한 다음 "update-initramfs -u"를 사용하여 램디스크를 다시 생성해야 합니다. 재부팅하고 "lsmod |grep nouveau"를 사용하여 "nouveau"가 더 이상 로드되지 않는지 확인하세요.

업데이트됨 (2016년 12월 17일)최신 xorg-server(1.19)와 함께 사용할 때 Gamma를 관리하는 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

내가 알아낸 방법:다른 컴퓨터에서 SSH를 통해 설치 xserver-xorg-core-dbg하고 완료되었습니다.gdb /usr/lib/xorg/Xorg <xorg pid>

업데이트됨 (2017년 1월 11일)이 버그는 현재 최신 데비안 패키지에서 수정된 것으로 보입니다.

업데이트 (18년 1월 24일)프리젠테이션을 위해 프로젝터를 연결하고 시작하기 전에 모든 것(인텔-가상-출력 + 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

업데이트 (2019년 10월 7일)

새로운 충돌에 대한 "수정": 스크립트에 다음을 작성합니다( 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을 lspci를 통해 얻은 NVidia 카드의 주소로 바꾸십시오)

터미널 창에서 루트()로 이 스크립트를 실행하고 sudo bumblebee-startx.sh터미널을 열어 둔 다음 예상대로 optirun작동합니다 (참고: 때로는 스크린/비디오 프로젝터를 감지하기 위해 intel-virtual-output실행해야 할 때도 있습니다 ). xrandr이제 동일한 명령이 Bumblebee와 충돌하기 시작한 이유를 이해할 수 없습니다. 여기에는 많은 수수께끼가 있습니다... (그러나 적어도 임시 수정 사항은 제공합니다).

내가 알아낸 방법:xserver를 시작하기 위한 "래퍼" 스크립트를 작성하고, bumblebee.conf에서 XorgBinary로 선언하고, 명령줄($*)을 파일에 저장하고, 충돌의 osLookupColor를 수정하기 위해 XServer에 대한 LD_PRELOAD와 관련된 일부 패치를 시도했습니다(작동하지 않음) ), 그러나 동일한 명령줄을 수동으로 시작하려고 하면 작동하고 패치 없이도 계속 작동합니다(그러나 여전히 이유를 이해하지 못합니다).

2019년 11월 15일 업데이트됨 업데이트 후 깜박임이 심해 시스템을 사용할 수 없게 되었습니다. 커널 매개변수 i915.enable_psr=0( /etc/defaults/grub, 그 다음 ) 를 추가하여 sudo update-grub수정되었습니다 . PSR은 Intel GPU의 절전 기능(화면 깜박임을 유발할 수 있음)인 "패널 자체 새로 고침"을 의미합니다.

관련 정보