宝塔服务器面板,一键全能部署及管理,送你10850元礼包,点我领取

首先,阅读研发论文很难。 到目前为止,所有的博客都写在自己的笔记本上。 因为写作是浪费时间,所以自己能理解就足够了。 但是,dpdzc老师的“机会大多取决于如何从别人背后评价你”,雄子的“直观地阐述复杂问题的思想”让我很感动。 所以接下来我会更新更多的blog,尽力彻底说明问题。

问题的起源Xserver可以说是第二次。 以前在Ubuntu的时候有很多问题,但每次都是以重新安装系统为结果的。 这次尝试安装x11vnc来摆弄远程桌面时,出现了问题。 问题很简单,很常见。 即display变量和xauthority文件等。 但关键是loggin greeting界面接不通,下午才知道,问题也解决了。

名为abstract的博客将解决以下问题

Xserver的一些经典概念x11vnc如何构成-display -auth参数请参见下面的Authority Process )如何在gdm3、wayland和greeting界面中使用x11vnc [请参阅下面的display manager GDM3solution to abstract首先,Xserver有很多概念。 此处仅显示了典型的: X体系结构、Xserver、Xclient、Xsession、Xauthority file和mile x体系结构是C/S体系结构的软件,即Xserver和Xclient。 主要团队似乎是Xorg,但在典型的linux上,X11和Xorg等就是与之相关的软件和配置文件。

X architecture:是x架构的中心,Xserver处理输入,将输入转发给x客户端,并接收x客户端的绘制请求进行绘制。 与Windows不同,Xserver的绘图服务器可以有多个! Display分别对应很重要。

Xserver:简单来说,就是我们所有的APP。 例如gnome-terminal、firefox等。 这些程序包含具体的绘图代码。 了解了windows窗口的工作原理后,您会发现APP应用程序呈现代码实际上是通过将呈现操作发送到Xserver的不同事件来实现的。 这样做的好处是,Xserver可以在每个x客户端上保留可用空间。 APP方面请不要考虑这些重复等。

Xclient:每个Xserver与一个显示标志对应。 display是$ local _ host : $ display _ num.$ sceen _ num的格式。 例如,’ :0.0 ‘,’ 127.0.0.1:1.0 ‘

是合法的。 具体来说是man x。 而且,有DISPLAY栏的专业格式。

Display连接和安全是C/S体系结构的关键。 下面介绍具体的过程:

首先,必须启动Xserver才能运行XClient程序。 此过程有多种方法,如startx和display manager。 启动后有显示编号。 如果你的Server是第一个的话是:0,第二个是:1

而且,由于x客户端只是负责绘制,为了实现图形的绘制,需要连接到Xserver,所以需要提供给x客户端。 因此,$DISPLAY变量必须作为Xserver的标识符提供,但为了解决安全问题,必须提供验证机制XSecurity 因此,为了连接成功,必须提供xauth文件)。 该文件的位置以$XAUTHORITY传递,x客户端通过一定的分析发送到XServer。 如果通过了验证,就表示通过了验证,这个x客户端可以绘制,否则会有无法连接的错误等。

Connection Process验证过程有许多步骤,具体而言,可以看到man xsecurity。 本节介绍了什么是最小映象密钥验证和主机验证。 首先,xhost可以添加或删除信任列表。 如果列表为空,则全部可信。 否则,只有列表中的才能连接。 该方法只能控制主机阶段的一些验证问题,无法判断同一台机器的不同程序,因此有后面的COOKIES验证机制。 COOKIES的结构是最重要的。 因为很多都是用这个方法。 原理很简单,就是所有XServer都有接受的COOKIES,是特定格式的字符串。 而且,每个连接都必须附带此信息。 如果存在,则可以。 否则就会失败。 XServer的Cookies是启动时指定的xauthority文件。 X -auth=XXX的auth参数是一个文件。 该文件一般为

Display Manager(后面会讲)生成的,然后由DM管理。所以需要得到正确的COOKIES需要知道启动X的时候-auth指定的是哪个xauthority文件,这个文件就是包含了COOKIES的文件,要是想要做实验的,可以通过 xauth -f FILE_NAME 然后list命令来看到具体的cookies是什么。 同时我们可以通过 ps aux | grep Xorg 来看到服务器启动时候的命令,来找到最关键的 -auth 文件位置,有了上面的知识,基本上就没问题了,都可以完美运行x11vnc或者别的XClient了。

Display Manager 因为一个主机可有多个Display,也就是多个XServer,一般是一个User一个,所以有的软件负责管理Xserver。这些软件就是Display ManagerDM),这些软件的主要作用就是:greetting界面来问候,请求输入密码和账号,然后验证,成功之后启动一个XServer,并且生成和管理 xauthority 文件,并且设置$DISPLAY $XAUTHORITY环境变量。主要目的就是将这些过程对用户透明化。这也是为什么很多人不需要知道这些细节的原因。我们这里关心的就是Display Manager是如何生成xauthority文件的(因为我们需要,但是其实通过ps 的方法可以直接找出来,所以也不是很关键。)。这些软件的例子有很多,例如 gdm gdm3 xdm lightdm都是,而且他们有不同的行为,所以mhdkj发现你的问题在这里的话,一定要记得去看文档,而不是一味的谷歌,文档才是最核心的东西。

GDM3 我使用的是GDM3,所以这里我来解析一下GDM3的一些坑点。首先文档我只找到了 GDM的,而且很不一样。其中一个还可以的是 man gdm3有一些资料。所以通过一些探索,这里记录一下没有的东西。 最关键的一点就是,GDM3 的登陆界面,可能没有Xserver。但是GDM3确实是图形界面啊,是的,它使用了一个新的wayland图形架构,具体可以维基百科一下,简单来说,这个东西的作者和X架构是同一个人,然后他为了改良X中的一些低效的环节,重新设计了这个架构,这个架构更加简单,但是还在开发测试阶段。所以在greeting阶段是没有Xserver的,所以x11vnc是不可以连接的,也就是当电脑没有用户登陆的时候,不可以通过x11vnc远程桌面,一定会显示 can’t open display :0 等的错误。所以需要在 /etc/gdm3/custom.conf中uncomment掉一个wayland相关的参数(会有英文提示),然后就可以了。但是注意这样的话,greetting的display number 为 :0 ,你登陆之后启动的用户的Xserver是 display number 2。所以需要建立两个x11vnc监听。

x11vnc总体过程: 先注释掉wayland,重启,在greeting界面的时候,通过远程登陆/tty/登陆之后 ps aux | grep -i xorg 看auth是哪个如果登陆了,有两个,一个是greet的,一个是用户的,一般是1000是用户,121是登陆界面的auth文件),然后:

x11vnc -auth 上面的file -display :0 #greetting用户x11vnc -auth 上面的file -display :1 #用户

Xserver的port映射 Xserver对应的port(如果开启了TCP,可以在gdm的配置文件中开启,具体看gdm文档和gdm3节)。6000+display number是监听端口,可使用 netstat -nap + 来看

reference: linux man page