如何从登录屏幕通过VNC访问ubuntu机器?


17

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


如果另一台计算机在同一LAN上,则仅使用XDMCP代替VNC是可行的。如果不在同一LAN上,则网络上未加速的X可能会太慢。
罗宾·格林

Answers:


10

最好的选择是安装xrdp 安装xrdp。安装后,您可以使用RDP客户端连接到计算机-然后,将像在登录屏幕上一样提示您输入凭据。


我已经安装了xrdp,但是仍然无法从登录屏幕访问ubuntu计算机。
karthick87

@karthick:您是通过VNC还是使用RDP客户端连接到计算机?
内森·奥斯曼

我在我的机器上找不到RDP客户端。它会位于哪里?
karthick87

@karthick:您是否正在使用Ubuntu作为客户端?如果是这样,要使用的程序称为“终端服务器客户端”。在Windows上,它称为“远程桌面” IIRC。
内森·奥斯曼

是的,谢谢。是否可以为终端服务器客户端创建启动器?
karthick87

5

总的来说,我建议x11vnc

TL; DR

apt-get -y install x11vnc
x11vnc -storepasswd

输入您的密码,默认情况下它~/.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 Server主机运行:

~/bin/start_x11vnc.sh

通过终端(或-forever使用init.d服务upstart服务systemd单元或您希望的方式作为守护程序启动它)

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

使用X11“魔术曲奇”

大多数X显示管理器(例如GDMXDMKDM)都启动初始的X11服务器,并使用MIT Magic Cookie 对它进行身份验证。根据您的显示管理员,可以在各种位置之一找到魔术cookie 。

我很幸运在Ubuntu GDM登录屏幕* NOTE1上打开VNC会话,方法是使用以下脚本查找魔术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

我可以start_x11vnc.sh随时通过SSH ...(甚至在通过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客户端连接然后立即关闭
Dims

@Dims使用命令:vncviewer <remote_ip>
Gokul NC

对于新版本的Ubuntu,该脚本已损坏...我对其进行了更新,使其能够再次运行。现在看来gdm显示会话已经与登录会话分开了,因此,如果您在Ubuntu上使用此脚本,它将首先带您进入GDM登录屏幕,然后在您登录时,此X会话显示将变为空白。现在,您需要停止第一个x11vnc进程,然后再次重新运行脚本,以重新附加到单独的登录的X会话和显示中。
TrinitronX


0

如果您不想使用RDP,可以使用VNC进行以下操作:

  1. 安装X11VNC服务器:(sudo apt-get install x11vnc或通过Ubuntu Software Center-> 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客户端。


这没用。
钉头锤'18

@mace有趣的是,它对我有用,也许取决于Ubuntu版本。不幸的是,我不记得完成此过程后Ubuntu的版本。
Didier A.

0

回复:尝试与X11vnc

自2011年9月以来,x11vnc尚未更新!有已知的错误,每当弹出对话(例如,在任何窗口上单击“文件”菜单)断开会话时,都会触发x11vnc的堆栈粉碎终止,这是我的一个错误。

Raspberry pi可以在:0上连接到桌面管理器会话,为什么在地狱中这是个问题呢?为什么在任何现代操作系统上都必须依赖一个孤立的已有7年历史的程序来执行此操作?

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.