如何从登录界面通过VNC访问ubuntu机器?

我想通过VNC远程访问Ubuntu机器。 但是我只能在用户登录时访问Ubuntu机器。我想从登录屏幕本身通过VNC访问ubuntu机器。 我们可以从登录屏幕访问所有Windows机器。 但是我们无法从登录屏幕访问Ubuntu机器。 有一些方法,但我不知道细节。 有人可以解决这个问题吗?

最好的办法是安装xrdp 安装xrdp 。 安装后,您可以使用RDP客户端连接到计算机 – 然后系统会提示您输入凭据,就像登录屏幕上一样。

总的来说, 我推荐x11vnc

TL; DR

 apt-get -y install x11vnc x11vnc -storepasswd 

输入您的密码,默认情况下保存在INSECURE加密forms的 ~/.vnc/passwd 中。 它可以被解密,因为密钥是已知的。 ..用文件系统权限保护它)

 chmod 600 ~/.vnc/passwd 

在本地保存我的帮助程序脚本:

 mkdir ~/bin/ curl https://gist.githubusercontent.com/trinitronx/76d2bf98489e5e3e84fa/raw/53885d87f91320b574ca4f7d609e4bb268274f68/start_x11vnc.sh > ~/bin/start_x11vnc.sh && chmod +x ~/bin/start_x11vnc.sh 

从您的VNC客户端主机:

 ssh -f -L 5900:127.0.0.1:5900 -p 22 youruser@your-ubuntu-host.example.com '~/bin/start_x11vnc.sh && sleep 10' 

或者,从您的VNC服务器主机运行:

 ~/bin/start_x11vnc.sh 

通过终端(或者将它作为一个守护进程启动,使用-forever作为init.d服务 , upstart服务 , systemd单元 ,或者你想要的)

现在从您的客户端主机运行您选择的VNC客户端,将其指向: 127.0.0.1:5900127.0.0.1:5900 ,使用上面保存的密码登录。

使用X11“Magic Cookie”

大多数X显示管理器 (如GDM , XDM , KDM )启动一个初始X11服务器并使用MIT Magic Cookie 对其进行身份validation 。 根据您的显示管理器,魔术cookie将在不同位置之一找到 。

我很幸运在Ubuntu GDM登录屏幕上打开VNC会话*注意1通过使用此脚本查找魔术cookie:

 #!/bin/bash DEFAULT_DISPLAY=:0 X11VNC_DISPLAY="$DEFAULT_DISPLAY" if [ -x /usr/bin/x11vnc ]; then [ "$1" == '-nocache' ] && CACHE_FLAG='-noncache' || CACHE_FLAG='-noncache' [ "$2" == '-guess' ] && GUESS_FLAG='-auth guess' || GUESS_FLAG='' [ -f /root/.vnc/passwd ] && PASSWORD="/root/.vnc/passwd" [ -f $HOME/.vnc/passwd ] && PASSWORD="$HOME/.vnc/passwd" [ ! -z "$PASSWORD" ] && x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage EXIT_CODE=$? if [ $EXIT_CODE -ne 0 ]; then echo "\n*********************************************************************" echo "*** Could not start x11vnc! Trying again with gdm MAGIC_COOKIE! ***" echo "*********************************************************************\n" # Old GDM location for Ubuntu <= 17.10 MAGIC_COOKIE_FILE=`sudo find /var/run/gdm/ -iname database | grep for-gdm` # New GDM location for Ubuntu >= 17.10 [ -z "$MAGIC_COOKIE_FILE" ] && NUM_MAGIC_COOKIE_FILE_SESSIONS=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' 2>/dev/null | wc -l` if [ -z "$MAGIC_COOKIE_FILE" -a "$NUM_MAGIC_COOKIE_FILE_SESSIONS" -gt 1 ]; then # Find the current user's session MAGIC_COOKIE_FILE=`sudo find /run/user/$(id -u) -iwholename '*/gdm/*' -iname '*Xauthority'` X11VNC_DISPLAY=":1" else # Find the GDM user's session (or whichever shows up first in ps list) # This should pick up the original gdm session which grabs :0 # If you login after gdm login screen, your Xorg server may end up on another display! # Workaround for now is to restart x11vnc on that display number [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /run/user/ -iwholename '*/gdm/*' -iname '*Xauthority' | head -n1` fi # Old lightdm location for Ubuntu <= 17.10 [ -z "$MAGIC_COOKIE_FILE" ] && MAGIC_COOKIE_FILE=`sudo find /var/lib -name '.Xauthority' -o -wholename '/var/run/lightdm/root/:0' | head -n1` #sudo bash -c "[ -z \"$MAGIC_COOKIE_FILE\" -a -e /var/run/lightdm/root/:0 ]" && MAGIC_COOKIE_FILE='/var/run/lightdm/root/:0' [ -n "$MAGIC_COOKIE_FILE" -a -z "$GUESS_FLAG" ] && AUTH_COOKIE_FLAG="-auth $MAGIC_COOKIE_FILE" [ ! -z "$PASSWORD" ] && sudo x11vnc -display $X11VNC_DISPLAY -xkb -rfbauth $PASSWORD -rfbport 5900 -shared -forever -nowf -norc -notruecolor -bg $GUESS_FLAG $CACHE_FLAG -noxdamage ${AUTH_COOKIE_FLAG} fi fi 

我可以随时通过SSH启动这个脚本(我称之为start_x11vnc.sh )...甚至在通过gdm登录界面登录之前。 它启动了一个x11vnc服务器,然后我可以通过SSH隧道连接。 (使用ssh -L 5900:127.0.0.1:5900或将LocalForward 5900 127.0.0.1:5900添加到~/.ssh/config主机条目)。

注1 :在一些新的发行版本中,例如Ubuntu> = 17.10,GDM登录X会话显示与登录用户的X会话显示完全分开。 因此,有必要首先连接到GDM X会话,登录...最后断开连接并重新连接到新启动的X会话。 为什么他们现在这样做是一个谜,但它打破了这个脚本的旧版本。

要通过VNC ssh远程连接启用GDM登录,请尝试使用X11vnc。 另见这个答案 。

如果您不想使用RDP,以下是使用VNC的方法:

  1. 安装X11VNC服务器: sudo apt-get install x11vnc (或通过Ubuntu软件中心 – > X11VNC服务器)
  2. 设置密码:

     sudo mkdir /etc/x11vnc sudo x11vnc -storepasswd /etc/x11vnc/passwd 

    选择y保存密码。

  3. /etc/init创建一个名为x11vnc.conf的空文件:

     sudo -H gedit /etc/init/x11vnc.conf 
  4. 将其粘贴到文件中:

     start on login-session-start exec x11vnc -xkb -forever -auth /var/run/lightdm/root/:0 -display :0 -rfbauth /etc/x11vnc/passwd -rfbport 5900 -bg -o /var/log/x11vnc.log 
  5. 保存并关闭

  6. 重启Ubuntu

而已! 您现在应该能够在登录前连接任何VNC客户端。