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
不要只使用nouveau驱动程序来运行Bumblebee吗?。根据我的经验,它至少在这种设置下不起作用。
验证方式
您应该能够运行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
选项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
验证(1),针对两个选项
命令
apt-cache policy xserver-xorg-video-intel
应该显示修补版本(+virtual
后缀)和原始Ubuntu版本。
这两个选项都需要13.04
将以下内容添加到中/etc/X11/xorg.conf
,如果需要,请创建:
Section "Device"
Identifier "intel"
Driver "intel"
Option "AccelMethod" "uxa"
Option "Virtuals" "2"
EndSection
验证(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
验证方式
该文件screenclone
存在并且可以执行。(不过,它不会运行。)
编辑 xorg.conf.nvidia
测试中
我的设置假定一个横向监视器连接到扩展坞的第一个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
请注意如何两次定义显示旋转。xrandr
如果不需要旋转,则可以省略第二次调用(当然,--rotate left
在第一次调用中也可以)。
通过终止screenclone
Ctrl + C(已使用再次将其放到前台fg
)来关闭离散图形适配器。您可以使用进行验证cat /proc/acpi/bbswitch
。仍然为两个现在断开连接的显示器保留屏幕空间。要仅切换回笔记本电脑显示,请使用
xrandr --output LVDS1 --output VIRTUAL1 --off --output VIRTUAL2 --off
清理
复制screenclone
到PATH
(例如/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
替代选项:我的脚本集包含两个脚本extmon-start
和extmon-stop
,用于启用和禁用第二个和第三个监视器。编辑extmon-start
脚本以适合您的配置。
参考文献
我的回答主要来自以下资源: