如何使用移动设备作为 Linux 副屏

2021-07-25 22:48


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

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

环境

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

VirtScreen

VirtScreen 虚拟了一块虚拟屏,可以使用 xrandr 直接管理,就和直接外接了一块屏幕一样。

使用方式如下:

1、以 GUI 模式运行 VirtScreen

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

2、在图形界面下设置显示参数

我的 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 进行配置。

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

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

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

对比和总结

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

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

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

本文发表于 blogs.lifesucks.cn,经作者授权转载。