intel 显卡在 linux 下的双头显示

最近在公司内部作报告,临场时因为双头显示搞了个手忙脚乱,还影响了报告效果。于是花了一些时间好好折腾了一下。在双头显示这个问题上,linux 秉承了一贯的风格,功能强大,但不够易用。以至于那些用惯了 MacOSX、Windows 的同事看我不按 Fn 而是在 terminal 里面敲 xrandr 的时候,显得很有些惊讶。

现在在 linux 下使用双头显示,归根到底是要搞清楚一个叫 xrandr 的东西。关于 xrandr 的介绍、使用,这篇文章应该是必读的(ThinkWiki……啊,ThinkPad 的用户真幸福)。这里贴上我的 xorg.conf 的相关部分:


Section "Monitor"
Identifier "Laptop Panel"
Option "DPMS" "true"
EndSection

Section "Monitor"
Identifier "External Monitor"
Option "DPMS" "true"
Option "PreferredMode" "1280x1024"
EndSection

Section "Device"
Identifier "Intel X3100"
Driver "intel"
VendorName "Intel"
BoardName "Mobile Intel® GM965 Express Chipset"
Option "MigrationHeuristic" "greedy"
Option "monitor-LVDS" "Laptop Panel"
Option "monitor-VGA" "External Monitor"
EndSection

Section "Screen"
Identifier "Screen0"
Device "Intel X3100"
Monitor "Laptop Panel"
DefaultColorDepth 24
SubSection "Display"
Depth 16
Modes "1280x800" "1280x768" "1280x720" "1152x768" "1024x768" "832x624" "800x600" "640x480" "720x400" "640x400" "640x350"
Virtual 2560 2560
EndSubSection
SubSection "Display"
Depth 24
Modes "1280x800" "1280x768" "1280x720" "1152x768" "1024x768" "832x624" "800x600" "640x480" "720x400" "640x400" "640x350"
Virtual 2560 2560
EndSubSection
EndSection


我的笔记本用的是 Intel GM965 集成显卡。按照文档,965 之前的 Intel 集成显卡的 virtual screen 不能超过 2048x2048(这个在上面推荐的文章里提到过),虽说我的显卡正好不在此列,但是实际使用起来还是有些问题。比如当我将两个 1280 宽度的桌面横向摆放时,右侧那个的桌面无法完全正常显示:桌面似乎停留在了 2048 这个位置(壁纸无法延伸至 2048 以外,用鼠标拖出选择区也不能超出 2048),但是全屏窗口和上面板却可以正常显示。似乎某个地方仍旧受着 2048 的制约(我觉得这个问题将来应该会得到解决)。

虽然不影响正常功能(窗口可以显示),但是用到双头的场合,毕竟大都是比较正式的对外演示,残缺的壁纸总有些奇怪。于是当下比较好的办法是仍旧遵守 2048 规则,把第二个屏幕放到主屏幕的下面。

当然这样也还是稍微有点问题。比如 compiz fusion + avant window navigator 且后者为自动隐藏的情况下,avant window navigator 被显示在下屏幕的上部。所以在准备作双头显示之前,有必要先把 avant window navigator 干掉,我的办法是在 gnome 面板上留一个菜单式窗口选择器来应急。

最后就是写个脚本来简化启动 xrandr 时的输入了(xrandr 写全了真是够长的)。笔记本屏幕的分辨率是固定的,通常即使用双头的时候我也不希望改变主屏幕的分辨率(主要是 gnome 面板上的 applet 顺序有可能会乱掉),唯一需要指定的只是外接显示设备的分辨率。所以这个脚本也很简单:


#!/bin/bash

if [ $1 ]; then
RES=$1
else
RES="1280x1024"
fi

echo Set external VGA as $RES below LVDS.

xrandr --output LVDS --mode 1280x800 --output VGA --mode $RES --below LVDS


用的时候在脚本后面加个指示分辨率的参数就行了(不加的话默认是 1280x1024)。3D 桌面效果完全不影响双头显示,很帅很强大。

p.s. 刚刚看了下笔记本的官方参数,不知道为什么 fujitsu 写着“如果双头同时显示的话,最大分辨率不能超过 1280x768”。或许这是 vista 的限制吧。用 linux 的朋友虽然要经过上述“磨难”,但是可以不用理会这样的限制。

评论