我有一台运行Ubuntu 12.10的服务器,需要能够登录到该服务器而无需登录。
我发现了许多解决方案,但似乎都无法在12.10中使用。
谁能给我有关如何配置x11vnc
以启动服务(在用户登录之前)的逐步说明,以便在与VNC连接时出现图形登录屏幕?
我是Linux的新手,所以请在您的回复/评论中提供尽可能多的细节。
谢谢
我有一台运行Ubuntu 12.10的服务器,需要能够登录到该服务器而无需登录。
我发现了许多解决方案,但似乎都无法在12.10中使用。
谁能给我有关如何配置x11vnc
以启动服务(在用户登录之前)的逐步说明,以便在与VNC连接时出现图形登录屏幕?
我是Linux的新手,所以请在您的回复/评论中提供尽可能多的细节。
谢谢
Answers:
安装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
x11vnc
以普通用户身份运行,没问题。例如:ssh到主机并x11vnc -safer -forever -display :0 2>&1 &
在tmux会话中运行(良好实践),它将在下运行$USER
。
上面的答案解决了该问题,尽管对具有systemd(15.04+)的Ubuntu版本进行了一些修改,如下所示:
-auth guess
x11vnc中的新功能-会有所帮助!运行以下命令进行安装:
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
sudo xrandr --fb 1920x1080
。
Restart-sec
应该是RestartSec
RestartSec
而不是Restart-sec
。
这是如何做:
安装X11VNC服务器(或通过Ubuntu Software Center-> 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创建了一个作业。
而已!现在,即使在登录之前,您现在也应该可以连接任何VNC客户端。
x11vnc
每次都无法自动启动。就此而言,它甚至不会作为服务开始。文件语法是正确的,我可以x11vnc
从shell 开始就可以了。我想念什么?
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
使用我的脚本进行轻松设置:installvncubuntu1604.sh
用法:
chmod +x ./installvncubuntu1604.sh; sudo ./installvncubuntu1604.sh
这是一个适用于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.service
,x11vnc
则找不到身份验证文件,也许sddm
以后会生成身份验证文件。这已在Manjaro 18上进行了测试。
我使用自己的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
即使在登录屏幕上要求输入密码,它也可以在启动时自动启动。
安装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
必须为所有用户添加
仅在用户登录后运行