如何使用 Lenovo T420S 通过 DVI/视口设置第二个显示器?

jan*_*oth 12 multiple-monitors nvidia-optimus

我的联想 T420S 有一块采用 nvidia optimus 技术的独立显卡。我基本上想要实现的是以下内容:

  • 使用第二个显示器 -通过 DVI/视口连接- 在工作中(VGA 模糊)
  • 旅行时实现中等至良好的电池性能(2 小时)

据我所知,我有以下选择:

  1. 禁用 Optimus,只使用内部图形
  2. 禁用 Optimus,只使用 nvidia
  3. 启用擎天柱,使用大黄蜂(主页)/铁皮

(1) 当我读到(并经历过)DVI / 视口在技术上无法通过内部图形使用时,取消资格

(2) 到目前为止还没有真正尝试过,只是在我添加了 nvidia 驱动程序后启动到黑屏的快速测试安装:-(

(3) 关注这个博客,用大黄蜂代替铁皮。Bumblebee 工作了(我可以在 glxgears 上看到令人印象深刻的 FPS),但是我没有识别出第二个显示器。我也感到迷失在 nvidia-driver-hell 中,没有机会运行 nvidia-xconfig,仅仅是因为它没有安装。不知道是否应该立即识别第二个显示器?我需要安装更多吗?我需要弄乱我的 xorg.conf 吗?问题多,答案少。

那么,我能做些什么来实现我的目标?遵循哪条路径,接下来的步骤是什么?

欢迎任何提示:-)

更新:感谢所有回答的人。我会将我的工作环境迁移到“离散”安装,并将使用“optimus/bumblebee”作为并行游戏项目,看看我能走多远......我将在新线程中发布未来的问题。

krl*_*mlr 7

Ubuntu 14.10及更高版本:那里要简单得多。请在下面查看此答案和我的评论。

注意:这仅适用于 Ubuntu 13.04。13.10 中有一些差异。

我已设法在 Ubuntu 13.04 上将两台外接显示器(除了内置面板)连接到我的 ThinkPad T430,并启用了 Optimus(“可切换图形”)(列表中的选项 3)。显示器通过 DVI 接口连接,其中之一是旋转的。与其他解决方案相比,所有监视器都连接到同一个窗口管理器,因此窗口可以在监视器之间自由移动。这实现了在断开连接时延长电池寿命并在连接时使用外部监视器的目标。

这里的关键思想是:

  • 内部图形适配器负责管理实际显示的图像(位图)
  • 默认情况下,所有内容都在内部图形适配器上呈现
  • GPU 加速应用程序使用独立图形适配器,输出被复制到内部图形适配器
  • 对于每个外部显示器,内部图形适配器提供“虚拟”显示
  • 使用第二个 X 服务器输出到外部显示器,“虚拟”显示器的内容不断复制到第二个 X 服务器

与其他解决方案相比的主要好处是所有显示器(似乎)都是同一个 X 会话的一部分,因此您可以在显示器之间自由移动窗口。

到目前为止,我没有注意到性能损失。

指示

您需要执行以下操作:

  • 从 PPA 安装 Bumblebee
  • 构建并安装自定义英特尔视频驱动程序
  • 下载,编译,最后安装一个小程序
  • 编辑两个配置文件
  • 重启几次

对于大多数操作,您将需要一个终端、一个文本编辑器和 root 访问权限 ( sudo)。详细说明如下。

安装大黄蜂

按照说明的“基本设置”部分进行操作。以 root 身份执行,最后一个命令实际上启动了重启:

add-apt-repository ppa:bumblebee/stable
apt-get update
apt-get install bumblebee virtualgl linux-headers-generic
reboot
Run Code Online (Sandbox Code Playgroud)

不要尝试仅使用 nouveau 驱动程序运行大黄蜂?. 根据我的经验,它不起作用,至少在此设置中不起作用。

验证

您应该能够运行optirun glxgears.

安装补丁版本 xserver-xorg-video-intel

选项 1:从我的 PPA 安装(目前只有 Ubuntu 13.04)

以 root 身份执行以下操作:

add-apt-repository ppa:krlmlr/ppa
apt-get update
apt-get install xserver-xorg-video-intel
Run Code Online (Sandbox Code Playgroud)

选项 2:构建并安装您自己的软件包

选择最新的补丁xserver-xorg-video-intel。单击文件,单击“原始”按钮,在浏览器中复制 URL。在撰写本文时,这是https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch

sudo apt-get build-dep xserver-xorg-video-intel
cd ~
apt-get source xserver-xorg-video-intel
cd xserver-xorg-video-intel
# replace the URL below with the one you have noted, if necessary
wget https://raw.github.com/liskin/patches/master/hacks/xserver-xorg-video-intel-2.20.14_virtual_crtc.patch
patch -p1 < *.patch
# The next command will ask for a change log message. Supply something meaningful,
# this will later allow you to distinguish your patched package from the distribution's.
dch -l+virtual
dpkg-buildpackage -b
cd ..
sudo dpkg --install xserver-xorg-video-intel_*.deb
Run Code Online (Sandbox Code Playgroud)

