如何设置 x11vnc 以使用图形登录屏幕访问?

use*_*250 59 server vnc

我有一台运行 Ubuntu 12.10 的服务器,需要能够在未登录的情况下远程访问该服务器。

我找到了很多解决方案,但似乎没有一个适用于 12.10。

谁能给我分步说明如何配置x11vnc作为服务启动(在用户登录之前),以便在与 VNC 连接时,我将看到图形登录屏幕?

我是 Linux 新手,所以请在您的回复/评论中提供尽可能多的细节。

谢谢

bab*_*onk 55

以上答案解决了问题,尽管对 systemd (15.04+) 的 Ubuntu 版本进行了一些修正,如下所示:

  • 利用-auth guessx11vnc 中的新功能 - 这有帮助!
  • systemd 更新(不是新贵)

运行以下命令进行安装:

sudo apt-get install x11vnc
sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
# for Ubuntu 15.04+
sudo nano /lib/systemd/system/x11vnc.service
# for Ubuntu 16.10+
sudo nano /etc/systemd/system/x11vnc.service
Run Code Online (Sandbox Code Playgroud)

将其插入到文件中:

[Unit]
Description="x11vnc"
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/usr/bin/x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth guess -rfbauth /etc/x11vnc.pass
ExecStop=/usr/bin/killall x11vnc
Restart=on-failure
Restart-sec=2

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

然后,开始:

sudo systemctl daemon-reload
sudo systemctl start x11vnc
Run Code Online (Sandbox Code Playgroud)

并确保服务在启动时启动:

sudo systemctl enable x11vnc
Run Code Online (Sandbox Code Playgroud)

  • 为什么这个答案没有标记为正确答案? (3认同)
  • x11vnc 不会立即工作。在提交每 2 秒因故障重新启动的服务之前提供测试命令是一个好主意。我在无头云 Ubuntu 17.10 服务器上使用 lightdm 和 xfce4。`Restart-sec` 应该是 `RestartSec` (3认同)
  • 如果根本没有显示,那么您可能想要设置任意分辨率:`sudo xrandr --fb 1920x1080`。 (2认同)
  • Ubuntu 18.04 似乎也需要“RestartSec”而不是“Restart-sec”。 (2认同)
  • Ubuntu 20.04:-auth猜测:显示失败=':0'建议赞赏。 (2认同)

All*_*len 45

安装 x11vnc:

sudo apt-get install x11vnc
Run Code Online (Sandbox Code Playgroud)

为您的用户创建密码:

x11vnc -storepasswd
Run Code Online (Sandbox Code Playgroud)

如果您有 ssh 设置,假设您已经登录,您可以使用它来启动 x11vnc,但请记住告诉它使用您的密码文件:

x11vnc -usepw
Run Code Online (Sandbox Code Playgroud)

如果你没有登录,你会得到一个错误的解释:

If NO ONE is logged into an X session yet, but there is a greeter login
program like "gdm", "kdm", "xdm", or "dtlogin" running, you will need
to find and use the raw display manager MIT-MAGIC-COOKIE file.
Some examples for various display managers:

 gdm:     -auth /var/gdm/:0.Xauth
          -auth /var/lib/gdm/:0.Xauth
 kdm:     -auth /var/lib/kdm/A:0-crWk72
          -auth /var/run/xauth/A:0-crWk72
 xdm:     -auth /var/lib/xdm/authdir/authfiles/A:0-XQvaJk
 dtlogin: -auth /var/dt/A:0-UgaaXa
Run Code Online (Sandbox Code Playgroud)

假设您使用 lightdm 进行登录,您可以解决此问题,您可以使用以下命令启动 x11vnc:

sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
Run Code Online (Sandbox Code Playgroud)

我不确定这是以 root 身份运行 x11vnc 的最佳主意。也许有人可以使用一种无​​需使用 sudo 即可访问登录名的方式进行编辑。

运行后,您应该能够使用 vnc 客户端(例如 krdc(用于 KDE))进行连接。您可能希望使用GNU Screen来保持 x11vnc 运行,而无需打开 ssh 会话

我能够使用http://ubuntuforums.org/showthread.php?t=2039022弄清楚这一点。

这是一个示例 upstart 作业,可用于使其在启动时运行。它需要放在 /etc/init/x11vnc.conf 中。(请注意,较新版本的 Ubuntu 使用 systemd,因此请参阅具有示例 systemd 配置的其他答案):

# description "start and stop x11vnc"

description "x11vnc"

start on runlevel [2345]
stop on runlevel [^2345]

console log
#chdir /home/
#setuid 1000
#setgid 1000

respawn
respawn limit 20 5

exec x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw
Run Code Online (Sandbox Code Playgroud)

创建此文件后,您可以通过运行以下命令启动它: sudo start x11vnc 您可以在以下位置查看日志:/var/log/upstart/x11vnc.log

  • 这并没有解释如何让它按要求自动启动(并且是这种功能的常见要求) (2认同)

Did*_* A. 15

就是这样:

  1. 安装 X11VNC 服务器(或通过 Ubuntu 软件中心 -> X11VNC 服务器)

    sudo apt-get install x11vnc
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建 VNC 密码文件。

    sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在编辑器 nano(或 gedit、leafpad 等)中创建一个作业文件。

    sudo nano /etc/init/x11vnc.conf
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将其粘贴到文件中:

    start on login-session-start
    
    script
    
    /usr/bin/x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc.pass -rfbport 5900 -bg -o /var/log/x11vnc.log
    
    end script
    
    Run Code Online (Sandbox Code Playgroud)
  5. 保存文件。您为 Upstart 事件login-session-start创建了一个作业。

  6. 重启 Ubuntu。

就是这样!您现在应该能够在登录之前连接到任何 VNC 客户端。