我想通过VNC远程访问Ubuntu计算机。但是,只有在用户登录后,我才能访问Ubuntu机器。我想从登录屏幕本身通过VNC访问ubuntu机器。我们可以从登录屏幕访问所有Windows计算机。但是,我们无法从登录屏幕访问Ubuntu计算机。有某种方法,但我不知道细节。有人可以解决这个问题吗?
我想通过VNC远程访问Ubuntu计算机。但是,只有在用户登录后,我才能访问Ubuntu机器。我想从登录屏幕本身通过VNC访问ubuntu机器。我们可以从登录屏幕访问所有Windows计算机。但是,我们无法从登录屏幕访问Ubuntu计算机。有某种方法,但我不知道细节。有人可以解决这个问题吗?
Answers:
最好的选择是安装xrdp 。安装后,您可以使用RDP客户端连接到计算机-然后,将像在登录屏幕上一样提示您输入凭据。
总的来说,我建议x11vnc
。
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
,使用上面保存的密码登录。
大多数X显示管理器(例如GDM,XDM,KDM)都启动初始的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会话。他们为什么现在以这种方式这样做是一个谜,但是它破坏了此脚本的旧版本。
vncviewer <remote_ip>
如果您不想使用RDP,可以使用VNC进行以下操作:
sudo apt-get install x11vnc
或通过Ubuntu Software Center-> X11VNC服务器)设置密码:
sudo mkdir /etc/x11vnc
sudo x11vnc -storepasswd /etc/x11vnc/passwd
选择y
保存密码。
创建一个/etc/init
名为的空文件x11vnc.conf
:
sudo -H gedit /etc/init/x11vnc.conf
将此粘贴到文件中:
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
保存并关闭
而已!现在,即使在登录之前,您现在也应该可以连接任何VNC客户端。