我有一台运行 Ubuntu 12.10 的服务器,需要能够在未登录的情况下远程访问该服务器。
我找到了许多解决方案,但似乎没有一个适用于 12.10。
有人能给我提供关于如何配置为服务启动(在用户登录之前)的分步说明x11vnc
,以便在连接 VNC 时我会看到图形登录屏幕吗?
我是 Linux 新手,因此请在您的回复/评论中提供尽可能详细的信息。
谢谢
答案1
上述答案解决了这个问题,但针对带有 systemd 的 Ubuntu 版本(15.04+)做了一些修改,如下所示:
- 利用
-auth guess
x11vnc 中的新功能 - 这很有帮助! - 更新 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
答案2
安装 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: -auth /var/run/lightdm/root/:0
假设您使用 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。
以下是一个示例 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
创建此文件后,您可以通过运行以下命令启动它:sudo start x11vnc 您可以在以下位置检查日志:/var/log/upstart/x11vnc.log
答案3
就是这样:
安装 X11VNC 服务器(或通过 Ubuntu 软件中心 -> X11VNC 服务器)
sudo apt-get install x11vnc
创建 VNC 密码文件。
sudo x11vnc -storepasswd yourVNCpasswordHERE /etc/x11vnc.pass
在编辑器 nano(或 gedit、leafpad 等)中创建一个作业文件。
sudo nano /etc/init/x11vnc.conf
将其粘贴到文件中:
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
保存文件。您为 Upstart 事件创建了一个作业登录会话开始。
- 重新启动 Ubuntu。
就这样!现在,您甚至在登录之前就可以连接到任何 VNC 客户端。
答案4
这是适用于的配置sddm
(适用于 KDE 5)。目前,-auth guess
不适用于sddm
,每次身份验证文件都不同,所以我们需要类似的东西-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.service
找不到x11vnc
身份验证文件,也许sddm
稍后会生成身份验证文件。这已在 Manjaro 18 上进行了测试。