问题描述
我有一台运行Ubuntu 12.10的服务器,需要能够远程访问此服务器而不需要logged-in。
我找到了很多解决方案,但似乎都没有与12.10一起使用。
任何人都可以给我step-by-step指令,了解如何配置x11vnc
作为服务启动(在用户登录之前),这样当与VNC连接时,我将看到一个图形登录屏幕?
我是Linux的新手,所以请在回复/评论中尽可能详细地说明。
谢谢
最佳解决思路
安装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。
一旦运行,您应该能够使用vdc客户端连接,例如krdc(用于KDE)。您可能希望使用GNU Screen来保持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
次佳解决思路
上面的答案解决了这个问题,虽然对于带有systemd(15.04+)的Ubuntu版本进行了一些修改,如下所示:
-
利用x11vnc中新的
-auth guess
功能 – 这有助于! -
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
将其插入文件中:
[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
第三种解决思路
这是如何做:
-
安装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事件login-session-start创建了一个作业。
-
重启Ubuntu。
而已!您现在应该能够在登录前连接任何VNC客户端。
第四种思路
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