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


50

我有一台运行Ubuntu 12.10的服务器,需要能够登录到该服务器而无需登录。

我发现了许多解决方案,但似乎都无法在12.10中使用。

谁能给我有关如何配置x11vnc以启动服务(在用户登录之前)的逐步说明,以便在与VNC连接时出现图形登录屏幕?

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

谢谢


一般用户仅需要执行所有这些命令和配置即可连接到远程计算机的屏幕,这太荒谬了。在Windows上,只需单击几下鼠标即可使用,尽管远程桌面功能仅适用于昂贵的版本。我已经花了几个小时,但仍然无法使VNC自动启动。这就是为什么Linux在普通用户中仍将不受欢迎的原因……(请不要指出“在Android中使用Linux!”之类的东西。在不同的上下文中,单词有不同的含义。您知道“ Linux”的意思是什么)上下文。)
该死的蔬菜

Answers:


43

安装x11vnc:

sudo apt-get install x11vnc

为您的用户创建一个密码:

x11vnc -storepasswd

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

x11vnc -usepw

如果您尚未登录,则会收到错误消息,并显示以下说明:

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

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

sudo x11vnc -xkb -noxrecord -noxfixes -noxdamage -display :0 -auth /var/run/lightdm/root/:0 -usepw

我不确定这是否是以root用户身份运行x11vnc的最佳方法。也许有人可以编辑而不使用sudo来访问登录名的方法。

一旦运行,您应该能够使用vnc客户端(例如krdc(对于KDE))进行连接。您可能需要使用GNU屏幕来保持x11vnc的运行而无需打开ssh会话

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

这是一个示例新贵作业,您可以用来使它在启动时运行。它需要放在/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

制作完该文件后,可以通过运行以下命令来启动它:sudo start x11vnc您可以在以下位置检查日志:/var/log/upstart/x11vnc.log


1
您可以x11vnc以普通用户身份运行,没问题。例如:ssh到主机并x11vnc -safer -forever -display :0 2>&1 &在tmux会话中运行(良好实践),它将在下运行$USER
特里·王

此外,仅供参考,以改变视口:superuser.com/questions/270608/...
Wtower

2
这并未说明如何按照要求自动启动(这是此功能的常见要求)
LovesTha 2015年

1
有关x11vnc选项的完整列表,请参见此处。我花了很长时间才找到它:karlrunge.com/x11vnc/x11vnc_opts.html
Gabriel Staples

1
并在此处查看有关在启动时自动启动的Raspberry Pi上进行设置的出色教程:megaleecher.net/Raspberry_Pi_VNC_Setup
Gabriel Staples

42

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

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

运行以下命令进行安装:

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

将此插入文件:

[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

然后,开始:

sudo systemctl daemon-reload
sudo systemctl start x11vnc

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

sudo systemctl enable x11vnc

参考bbs.archlinux.org/viewtopic.php?id=168756,获取有关“需求/事后”参数的一些建议
babelmonk

2
为什么未将此答案标记为正确答案?
Cybex

1
如果根本没有显示,则可能要设置任意分辨率:sudo xrandr --fb 1920x1080
东方

2
鉴于x11vnc不会立即工作,因此不建议这样做。在提交每2秒因故障而重新启动的服务之前,提供一个测试命令是一个好主意。我在无头云Ubuntu 17.10服务器上使用lightdm和xfce4。 Restart-sec应该是RestartSec
Ray Foss

1
Ubuntu 18.04似乎也想要RestartSec而不是Restart-sec
Scott Willeke '18

14

这是如何做:

  1. 安装X11VNC服务器(或通过Ubuntu Software Center-> X11VNC服务器)

    sudo apt-get install x11vnc
    
  2. 创建一个VNC密码文件。

    sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
    
  3. 在编辑器nano(或gedit,leafpad等)中创建作业文件。

    sudo nano /etc/init/x11vnc.conf
    
  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
    
  5. 保存文件。您为Upstart事件login-session-start创建了一个作业。

  6. 重新启动Ubuntu。

而已!现在,即使在登录之前,您现在也应该可以连接任何VNC客户端。


但是,当lightdm在连接显示器之后才创建身份验证文件时,如何使它工作?
LovesTha 2015年

@didibus我一直在尝试在Lubuntu中执行此操作,但是x11vnc每次都无法自动启动。就此而言,它甚至不会作为服务开始。文件语法是正确的,我可以x11vnc从shell 开始就可以了。我想念什么?
linuxgringo 2015年

这也适用于Lubuntu。具体来说,是适用于Banana Pi的LeMaker版本的Lubuntu。
AaronD'3

3

babelmonks作为bash脚本回答,复制并另存为x11vnc.sh并以sudo bash /path/to/file/x11vnc.sh运行(对不起,没有足够的代表来发表评论)

#!/bin/bash
#install x11vnc & set password
apt-get install x11vnc -y
x11vnc -storepasswd 123456 /etc/x11vnc.pass
#create config file for  system service
cat > /lib/systemd/system/x11vnc.service <<-EOF
[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

[Install]
WantedBy=multi-user.target
EOF
#restart new services &  enable on boot
systemctl daemon-reload
systemctl start x11vnc
systemctl enable x11vnc

如果您想改善其他答案,请提出修改建议,不要创建新答案。
David Foerster

会很乐意将它添加到我的,如果你想创建一个编辑@尼克斯-badweasel
babelmonk


1

这是一个适用于sddm(针对KDE 5)的配置。目前,-auth guess不适用于sddm,auth文件每次都不同,因此我们需要类似的东西-auth /var/run/sddm/*。服务看起来像

[Unit]
Description="x11vnc"
After=multi-user.target

[Service]
ExecStart=/bin/sh -c "/usr/bin/x11vnc -xkb -noxrecord -display :0 -auth /var/run/sddm/* -rfbauth /etc/x11vnc.pass"
ExecStop=/usr/bin/killall x11vnc

[Install]
WantedBy=multi-user.target

我必须将其放置在之后multi-user.target,如果在之后display-manager.servicex11vnc则找不到身份验证文件,也许sddm以后会生成身份验证文件。这已在Manjaro 18上进行了测试。


0

我使用自己的shell:https//github.com/dvdvideo1234/UbuntuBatches/tree/master/x11VNC

start on login-session-start

script

sudo /usr/bin/x11vnc -xkb -auth /var/run/lightdm/root/:0 -noxrecord -noxfixes -noxdamage -rfbauth /var/srv/x11vnc/x11vnc.pass -forever -bg -rfbport <your_port> -o /var/srv/x11vnc/x11vnc.log

end script

进入文件:

/etc/init/x11vnc.conf

即使在登录屏幕上要求输入密码,它也可以在启动时自动启动。


0

安装x11vnc软件包

#sudo apt-get install x11vnc

然后设置密码

#x11vnc -usepw

然后为x11vnc创建启动脚本

#sudo nano /etc/x11vnc.sh

在文件中:

/usr/bin/x11vnc -bg -forever -shared -reopen -usepw

然后保存

#sudo chmod 777 /etc/x11vnc.sh

然后将脚本文件添加到Control Center => Startup Application,然后单击Add。

> Name-----------x11vnc

> Command-----<map the script file

> Comment------service

必须为所有用户添加

仅在用户登录后运行

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.