如何将手机/平板/其它电脑作为扩展屏?

普通屏幕

连根线就行, 跳过

如何将手机/平板/其它电脑作为扩展屏幕

一些可行的方案

如果只是为了演示屏幕,方案很多, 使用各种远程工具啥的都可以如anydesk, 向日葵等.

如果是扩展, 那必须要是要支持部分内容到扩展屏幕

可以配置活动窗口如deskreen

采用vnc的工具如 VirtScreen

前提

基于Intel集显中的Virtualheads功能, 目前笔记本也是集显,没试其他方案

这里也是采用vnc技术来搞, 如果是用现成的推荐virtscreen

扩展屏在

环境

archlinux(主) + i3wm桌面管理器

android(扩展) 小米平板

xrandr设置屏幕扩展

将笔记本屏幕扩展到android平板上, 并且采用分屏方式

查看现有配置

~: xrandr

1
2
3
4
5
6
7
8
9
10
Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 310mm x 170mm
1920x1080 60.02*+ 59.93
1680x1050 59.88
1400x1050 59.98
1600x900 60.00 59.95 59.82
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)

该命令显示了电脑当前的显示状态,Screen 0
是当前正在显示的屏幕的分辨率参数,eDP1是笔记本内置显示屏当前的分辨率参数,下面的一堆数字是该显示屏所支持的分辨率及刷新率,最底下的三行分别是
HDMI 接口输出及虚拟输出,如果没有连接则会显示disconnect

增加虚拟屏幕

  1. 使用cvt命令获取所需分辨率的相应配置信息,
    如我想让扩展屏幕分辨率为1920x1080

    ~: cvt 1920 1080

    1
    2
    # 1920x1080 59.96 Hz (CVT 2.07M9) hsync: 67.16 kHz; pclk: 173.00 MHz
    Modeline "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync

    其中第二行 Modeline 后面的内容 是接下来需要的

  2. 产生新的分辨率模式 xrandr –newmode

    ~: xrandr –newmode
    上述Modelline后边部分,或者直接使用下面命令一步到位

    ~: xrandr –newmode `cvt 1920 1080|tail -n1 |sed 's/Modeline
    //' |sed 's/"//g'`

    此时通过查看xrandr, 多出了Virtual1部分,

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Screen 0: minimum 8 x 8, current 1920 x 1080, maximum 32767 x 32767
    eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 310mm x 170mm
    1920x1080 60.02*+ 59.93
    1680x1050 59.88
    1400x1050 59.98
    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 disconnected (normal left inverted right x axis y axis)
    1920x1080_60.00 (0x20a) 173.000MHz -HSync +VSync
    h: width 1920 start 2048 end 2248 total 2576 skew 0 clock 67.16KHz
    v: height 1080 start 1083 end 1088 total 1120 clock 59.96Hz
  3. 启用新的显示器

    ~: xrandr –addmode VIRTUAL1 "1920x1080_60.00"
    注意VIRTUAL1变成了connected

    1
    2
    VIRTUAL1 connected (normal left inverted right x axis y axis)
    1920x1080_60.00 59.96

    xrandr –output VIRTUAL1 –right-of eDP1 –auto eDP1为主屏幕,
    扩展屏幕在右边,所以使用right-of,
    该命令最好执行两次,否则可能不生效

  4. 关闭扩展屏设置

    ~: xrandr –output VIRTUAL1 –off

X11vnc

启动x11vnc server服务并设置扩展屏

x11vnc -rfbport 5900 -clip 1920x1080+1920+0 -wait 1 –defer 1 -nowf -sb
0

x11vnc -rfbport 5900 -clip xinerama1 -wait 1 –defer 1 -nowf -sb 0

1
2
3
4
5
6
-rfbport:指定了连接所用的端口,默认为5900也可以自行设置。
-clip:该命令设置x11vnc映射屏幕的范围,可以使用-clip WxH+X+Y来手动设置映射范围,也可以使用-clip xinerama0来自动映射显示器,其中xinerama0为屏幕设置中从左往右数第一个显示器,以此类推xinerama1为第二个,如果你的主屏幕在左边虚拟屏幕在右边,那如果设置为xinerama0就会将主屏幕的显示内容复制到虚拟屏幕上,也就是两个屏幕的内容一样了,这时就应该设置为xinerama1。
-wait:是两次屏幕抓取的时间间隔,默认为 20 ms 效果比较卡顿,设置为 1 的话会尽可能降低抓取时间减少延迟。
-defer:向vnc客户端发送更新的间隔,默认也为 20 ms,设置为 1 可以尽可能提高发送频率(但对网速的要求就高了)。
-nowf:在移动窗口到虚拟屏幕时显示内容,否则会显示为一个框。
-sb:设置休眠时间,默认为 60s 也就是如果屏幕 60s 内没有活动的话就停止数据传送,这样会导致有时鼠标从主屏移动到虚拟屏幕时会卡顿,设置为 0 后就不会休眠了

客户端连接工具

安卓下可以使用bvnc

默认配置地址如192.168.1.xx:5900即可

adb工具(usb连接才需要)

打开手机的开发者模式, 并且选择usb调试

电脑端安装adb工具

使用adb reverse tcp:5900 tcp:5900 创建代理

扩展端配置host地址为127.0.0.1:5900即可

参考

https://blog.csdn.net/u010750137/article/details/104277527

测试

将活动程序移动到扩展屏

Win+Shift+Right

光标定位扩展屏

Win+Right 注意观察鼠标光标

问题处理

安装virtscreen以来python-quamash提示编译不通过(弃用)

python版本过高,考虑降低版本

找不到xrandr: cannot find mode "1920x1080_60.00"

执行该命令时提示上述错误xrandr –delmode VIRTUAL1 "1920x1080_60.00"

1
2
3
4
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
1920x1080_60.00 (0x20a) 173.000MHz -HSync +VSync
h: width 1920 start 2048 end 2248 total 2576 skew 0 clock 67.16KHz
v: height 1080 start 1083 end 1088 total 1120 clock 59.96Hz

注意这里的mode不能有双引号, 必须是1920x1080_60.00
而不是"1920x1080_60.00"

bvnc客户端连接失败

确认服务端已经启动,客户端连接失败, 一般为防火墙导致

关闭防火墙systemctl stop iptables.service

增加防火墙规则(推荐)

扩展没效果?

该命令最好执行两次,否则可能不生效

xrandr –output VIRTUAL1 –right-of eDP1 –auto