不要设法在笔记本电脑(具有擎天柱/大黄蜂)上激活HDMI


17

我正在尝试在具有Debian(拉伸)功能的PC(HP ZBook)上使用HDMI输出。我已经配置了Bumblebee,它运行良好(glxinfo和optirun glxinfo报告了预期的信息,并且我测试了也可以按预期工作的复杂GLSL着色器)。

现在,我希望能够将视频投影仪插入HDMI。我在这里已经读过[1],当将HDMI连接到NVidia板上时,可以使用intel-virtual-output对其进行配置(使用可以由xrandr操纵的VIRTUAL输出)。但是,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版本是: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


1
没有答案,因为它不使用Nvidia GPU,但作为一个FYI-使用运行Fedora 25的nvidia 960m optimus笔记本电脑(2016年12月,dell inspiron 15),我可以使用未安装nvidia或bumblebee驱动程序的外部HDMI监视器。使用此设置,如果在启动后将其插入,则不会检测到外部HDMI监视器。要使此功能正常运行,请在启动前插入HDMI监视器,然后在grub菜单中使用Fn-F8监视器切换器获取镜像监视器,并使用wayland登录X并获取扩展监视器。
卡尔斯堡

Answers:


20

是的,发现了! 要激活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

一些说明:它需要一个“屏幕”部分,否则它将尝试使用在20-intel.conf中声明的英特尔设备(我们之前刚刚添加,哦,我的...)。当未连接外部监视器时,它还需要“ AllowEmptyInitialConfiguration”以保持能够以optirun开头。

通过此配置并启动intel-virtual-output,我可以访问我的HDMI端口。耶哈!

故障排除:如果optirun还是intel-virtual-output不行,请看一看/var/log/Xorg.8.log(大黄蜂创建X服务器,其内部使用显示:8)。

注意我在那几个地方读KeepUnusedXServer应设置truePMMethodnone/etc/bumblebee/bumblebee.conf,我没有做到这一点,它工作正常。如果这样做,它可以工作,但是即使退出了优化的应用程序或杀死了我不想要的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”重新创建虚拟磁盘。重新引导并确保不再使用“ 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

我怎么想的:xserver-xorg-core-dbggdb /usr/lib/xorg/Xorg <xorg pid>通过ssh从另一台计算机 安装并完成的。

更新(1月11日17日)似乎该错误已在最新的Debian软件包中修复。

更新(Jan 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替换为通过lspci获取的NVidia卡的地址)

从终端窗口,作为root(运行此脚本sudo bumblebee-startx.sh),保持终端开放,然后optirunintel-virtual-output按预期方式工作(注:有时我需要运行xrandr除了使屏幕/视频投影仪检测)。现在我不明白为什么同样的命令是从大黄蜂崩溃开始的,所以这里有很多谜题……(但至少它提供了一个临时解决方案)。

我如何发现:编写了一个“包装器”脚本来启动xserver,在bumblebee.conf中将其声明为XorgBinary,使其将命令行($ *)保存到文件中,并尝试了一些涉及LD_PRELOAD的修补程序,以便将XServer的修补程序修复了osLookupColor中的崩溃问题(没有用),但是当我尝试手动启动同一命令行时,它起作用了,并且在没有我的补丁的情况下仍然可以工作(但是我仍然不明白为什么)。

更新11/15/2019 更新后,我经历了很多闪烁,使系统无法使用。通过添加内核参数i915.enable_psr=0(在中/etc/defaults/grub,然后在中sudo update-grub)进行修复。如果您现在想要的话,PSR意味着“面板自我刷新”,这是Intel GPU的节能功能(可能导致屏幕闪烁)。


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和bam,intel-virtual-output运行正常。xrandr现在正在检测我所有其他端口!:D <3有关/var/log/Xorg.8.log真正帮助的疑难解答部分
GabLeRoux

稍作测试后确定,是的,我看到带有列出的设备xrandr,但是钩住电缆可以显示鼠标,但是外部显示器上没有显示窗口。有时它会显示我主屏幕的副本,然后两个屏幕都变黑并且什么也没发生。原来系统/etc/X11/xorg.conf.d/20-intel.conf不是以开头,我在日志中看不到任何内容。无论如何,感谢您的分享,我想我已经接近解决方案了。
GabLeRoux

它可能取决于您使用的桌面环境。我正在使用KDE,需要在首选项中对屏幕配置进行一些调整。
BrunoLevy

我想我现在可以工作了。我的电视失败了,但是正在我的
displayport

1
@BrunoLevy它终于可以了。感谢您给我的旧笔记本电脑以新的生命!
约瑟夫R.19年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.