如何在引导期间打开 x11vnc,无需登录,以便我可以通过 SSH 隧道进行访问?

如何在引导期间打开 x11vnc,无需登录,以便我可以通过 SSH 隧道进行访问?

我使用的是 Ubuntu 19.04。我希望 Ubuntu 计算机上的 VNC 服务器在启动过程中打开;我没有插入显示器。我希望能够远程运行完整的 Ubuntu 桌面。

我已经设法让我的 SSH 服务器正常工作,而且我还可以让我的 x11vnc 服务器显示在我的 Mac VNC 客户端上。

但是,只有当我手动登录 Ubuntu 并运行命令时,这才有效

x11vnc -auth guess -forever -loop -noxdamage -repeat -rfbauth /home/USERNAME/.vnc/passwd -rfbport 5900 -share

我可以在 Mac 上创建 SSH 隧道并使用 localhost:5900 连接进行连接。

接下来,我尝试让 x11vnc 在启动过程中打开,所以我执行了以下操作。

  1. sudo nano /lib/systemd/system/x11vnc.service

  2. 我保存了以下文本(123 是我的 gdm UID 号)

    [Unit]
    Description=Start x11vnc at startup.
    After=multi-user.target
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/x11vnc -loop -forever -bg -rfbport 5900 -xkb -noxrecord -noxfixes -noxdamage -shared -norc -auth /run/user/123/gdm/Xauthority -rfbauth /etc/x11vnc.pass
    
    [Install] 
    WantedBy=multi-user.target
    
  3. 我运行了以下命令

    sudo systemctl enable x11vnc.service
    sudo systemctl daemon-reload
    sudo systemctl start x11vnc.service
    
  4. 我重新启动但没有登录我的 Ubuntu 计算机。

  5. 我连接到 SSH 并在 Mac 上成功创建了隧道。

  6. 我尝试连接到 VNC 服务器,但失败了。

  7. 然后我手动登录我的 Ubuntu 计算机。

  8. 我尝试连接到VNC服务器,成功连接,但黑屏。

所以我可以看出,该服务仅在我手动登录 Ubuntu 会话时启动。

有办法实现我想要实现的目标吗?我也愿意使用另一台服务器;我只使用 x11vnc,这样我就不必安装新桌面。

答案1

运行 VNC 服务器有两种方法:

  • 与物理控制台并行运行 - 您的 VNC 会话是独立的,您看不到物理控制台用户可以看到的内容。
  • 与物理控制台集成:显示器是共享的,您可以离开物理座位并通过 VNC 连接到同一会话,反之亦然。

物理控制台通常受 xauth 保护。如何将VNC服务器与其集成取决于您的显示管理器。我会用光DM举个例子。

Lightdm 创建一个文件/run/lightdm/root/,您可以告诉 x11vnc 像这样使用它:-display :0 -auth '/run/lightdm/root/:0'

或者,该-findauth选项可能适用于众所周知的显示管理器。

所以不要尝试启动 systemd 服务。首先使用各种选项手动启动 x11vnc,看看是否可以连接。

另外,不要尝试编辑,/lib/systemd/system/x11vnc.service因为它会在包更新时被覆盖。创建副本/etc/systemd/system/,甚至更好地仅覆盖所需的设置/etc/systemd/system/x11vnc.service.d/custom.conf

我的工作x11vnc.service

[Unit]
Description=VNC Server for X11
Requires=graphical.target
After=graphical.target

[Service]
ExecStart=/usr/local/bin/x11vnc-lightdm

[Install]
WantedBy=graphical.target

/usr/local/bin/x11vnc-lightdm:

#!/bin/bash
OPTS=
exec /usr/bin/x11vnc \
    $OPTS \
        -rfbauth /root/.vnc/passwd -forever -loop -display :0 -auth '/run/lightdm/root/:0'

相关内容