这篇文章是旧博客的备份恢复,因为时间久远,其中的信息可能已经过时,仅供参考。
手上有一台吃灰挺久了的安卓平板,一直没有怎么使用,更多的是用来调试 Android App 以及偶尔拿它来看看视频或者盖泡面。
最近写代码越发觉得笔记本单屏很难受,查文档得在Chrome跟IDE之间来回切换。而又苦于没有钱买显示器,并且宿舍也没有这么大的地方能够同时放下笔记本跟显示器。就想着能否将这平板利用起来,用它来当电脑的扩展显示器,因为我日常使用比较多的是ArchLinux,Windows基本只用来打游戏,所以就开始研究起如何在Linux下将平板作为扩展显示器。然后真就在Arch Linux Forums上找到了一篇帖子描述了通过VNC为Linux扩展第二显示器的方法。不过这个方法中有些步骤在我的电脑上有点问题,需要修改一下才能正常使用。
下面就记录一下如何通过VNC为Linux扩展第二显示器。

给 Xorg 添加 VIRTUAL 显示输出设备
打开终端,执行 xrandr
指令,该指令会输出当前系统所有可用的显示输出设备,以及每个显示设备可设置的显示模式,如下图是我在我电脑上执行该指令的输出结果:

如果能在输出中找到以 VIRTUAL
开头的设备(如上图中的 VIRTUAL1 以及 VIRTUAL2),就表明当前系统中已经有 VIRTUAL
输出设备了,可以直接进入下一个步骤。
如果没能找到 VIRTUAL
开头的设备的话,就需要在 /usr/share/X11/xorg.conf.d/
下创建一个 conf 文件,添加 VIRTUAL
设备。具体方法如下:
1 | sudo vi /usr/share/X11/xorg.conf.d/20-intel.conf |
然后插入以下配置文本,并保存:
1 | Section "Device" |
如下图所示:

保存该文件之后需要 logout ,之后重新登录。再次执行 xrandr
,这时候你应该就能在 xrandr
的输出结果中找到 VIRTUAL
显示输出设备了。
生成显示模式
之后需要为你的平板或者其他作为 Linux 第二显示器设备生成一个显示模式。
例如我手上的这台平板的分辨率是 2048 * 1536,我就需要为它生成一个 2048 * 1536 的显示模式。
如果你手上的设备的分辨率对应的显示模式在之前 xrandr
的输出结果中已经存在的话,则可以跳过这一步,直接进入下一个步骤,不过你需要记住 xrandr
输出的显示模式列表中的第一例就是显示模式的名称。例如你的平板的分辨率为 1920 * 1080,而在 xrandr
的输出结果中发现了名为 1920x1080
的显示模式,那就可以直接进入下一个步骤了,不用再为它手动生成一个显示模式。
下面我就以我平板的分辨率 2048 * 1536 说明如何生成一个显示模式。
首先,我们需要为显示模式生成一个 Modeline
,执行以下指令:
1 | gtf 2048 1536 60 |
命令中的 2048 跟 1536 这两个参数用于指定分辨率,而末尾的 60 则用于指定刷新率,因为我们这里并不是连接一个实际的显示器,所以刷新率这个参数可以任意给,这里习惯上给了个 60 作为刷新率。
执行完这条指令之后会得到这样的输出:
1 | # 2048x1536 @ 60.00 Hz (GTF) hsync: 95.34 kHz; pclk: 266.95 MHz |
我们这里需要记录下 Modeline
之后的那部分字符串,即:
1 | "2048x1536_60.00" 266.95 2048 2200 2424 2800 1536 1537 1540 1589 -HSync +Vsync |
有了这串字符串之后,我们就可以添加一个新的显示模式了,执行 xrandr --newmode 前面记录下的字符串
,就能创建一个新的显示模式了,如下所示:
1 | xrandr --newmode "2048x1536_60.00" 266.95 2048 2200 2424 2800 1536 1537 1540 1589 -HSync +Vsync |
其中 --newmode
这个参数的值就是我们前面记录下来的那一长串。
而 2048x1536_60.00
就是我们添加的显示模式的名称。
为 VIRTUAL 显示输出设备添加显示模式
有了 VIRTUAL 显示设备,也有了我们所需的显示模式之后,我们就需要将其两者结合起来,将显示模式添加给显示设备,让 VIRTUAL 显示设备支持我们所需的显示模式。
1 | xrandr --addmode VIRTUAL1 2048x1536_60.00 |
该指令的 --addmode
参数需要传入两个值,其中第一个为显示设备名称,这里指定为 VIRTUAL1
,第二个为显示模式,这里就指定为前面生成的显示模式 2048x1536_60.00
。
这时候再执行 xrandr
指令,你就能在 VIRTUAL1 这个显示输出设备底下看到我们刚刚创建的显示模式了:

开启 VIRTUAL 显示输出设备
这时候 VIRTUAL 显示输出设备的状态还是 disconnect,我们接下来就需要开启它,之后就能通过 VNC 将 VIRTUAL 显示输出设备的画面给转发出去了。
这一个步骤也很简单,只需要执行这么一句指令就行了:
1 | xrandr --output VIRTUAL1 --mode 2048x1536_60.00 --right-of eDP1 |
解释一下这条指令中的参数:
--output
:这个参数指定的就是显示设备了,也就是 VIRTUAL1 显示输出设备。--mode
:这个参数用于指定显示模式,这里就指定为我们前面所生成的显示模式 2048x1536_60.00。--right-of
:这个参数用于指定要开启的显示设备拼接到某个设备的右边。例如我这里指定了 VIRTUAL1 拼接到我笔记本屏幕 eDP1 的右边。这个参数其实是可选的,你也可以选择--left-of
等等。
通过 VNC 转发 VIRTUAL 显示输出设备的画面
这时候 VIRTUAL 显示设备其实已经启用了,你可以注意到,你的鼠标已经可以移动到你电脑显示器的范围之外了,接下来只需要通过 VNC 将 VIRTUAL 显示输出设备的画面转发出去就行了。
首先,执行 xrandr
指令,得到以下输出结果:

这里需要记住 VIRTUAL1 设备之后所显示的一串表达式(即上图中选中的部分):2048x1536+1920+0
之后执行以下指令即可通过 VNC 将 VIRTUAL 显示输出设备的画面转发出去:
1 | x11vnc -clip 2048x1536+1920+0 -forever |
其中 -clip
参数的值就是前面使用 xrandr
指令所查看到的 VIRTUAL1 设备之后的那一串表达式。 -forever
参数则是告诉 x11vnc 不要在设备断开连接之后就关闭 VNC。
默认的端口号是 5900
。
如何关闭
- 首先通过 Ctrl + C 停止
x11vnc
- 然后关闭 VIRTUAL1 显示设备的输出:
1
xrandr --output VIRTUAL1 --off
- (可选)从 VIRTUAL1 显示设备中删除前面添加的显示模式:
1
2
3xrandr --delmode VIRTUAL1 2048x1536_60.00
# ⬆ ⬆
# 显示设备 显示模式 - (可选)删除前面生成的显示模式:
1
2
3xrandr --rmmode 2048x1536_60.00
# ⬆
# 显示模式