思路

在GNU/Linux电脑中产生一个虚拟显示器(Intel核显)或者使用显卡欺骗器产生虚拟显示器, 随后将该显示器的内容用x11vnc发送出去, 安卓手机/平板用VNC Viewer(无法用Google Play的话需要自行百度安装包)显示发送出来的显示器内容. 可以通过网络实现VNC连接, 也可以使用adb的反向代理功能实现VNC连接(推荐, 因为x11vnc默认没有加密).

虚拟显示器分辨率设置

使用xrandr

直接运行xrandr查看已有显示输出对应的分辨率与偏移量, 一般表示为AxB+C+D, 同时确定显示输出的名称(例如HDMI-0或者DP-0)和可选分辨率. 其中:

  • A: 横向分辨率
  • B: 纵向分辨率
  • C: 显示输出左上角相对整体输出的相对横向偏移量
  • D: 显示输出左上角相对整体输出的相对偏移量

使用xrandr --output 显示输出名称 --mode AxB --pos CxD设置显示器的分辨率与位置, 并将这句命令加入到~/.profile中, 注意A/B/C/D的值按需修改.

使用nvidia-setting(对应Nvidia显卡)

确保电脑安装了Nvidia显卡的官方驱动, 随后运行sudo nvidia-setting, 在图形化界面设置好各屏幕位置以及分辨率后点击ApplySave to X configuration file即可.

x11vnc设置

注意x11vncgdm冲突, 如果使用的display manager是gdm(比如Ubuntu), 需要将其换成lightdm: sudo apt install lightdm, 如果后面有跳出选项, 选择lightdm.

xrandr查看要显示在安卓平板/设计的显示输出的分辨率与偏移量, 替换下文中的AxB+C+D后写入/lib/systemd/system/x11vnc-extended.service. 最后sudo systemctl start x11vnc-extended && sudo systemctl enable x11vnc-extended.

[Unit]
Description=Start x11vnc for extended screen at startup.
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -clip AxB+C+D -auth guess -forever -loop -noxdamage -repeat -multiptr -rfbauth /home/chin/.vnc/passwd -rfbport 5901 -wait 1 -defer 1 -nowf -sb 0 -shared -ncache_cr
[Install]
WantedBy=multi-user.target

参数含义:

参数名 含义
clip 发送的显示内容
noxdamage 断开连接后不停止当前显示程序
multiptr 允许服务器与客户端两个鼠标独立切同时活动
rfbauth 密码文件路径
rfbport 使用端口号
wait x11vnc探查显示输出变化的时间间隔(单位: ms)
defer x11vnc发送显示输出变化的时间间隔(单位: ms)
sb 无操作至进入休眠的时间(单位: s), 值为0时取消休眠
nowf 移动窗口时候显示完成窗口而不是窗口边框
shared 允许多可客户端同时登录一个服务器端
ncache_cr 使用缓存加速

安卓端远程连接

网络连接

如果使用网络连接且开启了防火墙, 则需要放行对应的端口(上述内容中为5901): sudo ufw allow 5901. 确保安卓平板/手机与电脑在同一个局域网下即可在VNC Viewer中通过IP:5901连接. IOS设备也可以这样连接.

adb连接

安装adb: sudo apt update && sudo apt install adb android-tools-adb android-tools-fastboot. 手机打开开发者模式, 允许USB调试(过程自行百度). USB线连接安卓平板/手机和电脑后在平板/手机上允许该电脑进行USB调试(平板/手机上没有出现对话框的话, 后续允许命令时候会出现, 到时候确认即可).

adb devices获取平板/手机的设备号, 随后运行adb -s 平板/手机设备号 reverse tcp:5901 tcp:5901(第一个tcp:后跟电脑的端口源, 第二个tcp:后跟安卓设备的目标端口). 在安卓平板/手机的VNC Viewer中通过127.0.0.1:5901连接.



software GNU/Linux

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!