Hdmi

不要設法在筆記型電腦(有擎天柱/大黃蜂)上啟動 HDMI

  • November 15, 2019

我正在嘗試在帶有 Debian (stretch) 的 PC (HP ZBook) 上使用 HDMI 輸出。我已經配置了 Bumblebee,它執行良好(glxinfo 和 optirun glxinfo 報告了預期的資訊,並且我測試了也可以按預期工作的複雜 GLSL 著色器)。

現在我希望能夠在 HDMI 上插入影片投影儀。我在這裡讀過

$$ 1 $$當 HDMI 連接到 NVidia 板上時,可以使用 intel-virtual-output 對其進行配置(使用可以由 xrandr 操作的 VIRTUAL 輸出)。但是,英特爾虛擬輸出說:

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 版本是:xser​​ver-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.log在 Xorg 中說崩潰,OsLookupColor+0x139)。**更新(2019 年 10 月 7 日)**找到一個臨時修復(更新答案)。

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

是的,發現了! 要啟動 intel 驅動的 VIRTUAL 輸出,需要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

一些解釋:它需要一個“螢幕”部分,否則它會嘗試使用在 20-intel.conf 中聲明的英特爾設備(我們之前剛剛添加的,哦,我的……)。它還需要“AllowEmptyInitialConfiguration”才能在未連接外部監視器時保持能夠以 optirun 啟動。

通過此配置和啟動intel-virtual-output,我能夠訪問我的 HDMI 埠。耶哈!!!

**故障排除:**如果optirunintel-virtual-output不起作用,請查看/var/log/Xorg.8.log(bumblebee 創建一個 X 伺服器,內部使用 display :8)。

我在幾個KeepUnusedXServer應該設置為truePMMethod的地方閱讀none筆記/etc/bumblebee/bumblebee.conf,我沒有這樣做,它工作正常。如果我這樣做,它可以工作,但是即使在退出 optirun-ed 應用程序或殺死我不想要的 intel-virtual-output 之後,離散 GPU 仍然保持打開狀態。

更多註釋讓我大吃一驚的其他事情是停用 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標誌來克服 BIOS 錯誤,該錯誤會導致它在關閉獨立 GPU 的情況下進入圖形模式時崩潰。請注意,它特定於此特定筆記型電腦(HP ZBook 攜帶式工作站),對於其他筆記型電腦可能沒有必要或有所不同。

**更新(2017 年 12 月 6 日)**對於最新的 Debian 發行版(Buster),“915.modeset=1 gfxpayload=640x480”是不必要的。要刪除 nouveau,我還需要在 /etc/modprobe.d 中創建一個帶有“blacklist nouveau”的 nouveau.conf 文件,然後使用“update-initramfs -u”重新創建 ramdisk。重新啟動並確保不再使用“lsmod |grep nouveau”載入“nouveau”。

**更新(2016 年 12 月 17 日)**使用最新的 xorg-server(1.19),與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正確的版本替換),重新啟動,Yehaa !! 再次工作!(但這是一個快速而骯髒的修復)

更新送出了錯誤報告(已知,剛剛修復): https ://bugs.freedesktop.org/show_bug.cgi?id=99129

**我是怎麼想出來的:**通過 ssh 從另一台機器 安裝xserver-xorg-core-dbg和執行。gdb /usr/lib/xorg/Xorg <xorg pid>

**更新(17 年 1 月 11 日)**似乎該錯誤現在已在最新的 Debian 軟體包中修復。

**更新(2018 年 1 月 24 日)**當您想要插入投影儀進行展示並且需要在開始之前配置所有內容(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

更新(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 替換為您的 NVidia 卡的地址,通過 lspci 獲得)

從終端視窗以 root ( sudo bumblebee-startx.sh) 身份執行此腳本,保持終端打開,然後optirunintel-virtual-output預期工作(注意:有時我需要執行xrandr以檢測螢幕/影片投影儀)。現在我不明白為什麼同樣的命令從 bumblebee 崩潰開始,這裡有很多謎團……(但至少它提供了一個臨時修復)。

*我是怎麼想出來的:寫了一個“包裝器”腳本來啟動 xserver,在 bumblebee.conf 中將其聲明為 XorgBinary,使其將命令行 ($) 保存到文件中,嘗試了一些涉及 LD_PRELOAD 的 XServer 更新檔以修復 osLookupColor 中的崩潰(不起作用),但是當我嘗試手動啟動相同的命令行時,它起作用了,並且在沒有我的更新檔的情況下它繼續工作(但我仍然不明白為什麼)。

更新 11/15/2019 更新後,我經歷了很多閃爍,使系統無法使用。通過添加核心參數i915.enable_psr=0(在/etc/defaults/grub,然後sudo update-grub)修復。如果你現在想,PSR 的意思是“面板自刷新”,這是英特爾 GPU 的省電功能(可能導致螢幕閃爍)。

引用自:https://unix.stackexchange.com/questions/321151