如何在亚马逊EC2 Ubuntu服务器上设置GUI

147
我正在使用Amazon Ubuntu EC2实例,它只有命令行界面。我想为该服务器设置UI,以便可以使用远程桌面工具进行访问。是否有办法将GUI应用于EC2实例?

1
@user3071284 这篇文章很棒,只是缺少一个步骤 - 在您的实例安全组中打开 RDP 端口(3389)。 - Noam Manos
1
很遗憾,该链接现在不可用。 - KK2491
对我来说解决方案是确保xstartup文件可执行:chmod +x ~/.vnc/xstartup - Christopher Broderick
6个回答

207

这是可以做到的。以下是设置GUI的步骤:

创建带有密码登录的新用户

sudo useradd -m awsgui
sudo passwd awsgui
sudo usermod -aG admin awsgui

sudo vim /etc/ssh/sshd_config # edit line "PasswordAuthentication" to yes

sudo /etc/init.d/ssh restart

在AWS上设置基于UI的Ubuntu机器。

在安全组中打开端口5901。然后ssh到服务器实例。运行以下命令安装UI和VNC服务器:

sudo apt-get update
sudo apt-get install ubuntu-desktop
sudo apt-get install vnc4server

然后运行以下命令并输入 VNC 连接的登录密码:

su - awsgui

vncserver

vncserver -kill :1

vim /home/awsgui/.vnc/xstartup

然后按下Insert键,使用键盘箭头在文本文件中滚动,并从以下行的开头删除两行前面的井号(#),该行是 "取消注释以下两行以进行正常桌面。" 在第二行添加 "sh" 以使该行读取

exec sh /etc/X11/xinit/xinitrc. 

完成后,在键盘上按下Ctrl + C,然后键入:wq并按Enter键。

接着重新启动VNC服务器。

vncserver

您可以从这里下载xtightvncviewer(适用于Ubuntu)以查看桌面:https://help.ubuntu.com/community/VNC/Clients

在VNC客户端中,输入公共DNS加“:1”(例如www.example.com:1)。输入VNC登录密码。确保使用普通连接。不要使用密钥文件。

此外,可在此处获得额外的指南:http://www.serverwatch.com/server-tutorials/setting-up-vnc-on-ubuntu-in-the-amazon-ec2-Page-3.html

可以从此处下载Mac VNC客户端:https://www.realvnc.com/en/connect/download/viewer/

在控制台上开放端口

sudo iptables -A INPUT -p tcp --dport 5901 -j ACCEPT

如果出现灰色窗口问题,可能是因为“.vnc/xstartup”文件位于不同的用户下。因此,请在相同的用户下运行VNC服务器,而不是“awsgui”用户。

vncserver


13
我认为在执行 sudo usermod -aG admin awsgui 之后,你漏掉了 su - awsgui - Konstantin K
14
请记得在您的安全组中开放5901端口,以使其正常工作。感谢详细的回答! - Daniel Magliola
12
尝试了几个指南,包括这个,但我只得到了一个灰色背景 - 没有Ubuntu桌面。 - Wrench
5
我做了以下操作解决了我遇到的灰屏问题:https://www.digitalocean.com/community/questions/vnc-gray-screen-ubuntu-14-04 - timhc22
9
如果 vim awsgui/.vnc/xstartup 无法工作,请尝试使用 vim .vnc/xstartup - TomasVeras
显示剩余13条评论

79
所以我按照第一个答案进行操作,但是当我连接时,我的VNC查看器出现了灰色屏幕。我找到了这个Ask Ubuntu链接来解决它。
唯一的区别是,您需要安装这些额外的软件包:
apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal

并使用这个 ~/.vnc/xstartup 文件:

#!/bin/sh

export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &

gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

其他所有内容都是相同的。

在EC2 Ubuntu 14.04 LTS上进行了测试。


2
这个方法对我有效,需要在运行vnc命令之前先执行su - awsgui,并且在之前的答案基础上进行。 - Vincenzo Pii
1
这一步是必要的,是在按照大多数关于如何在AWS上设置Ubuntu桌面与TightVNCServer的教程后使其正常工作所必需的。没有这一步,所有的教程都对我无效。 - techdog
1
在完成这些步骤后,您可能需要重新启动操作系统。我按照这个答案操作,必须先重新启动。 - tno2007
在终端中运行以下命令:killall gnome-panel && sudo gnome-panel & - Octocat
我必须对“~/.vnc/xstartup”执行“chmod 755”命令,才能消除灰色屏幕。在Ubuntu16.04 LTS上测试通过。 - VarsMolta
显示剩余2条评论

17

对于Ubuntu 16.04

1) 安装软件包