验证 (1),对于两个选项

命令

apt-cache policy xserver-xorg-video-intel
Run Code Online (Sandbox Code Playgroud)

应显示修补版本(+virtual后缀)和原始 Ubuntu 版本。

对 13.04 来说是必需的,对于两个选项

将以下内容添加到您的/etc/X11/xorg.conf,如有必要,请创建:

Section "Device"
    Identifier "intel"
    Driver "intel"
    Option "AccelMethod" "uxa"
    Option "Virtuals" "2"
EndSection
Run Code Online (Sandbox Code Playgroud)

验证 (2),对于两个选项

重新启动后,xrandr在终端中运行。输出应列出两个额外的虚拟显示器。

下载并构建屏幕克隆

获取puetzk 的 screenclone 分支及其依赖项,并编译它。

sudo apt-get install libxcursor-dev libxdamage-dev libxinerama-dev libxtst-dev git build-essential
cd ~
git clone git://github.com/puetzk/hybrid-screenclone.git
cd hybrid-screenclone
make
Run Code Online (Sandbox Code Playgroud)

验证

该文件screenclone存在并且是可执行的。(不过,它还不会运行。)

编辑 xorg.conf.nvidia

  • /etc/bumblebee/xorg.conf.nvidia以 root 身份在文本编辑器中打开文件
  • 注释掉或删除读取UseEDIDUseDisplayDevice
  • 在 中Section "ServerLayout",添加一个条目Screen "Screen0"
  • 在文件底部,添加以下内容:

    Section "Screen"
        Identifier     "Screen0"
        Device         "Device0"
        DefaultDepth    24
        SubSection     "Display"
        Depth       24
        EndSubSection
    EndSection
    
    Run Code Online (Sandbox Code Playgroud)
  • 重启

测试

我的设置假设横向监视器连接到扩展坞的第一个 DVI 端口,纵向监视器连接到第二个 DVI 端口。在终端中从 screenclone 所在目录运行以下命令,根据需要进行调整。

xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
./screenclone -b -x 1:0 -x 2:1 &
sleep 1
xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
fg
Run Code Online (Sandbox Code Playgroud)

注意显示旋转必须被定义两次。xrandr如果不需要轮换,您可以省略第二次调用(当然,--rotate left在第一次调用中)。

通过screenclone使用 Ctrl+C终止(已使用 再次置于前台fg),独立显卡适配器将关闭。您可以使用 来验证这一点cat /proc/acpi/bbswitch。尽管如此,屏幕空间仍保留给两个现在断开连接的显示器。要切换回仅笔记本电脑显示,请使用

xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
Run Code Online (Sandbox Code Playgroud)

清理

  • 复制screenclonePATH(例如,/usr/local/bin)中的目录

  • 创建bash脚本以自动启动和关闭外部显示器。此脚本将在启动时设置外部显示器,并仅在退出时切换到笔记本电脑显示器(例如,通过按 Ctrl+C)。

    #!/bin/bash
    set -m
    xrandr --output LVDS1 --output VIRTUAL1 --mode 1920x1200 --right-of LVDS1 --output VIRTUAL2 --mode 1920x1200 --right-of VIRTUAL1 --rotate left
    trap "xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off" EXIT
    screenclone -b -x 1:0 -x 2:1 &
    sleep 1
    xrandr -d :8 --output DP-2 --right-of DP-1 --rotate left
    fg
    
    Run Code Online (Sandbox Code Playgroud)
  • 替代选项:我的 scriptlet 集合包含两个脚本extmon-startextmon-stop,用于启用和禁用第二个和第三个监视器。编辑extmon-start脚本以适合您的配置。

参考

我的回答主要来自以下资源:


Zac*_*ach 5

我有一个 Thinkpad W520,并且对此进行了广泛的处理。我不确定 W520 和 T420S 有多少共同点,但我在这里写了一篇博客文章概述了大局情况并提供了一些建议。

使用带有专有驱动程序的 nvidia 卡,您应该能够获得 2 小时的电池续航时间。这也可能是添加外部显示器时最不麻烦的选项(“disper”程序对此非常有帮助)。如果 T420s 中显卡的 nvidia 专有驱动功能与 W520 相同,它们会在显卡未充分使用时自动降频(他们称之为“Power Mizer”),因此您的电池寿命不会太长可怕。老实说,通过关闭 nvidia 卡,我只能将电池寿命延长 25% 或 30%。另外,我相信安装 Bumblebee 后,您可能无法使用外接显示器,因为 nvidia 卡已经在“幕后”运行 X 服务器。总之,我建议进一步追求选项(2)。

当我安装和卸载 Bumblebee 时,我在让 nvidia 专有驱动程序再次工作时遇到了一些麻烦。这里有几件事需要研究: (a) W520 具有与所使用的图形方案相关的 BIOS 选项。我不确定 T420 选项是什么,但是如果您想在 Thinkpad 显示器上使用 nvidia 图形,您可能必须处于“离散”模式。(b) 您可能需要在 ubuntu 中使用“jockey”程序才能让它使用专有驱动程序。

祝你好运!我希望这会有所帮助。