使用移动设备作为Linux副屏

由于工作的原因,经常会需要带着自己的笔记本到处跑。然后,作为程序员,总是渴望着更多的屏幕。比如一块屏幕用来看视频,一块用来看文档,一块用来写代码,一块用来做测试。这也是我比较喜欢EmacsAwesome这种编辑器和wm的原因。不过,在实际生活中,随时带着一块屏幕出门也不太现实,所以探索一下使用ipadandroid手机作为副屏的方式。

在这篇文章中,就大致介绍一下VirtScreenDeskreen的使用和特点。

环境

本文使用的环境为,一台ArchLinux + Awesome,一个ipad作为移动端,网络使用手机热点。

VirtScreen

VirtScreen虚拟了一块virtual screen,可以使用xrandr直接管理,就和直接外接了一块屏幕一样。
使用方式如下:

  1. 以GUI模式运行virtscreen
    在我的环境下,直接运行virtscreen无法正常打开窗口界面。使用optirun virtscreen解决。

  2. Graphics下设置显示参数
    我的ipad应该是2224*1668分辨率,virtscreen最大支持1920×1080分辨率。不过移动设备一般ppi比较高,将分辨率设置为一半显示效果则刚好。

    设置完成后Enable VIRTUAL SCREEN即可。

  3. VNC下设置显示参数
    根据需要配置VNC端口和密码。完成后START VNC SERVER或勾选Auto项。如果不勾选Auto项,VNC连接终止后,VNC Server也自动关闭。

  4. 移动设备连接VNC
    VNC开启后,移动设备使用任意VNC客户端连接即可。这里我使用了VNC Viewer.

  5. 配置副屏
    这时候应该就可以使用任意配置工具配置屏幕了。我一般通过xrandr进行配置。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    [spes@Gensoukyo ~]$ xrandr
    Screen 0: minimum 8 x 8, current 3032 x 1080, maximum 32767 x 32767
    eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 350mm x 190mm
    1920x1080 59.93*+ 59.93
    1680x1050 59.88
    1400x1050 59.98
    1600x900 60.00 59.95 59.82
    1280x1024 60.02
    1400x900 59.96 59.88
    1280x960 60.00
    1368x768 60.00 59.88 59.85
    1280x800 59.81 59.91
    1280x720 59.86 60.00 59.74
    1024x768 60.00
    1024x576 60.00 59.90 59.82
    960x540 60.00 59.63 59.82
    800x600 60.32 56.25
    864x486 60.00 59.92 59.57
    640x480 59.94
    720x405 59.51 60.00 58.99
    640x360 59.84 59.32 60.00
    DP1 disconnected (normal left inverted right x axis y axis)
    DP2 disconnected (normal left inverted right x axis y axis)
    HDMI1 disconnected (normal left inverted right x axis y axis)
    HDMI2 disconnected (normal left inverted right x axis y axis)
    VIRTUAL1 connected 1112x834+1920+0 (normal left inverted right x axis y axis) 0mm x 0mm
    1112x834_virt 59.95*
    VIRTUAL2 disconnected (normal left inverted right x axis y axis)
    1112x1080_virt (0x306) 99.250MHz -HSync +VSync
    h: width 1112 start 1184 end 1296 total 1480 skew 0 clock 67.06KHz
    v: height 1080 start 1083 end 1093 total 1120 clock 59.88Hz
    [spes@Gensoukyo ~]$ xrandr --output VIRTUAL1 --right-of eDP1

    在进行过一次GUI配置以后,virtscreen也可以以CLI模式启动,并且指定屏幕位置: virtscreen --right.
    值得一提的是,virtscreen似乎默认副屏位于主屏左边,如果这时我用xrandr指定right-of参数时,显示就会变得很奇怪。
    另外要注意的就是,VNC客户端最好开启View Only模式。

    最终效果如下:

Deskreen

VirtScreen不同,Deskreen使用类似直播的方式进行屏幕分享.
使用方式也非常简单。运行deskreen,然后使用任意浏览器访问它提供的地址即可。

ipad上查看分享的屏幕和窗口如下:

由于我使用的是AwesomeWM,在一个tag下打开了窗口并使用Deskreen进行共享后,完全可以再切换到另一个tag下做别的事。所以用这种方式将移动设备作为监控,查看系统或状态、日志等倒是很不错。不过共享的窗口不能最小化,否则就什么都看不到了。

但是这种使用方式不能算真正的‘副屏’。所以可以参考Using xrandr to create a virtual display (Linux)的方式拓展虚拟屏幕并共享。但是在此过程中我还是遇到了一些问题。

首先,我使用的Deskreen版本是1.0.11-1。如同上面链接中一样,对于我的机器已经存在的输出方式,如DPHDMI等,就算addmode或是设置显示方式,这块屏幕仍然会处于disconnected状态,需要修改xorg.conf.但是由于之前折腾Nvidia显卡的经历,目前我还是十分抗拒再去修改这个文件的。然后,对于添加的虚拟输出,如VIRTUAL1等,Deskreen却无法识别。

对比和总结

首先由于工作原因,大部分时间我是使用手机热点,所以带宽不是很高,使用这两种方式的时候都出现了不同程度的卡顿和延迟。VirtScreen的卡顿略微小一点。一方面,感觉Deskreen的桢率是要高于VirtScreen的,纵使有延迟,移动设备上的显示也十分顺滑;另一方面,Deskreen使用WebRTC的话,带宽要求应该本身就高于VNC。所以在热点下使用的话,Deskreen还是不太令人满意。想象一下,自己如丝般顺滑的进行了一系列操作,屏幕上先是静止不动,然后突然象打鸡血一样疯狂操,画面太美不忍直视啊。不过如果是在正常的网络环境,使用普通的路由器,这两种方式都是没有问题的。

然后,Deskreen的主要问题我认为还是无法识别虚拟输出,导致我无法把它当作一个正常的副屏来使用,顶多算一个监视器。希望以后能修复吧。

VirtScreen使用VNC会导致屏幕上出现很多鼠标指针,虽然不影响使用,但是也算略有瑕疵。不过,从另一种角度来看的话,这也是一种特性了 :D