$ sudo apt update;sudo apt install --no-install-recommends ubuntu-desktop
$ sudo apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal vnc4server

2)编辑 /usr/bin/vncserver 文件,按照以下方式进行修改:

找到这一行:


"# exec /etc/X11/xinit/xinitrc\n\n".

并添加以下代码。

"gnome-session &\n".
"gnome-panel &\n".
"gnome-settings-daemon &\n".
"metacity &\n".
"nautilus &\n".
"gnome-terminal &\n".

3) 使用 "vncserver" 命令为用户创建 VNC 密码和 VNC 会话。

lonely@ubuntu:~$ vncserver
You will require a password to access your desktops.
Password:
Verify:
xauth: file /home/lonely/.Xauthority does not exist
New 'ubuntu:1 (lonely)' desktop is ubuntu:1
Creating default startup script /home/lonely/.vnc/xstartup
Starting applications specified in /home/lonely/.vnc/xstartup
Log file is /home/lonely/.vnc/ubuntu:1.log

现在您可以使用IP/域名和端口1访问GUI

stackoverflow.com:1

已在AWS和Digital Ocean上测试。

对于AWS,您需要在防火墙上允许端口5901。

要结束会话

$ vncserver -kill :1

请参考以下指南:

https://linode.com/docs/applications/remote-desktop/install-vnc-on-ubuntu-16-04/

可参考此指南创建永久会话作为服务。

http://www.krizna.com/ubuntu/enable-remote-desktop-ubuntu-16-04-vnc/


它起作用了,但在重新启动机器后,ssh停止连接并显示连接超时错误。你有任何想法为什么会发生这种情况吗? - Shan Khan

10

1)在EC2上启动Ubuntu实例。
2)在实例安全组中开放SSH端口。
3)对实例进行SSH连接。
4)执行:

sudo apt-get update    sudo apt-get upgrade

5) 因为您将从Windows远程桌面连接,所以请编辑Linux实例上的sshd_config文件以允许密码身份验证。

sudo vim /etc/ssh/sshd_config

6) 将PasswordAuthentication从 no 更改为 yes,然后保存并退出。
7) 重新启动SSH守护程序以使更改生效。

sudo /etc/init.d/ssh restart

8) 暂时获得root权限并将ubuntu用户的密码更改为复杂密码以增强安全性。在输入命令 passwd ubuntu 后按Enter键,然后会提示您两次输入新密码。

sudo –i
passwd ubuntu

9) 切换回ubuntu用户账户,进入ubuntu主目录。

su ubuntu
cd

10) 在您的Linux实例上安装Ubuntu桌面功能,最后一个命令可能需要长达15分钟才能完成。

export DEBIAN_FRONTEND=noninteractive
sudo -E apt-get update
sudo -E apt-get install -y ubuntu-desktop

11) 安装xrdp

sudo apt-get install xfce4
sudo apt-get install xfce4 xfce4-goodies

12) 将xfce4设置为RDP连接的默认窗口管理器。

echo xfce4-session > ~/.xsession

13) 将 .xsession 复制到 /etc/skel 目录中,使得 xfce4 成为任何新用户帐户的默认窗口管理器。

sudo cp /home/ubuntu/.xsession /etc/skel

