kali linux树莓派配置踩坑之旅③ x11vnc 真·窗口可视化

目录

kali linux树莓派配置的各种坑① 有线配置+串口控制台
kali linux树莓派配置踩坑之旅② wifi配置+tightvnc可视化
kali linux树莓派配置踩坑之旅③ x11vnc 真·窗口可视化
kali linux树莓派配置踩坑之旅④ x11vnc配合网线直连——直接起飞

前言

上一章我们讲到,使用tightvncserver的弊端。咱们使用可视化就是为了运行一些需要窗口的程序,然而tightvnc并不能满足我们的需求,因此建立一个真实的窗口连接显得尤为重要。目前为止除了X11我还没有找到其他服务能够实现这个功能。

配置过程

1.安装x11vnc

sudo apt-get install -y x11vnc

2.设置密码文件

sudo x11vnc -storepasswd

与tightvnc一样,输入密码后x11vnc会找个地方把密码存起来,默认位置在/root/.vnc/passwd中(控制台会有文件路径提示)

3.配置开机自启动
新建 /lib/systemd/system/x11vnc.service
在文件中写入如下代码

[Unit]
Description=Start x11vnc at startup.
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/x11vnc -ncache 10 -auth guess -nap -forever -loop -repeat -rfbauth /root/.vnc/passwd -rfbport 5900

[Install]
WantedBy=multi-user.target

老规矩,咱们解读一下这个配置文件:
其他参数都是服务声明的固定格式,我们重点看看ExecStart这个参数。我们来解读一下这个命令行/usr/bin/x11vnc -ncache 10 -auth guess -nap -forever -loop -repeat -rfbauth /root/.vnc/passwd -rfbport 5900的意义。

参数说明
/usr/bin/x11vncx11vnc程序路径
-ncache 10屏幕内容缓存声明,加大功耗减小操作延迟
-auth guess猜测需要投屏的窗口号,如果一个不行换另一个,这个参数不用改
-nap窗口活跃度检测,如果窗口不活跃就增加x11服务的睡眠时长,多休息有益于身体健康
-forever窗口主动断开连接后,仍然不关闭x11服务等待下一次连接
-loop持续运行,遇到报错不中断,立刻重启服务
-repeat解决vnc键盘输入延迟bug,呃一个老外说的,我也看不懂,下面摘录一下原文
-rfbauth密码文件存储路径
-rfbport监听的端口号

硬核老外原文(评论区有大神,麻烦解读一下):
在这里插入图片描述
经过亲测发现:-ncache 10这个参数并不像我想象的那样将内容记录在缓存区,而是直接创建十几个屏幕怼到你面前,真的是被它折磨了好久才发现,所以还是不要加这个参数为妙。

  • 绑定虚拟显示器

背景知识:
注意,注意重点来了,如果你直接运行上面的这个命令,本来是可以直接启动x11vnc服务的。那为什么要注册服务呢?

x11vnc -ncache 10 -auth guess -nap -forever -loop -repeat -rfbauth /root/.vnc/passwd -rfbport 5900

如果你在串口控制台,或是在ssh中运行这个语句,你会惊喜的发现
如下报错:
在这里插入图片描述
这是为什么呢?这就不得不吐槽一下,X11设计师的脑洞,要我说被驴踢了也不过分,这个所谓的参数-auth guess其实并没有guess,而是以当前的shell窗口所绑定的窗口为准,那么事情就变成了这样。(tightvnc虽然绑定了窗口,但绑定的窗口是假的,我们就是想获取真窗口才用x11vnc所以通过tightvnc是不行的)
在这里插入图片描述
可以看到,我们把绑定了显示器的shell称为“主shell”,我们不论以现有的哪种方式连接shell,都只能连接到一个没有绑定显示器的shell上面去,x11获取不到绑定显示器的窗口信息,没有不报错的道理。那么事情就又变成了这样:

在这里插入图片描述
我滴妈。设计师你脑回路能再奇葩点么。但活人不能让尿憋死,程序员们想到了,配置启动服务,启动时运行的所有命令都默认在主shell上运行,而作为远程连接我们使用主shell的唯一机会,就是在开机启动的时候。(想想有点可怜)
综上所述,远程连接下运行x11vnc必须通过注册服务的方式,不要试图使用命令行。(我就是因为这个一晚上没睡,调bug,难受)

导语:
通过上述论证不难发现,我们依然没有解决外接显示器的问题,因为再没有外接显示器的情况下,即使是主shell也没有绑定窗口,所以依然会报错。因此接下来我们要安装一个“假显示器”,来替代外接显示器。
在这里插入图片描述
1.安装虚拟显示器服务

sudo apt-get install  xserver-xorg-core
sudo apt-get install  xserver-xorg-video-dummy

2.修改/创建配置文件(默认就会使用虚拟显示器了)

sudo nano /etc/X11/xorg.conf.d/xorg.conf
Section "Device"
    Identifier  "Configured Video Device"
    Driver      "dummy"
EndSection

Section "Monitor"
    Identifier  "Configured Monitor"
    HorizSync 31.5-48.5
    VertRefresh 50-70
EndSection

Section "Screen"
    Identifier  "Default Screen"
    Monitor     "Configured Monitor"
    Device      "Configured Video Device"
    DefaultDepth 24
    SubSection "Display"
    Depth 24
    Modes "1280x720"
    EndSubSection
EndSection

这里说明一下,每个人安装X11服务所在的位置可能不一样,我们只需要找到X11/xorg.conf.d/xorg.conf这样的文件夹就可以了,不一定非要在/etc目录下,可以使用find命令来寻找该文件夹的位置。
在这里插入图片描述
3.保存好配置文件之后,reboot重启就可以了。
可以使用命令xrandr -q来查看当前虚拟显示器的参数情况。

root@kali:/# xrandr -q
Screen 0: minimum 0 x 0, current 1536 x 864, maximum 32768 x 32768
default connected primary 1536x864+0+0 406mm x 228mm
   1536x864       0.00*

4.vncviewer建立可视化连接

在vnc server参数下,使用你的ip地址:端口号的方式访问,参数设置如下。
在这里插入图片描述
输入之前创建密码文件时设置的密码。点击ok进行连接。
在这里插入图片描述
5.大功告成,恭喜你拿到了一个“真正的窗口”。这个窗口将跟之前的tightvnc有天壤之别,速度和分辨率都相当客观,有一种德芙巧克力般的“丝滑”的感觉,谁用谁知道。
在这里插入图片描述
运行一个wireshark试一试,哈哈成了,感动的要哭出来。
在这里插入图片描述

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值