Serverless Operations, inc

>_cd /blog/id_npcfnro46mxk

title

Amazon Linux2023でデスクトップ環境を有効化する

summary

弊社ではAmazon EC2を開発環境として使うことが多いです。理由としてはお客様の環境によってはMacであったりWindowsであったりローカルPCの環境がバラバラであることが大きいです。そこでAmazon EC2を使うことで環境を統一し、OS依存による環境の差異を無くしてしまおうというのが狙いです。また、開発環境が壊れてしまっても、捨てて作り直せばよいため、その辺りも利便性があります。

何故デスクトップ環境が必要になるのか

EC2で開発をするにあたっての一番の課題は、ローカルのブラウザにアクセスできないということです。フロントエンド開発やその他のツールを使う上でローカルで「http://localhost:3000」などURLを立ち上げてブラウザから確認をするケースは多いでしょう。この課題を解決するためにEC2上でもデスクトップを有効化する必要があります。

インストール手順

以下EC2上でコマンドを打ったり設定ファイルを編集していったりという感じなので淡々と手順を述べていきたいと思います。手順としては以下のURLを参考にしていますのでこれらを見ていただいても良いと思います。

https://docs.aws.amazon.com/linux/al2023/ug/installing-gnome-al2023.html

https://docs.aws.amazon.com/linux/al2023/ug/vnc-configuration-al2023.html

GNOME desktop環境のインストール

[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y

もし、以下のエラーメッセージが出た場合にはAmazon Linux2023のdnfリポジトリがrelease 2023.7もしくはそれを使っていない可能性が高いです。参照するリポジトリをアップグレードしましょう

[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y
Last metadata expiration check: 0:13:06 ago on Tue Jun 24 01:21:54 2025.
Module or Group 'Desktop' is not available.
Error: Nothing to do.

dnfリポジトリのアップグレード

現在使用しているリポジトリのバージョンを以下のコマンドでチェックします。ここで、2023.7以前のものが表示されればアップグレードをしましょう

[ec2-user ~]$ rpm -q system-release
system-release-2023.6.20250317-0.amzn2023.noarch

以下のコマンドで利用可能なリポジトリのバージョンを確認します。

[ec2-user@ ~]$ sudo dnf check-release-update

バージョンを指定してリポジトリのアップグレードを実施します。

[ec2-user ~]$ sudo dnf upgrade --releasever=2023.7.20250623

再度最初のコマンドを打てばデスクトップ環境が問題なくインストールされるはずです

[ec2-user ~]$ sudo dnf groupinstall "Desktop" -y

TigerVNCサーバーのインストール

TigerVNCサーバーは、Linuxなどのサーバー上にあるデスクトップ環境(GUI)を、リモートから操作できるようにするVNC(Virtual Network Computing)サーバーソフトウェア。これをインストールしてローカルのPCからEC2上のデスクトップ環境へGUIで接続します。

まずは、TigerVNCをインストールしましょう。

[ec2-user ~]$ sudo dnf install -y tigervnc-server

インストールが終わればTigerVNCの設定を行っていきます。まずはリモートで接続するためのパスワードを設定します。「a view-only password」も聞かれますがこれは設定は不要です。

[ec2-user ~]$ vncpasswd

デスクトップへつなぐユーザの設定をします。

[ec2-user ~]$ sudo vi /etc/tigervnc/vncserver.users

を開いて以下を追記して下さい

:1=ec2-user

VNCサーバーの設定ファイルを開きます。

[ec2-user ~]$ sudo vi /etc/tigervnc/vncserver-config-defaults

以下の設定を追記して下さい。

session=gnome 
securitytypes=vncauth,tlsvnc 
geometry=1920x1080 
localhost 
alwaysshared

以上で設定は完了したのでVNCサーバーを以下のコマンドで立ち上げます。

[ec2-user ~]$ sudo systemctl start vncserver@:1

正しく起動されているかを確認します。statusコマンドを入力して以下のような表示になれば問題なくサーバーは立ち上がっています。

[ec2-user ~]$ sudo systemctl status vncserver@:1
● vncserver@:1.service - Remote desktop service (VNC)
   Loaded: loaded (/usr/lib/systemd/system/vncserver@.service; enabled; preset: disabled)
   Active: active (running) since Tue 2025-06-24 02:13:18 UTC; 3s ago
  Process: 63247 ExecStartPre=/usr/libexec/vncsession-restore :1 (code=exited, status=0/SUCCESS)
  Process: 63259 ExecStart=/usr/libexec/vncsession-start :1 (code=exited, status=0/SUCCESS)
  Main PID: 63273 (vncsession)
   Tasks: 0 (limit: 9346)
   Memory: 532.0K
    CPU: 28ms
   CGroup: /system.slice/system-vncserver.slice/vncserver@:1.service
       ‣ 63273 /usr/sbin/vncsession ec2-user :1

Jun 24 02:13:18 ip-10-0-100-9.ap-northeast-1.compute.internal systemd[1]: Starting vncserver@:1.service - Remote desktop service (VNC)...
Jun 24 02:13:18 ip-10-0-100-9.ap-northeast-1.compute.internal systemd[1]: Started vncserver@:1.service - Remote desktop service (VNC).

また、このままですとEC2を立ち上げるたびに上記コマンドを実行する必要があります。EC2起動時に自動でVNCサーバーが立ち上がるように以下の設定を行いましょう

[ec2-user ~]$ sudo systemctl enable vncserver@:1

また、デフォルトでは何も操作をしないとロック画面になってしまいます。それも少し煩わしいので以下のコマンドで無効化します。

[ec2-user ~]$ gsettings set org.gnome.desktop.session idle-delay 0

VNCクライアントからデスクトップ環境へ接続します。

VNCサーバーは、クライアント接続用にTCPソケットを公開しています。セキュリティグループを通じてVNCポートを直接公開することも可能ですが、このチュートリアルでは、SSHトンネリングを使用するより安全な方法を紹介しています。SSHトンネルを通じて接続することで、ローカルマシンとEC2インスタンス間の通信が暗号化されます。トンネル経由で接続した後は、前のステップで設定したパスワードを使ってVNCサーバーに認証を行います。

EC2がパブリックサブネット上に配置されている場合は以下でトンネルを構築して下さい。

[ローカル ~]$ ssh -i <keypair> -L 5901:localhost:5901 ec2-user@<address>

また、プライベートサブネットにEC2をおいている場合にはSSMを使ってトンネルを構築します。

aws ssm start-session \
 --profile <プロファイル> \
 --region ap-northeast-1 \
 --target <インスタンスID> \
 --document-name AWS-StartPortForwardingSession \
 --parameters portNumber=“5901”,localPortNumber=“5901"

ローカルPCにVNCクライアントをインストールしてデスクトップ環境へ接続します。TigerVNCのViewerが存在しますが、何故か僕の環境ではクラッシュしてしまったため、RealVNC Viewerを使用しました。以下のように正しくEC2のデスクトップ環境へ接続することが確認出来ました。

Written by
CEO

堀家 隆宏

Takahiro Horike

  • Facebook->
  • X->
  • GitHub->

Share

Facebook->X->
Back
to list
<-