14) 打开xrdp.ini文件,允许更改您要连接到的主机端口。

sudo vim /etc/xrdp/xrdp.ini

(至今尚未安装xrdp。请首先使用sudo apt-get install xrdp命令安装xrdp,然后编辑上述提到的文件)

15) 查找 [xrdp1] 部分并更改以下文本 (完成后保存并退出 [:wq]).

port=-1
- to -
port=ask-1

16) 重新启动 xrdp。

sudo service xrdp restart

17) 在 Windows 上,打开远程桌面连接客户端,将 Amazon EC2 实例的完全限定名称粘贴到“计算机”字段中,然后单击“连接”。

18) 在提示登录 xrdp 时,请确保选择 sesman-Xvnc 模块,并输入用户名 ubuntu 和您在第8步创建的新密码。当您开始一个会话时,端口号为-1。

19) 系统连接后,连接日志屏幕上会显示几条状态消息。仔细留意这些状态消息,并记录显示的 VNC 端口号。如果您想稍后返回会话,请在 xrdp 登录对话框的端口字段中指定此数字。

查看更多详情: https://aws.amazon.com/premiumsupport/knowledge-center/connect-to-linux-desktop-from-windows/
http://c-nergy.be/blog/?p=5305


2
虽然这理论上回答了问题,但最好在此处包含答案的基本部分,并提供参考链接。 - Bhargav Rao
3
我无法在 xrdp.ini 文件中找到 [xrdp1] 部分。 - Sudhir

3

对于 LXDE/Lubuntu


1. 连接您的实例 (本地转发端口 5901)

ssh -L 5901:localhost:5901 -i "xxx.pem" ubuntu@xxx.amazonaws.com

2. 安装软件包

sudo apt update && sudo apt upgrade
sudo apt-get install xorg lxde vnc4server lubuntu-desktop

3. 创建 /etc/lightdm/lightdm.conf

sudo nano /etc/lightdm/lightdm.conf

4. 将以下内容复制并粘贴到 lightdm.conf 中并保存

[SeatDefaults]
allow-guest=false
user-session=LXDE
#user-session=Lubuntu

5. 设置 vncserver (您将被要求为 vncserver 创建密码)

vncserver
sudo echo "lxpanel & /usr/bin/lxsession -s LXDE &" >> ~/.vnc/xstartup

6. 重新启动实例并重新连接

sudo reboot
ssh -L 5901:localhost:5901 -i "xxx.pem" ubuntu@xxx.amazonaws.com

7. 启动 vncserver

vncserver -geometry 1280x800

8. 在您的远程桌面客户端 (例如 Remmina) 中将服务器设置为 localhost:5901,协议设置为 VNC


0

我遇到了同样的问题,最终为自己编写了一份指南(https://dugas.ch/lord_of_the_files/run_your_unity_ml_executable_in_the_cloud.html

这里的回答可以帮助您快速解决问题,但我建议您了解不同层次的基础知识,以实现在Unix中运行GUI / OpenGL环境/远程桌面。 这也取决于您想让事情在GPU还是CPU上运行。

enter image description here

以这种心态,自己启动每个组件会更清楚地知道它们在做什么。

简而言之,你想要:

  • 启动 X 服务器(GPU / CPU)
  • 启动桌面环境
  • 启动 VNC 服务器
  • 在 AWS 控制台上启用 VNC 端口的防火墙流量

最棘手的部分是让 X 服务器运行起来,可以直接使用 xorg 和 NVIDIA 驱动程序以及虚拟屏幕(GPU),或者使用 Xvfb(CPU)。

例如,使用 Xvfb(CPU):

  • X 服务器
Xvfb :0 -screen 0 1024x768x24 +extension GLX +render -noreset >> xsession.log 2>&1 &
  • 桌面环境
DISPLAY=:0 startxfce4 
  • vnc 服务器
x11vnc -display :0 -usepw -rfbport 5901 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接