是的,发现了!
要激活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
应设置true
并PMMethod
以none
在/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-dbg
是gdb /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
),保持终端开放,然后optirun
和intel-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的节能功能(可能导致屏幕闪烁)。