クラウドサービスでのGUI環境構築
はじめに
クラウドサービスでLinux系OSを利用する場合、コマンドライン(CUI)での操作が基本となっています。しかし、Windows環境に慣れたユーザーにとっては、グラフィカルインターフェース(GUI)での操作が直感的で使いやすいものです。
前回2020年の記事ではCentOS 7を使用していましたが、CentOSは以下のスケジュールでサポートが終了しています:
- CentOS Linux 8: 2021年12月31日サポート終了
- CentOS Linux 7: 2024年6月30日にEOL(End of Life)を迎えました
CentOS Streamというプロジェクトは継続していますが、従来のCentOSとは異なり、Red Hat Enterprise Linux(RHEL)の開発版という位置づけに変わりました。
そこで本記事では、CentOSの後継として開発されたAlmaLinuxを中心に、クラウド環境でのGUI構築方法を紹介します。また、様々なクラウドプラットフォームでの設定方法や、より軽量なGUIオプション、最新のリモートアクセス方法についても解説します。
1. 準備:クラウド環境とOS選択
1.1 OS選択
CentOSの代替として、以下のディストリビューションがおすすめです:
- AlmaLinux: CentOSの直接的な後継として開発され、RHEL互換性が高い
- Rocky Linux: CentOSの創設者が立ち上げた新プロジェクト
- Oracle Linux: Oracle Cloudとの相性が良い
- Ubuntu Server: クラウド環境での利用が多く、ドキュメントが充実
本記事では主にAlmaLinuxを使用しますが、他のディストリビューションでも基本的な手順は似ています。
1.2 主要クラウドプラットフォームでのVM作成
各クラウドサービスでのAlmaLinux VMの作成方法を簡単に説明します:
AWS (Amazon Web Services)
- EC2インスタンスタイプ: t3.medium以上を推奨(GUIの快適さのため)
- AMI: AlmaLinux公式イメージを選択
- セキュリティグループ: SSH(22)、RDP(3389)ポートを開放
Azure
- VMサイズ: Standard B2s以上を推奨
- イメージ: MarketplaceからAlmaLinuxを選択
- ネットワークセキュリティグループ: SSH(22)、RDP(3389)ポートを許可
GCP (Google Cloud Platform)
- マシンタイプ: e2-medium以上を推奨
- OSイメージ: AlmaLinuxを選択
- ファイアウォールルール: SSH(22)、RDP(3389)ポートを許可
Oracle Cloud
- シェイプ: VM.Standard.E2.1以上を推奨
- イメージ: AlmaLinuxを選択
- ネットワークセキュリティリスト: SSH(22)、RDP(3389)ポートを許可
2. SSH接続方法の多様化
2.1 Windows Terminal (PowerShell/WSL)
最新のWindows 10/11では、Windows Terminalが標準的なターミナルとして定着しています。
# PowerShellからの接続
ssh username@your-vm-ip-address
# WSL経由での接続
wsl
ssh username@your-vm-ip-address
2.2 VSCode Remote – SSH
Visual Studio Codeを使ったリモート接続も非常に便利です:
- VSCodeに「Remote – SSH」拡張機能をインストール
- F1キーを押して「Remote-SSH: Connect to Host…」を選択
username@your-vm-ip-address
の形式で接続先を入力
2.3 従来のクライアント(TeraTerm/PuTTY)
従来のSSHクライアントも引き続き利用可能です:
- TeraTermの場合: ホスト欄にIPアドレスを入力、ユーザー名とパスワードでログイン
- PuTTYの場合: ホスト名欄にIPアドレスを入力、Open後にユーザー名とパスワードでログイン
個人的にはVSCodeが一番使いやすいです。VSCode(リモート拡張機能) を好むユーザーが増えており、この拡張機能をインストールすると接続できます。
VSCodeを使ったSSH接続の詳細解説
Visual Studio Code(VSCode)は、SSH接続によるリモート作業を強力にサポートするため、サーバーやクラウド上で開発や管理作業を行う際に非常に便利です。
VSCodeのSSH接続が便利な理由
1. ディレクトリの階層構造が視覚的に明確
VSCodeのエクスプローラー機能により、リモートサーバー内のディレクトリやファイルがローカルと同じようにツリー状に視覚的に表示されます。これにより、初心者でも直感的に目的のファイルへアクセス可能であり、複雑な構造でも簡単にナビゲーションできます。
操作手順
- VSCodeを開き、Remote – SSH拡張機能をインストールします。
- F1キーを押して「Remote-SSH: Connect to Host」を選択し、「ssh username@サーバーIP」を入力すると接続が開始されます。
- 接続後、左側のファイルエクスプローラーでリモートファイルやディレクトリを直接編集可能です。
通常のエディタよりも強力で柔軟
VSCodeはテキスト編集だけでなく、プログラミング、設定ファイル編集、デバッグ、バージョン管理まで幅広く対応しています。さらに複数ファイルのタブ切り替えや、強力な検索・置換機能により作業効率が大幅に向上します。
豊富な拡張機能で開発効率アップ
VSCodeには多数の拡張機能があり、言語サポート(Python, JavaScript, PHP, Goなど)、リアルタイムの文法チェック、デバッグ機能、Git連携、Docker統合など、用途に応じて自由に機能を追加できます。
具体的なおすすめ拡張機能例:
- Remote – SSH(公式)
- GitLens(Gitの可視化と効率化)
- Docker(コンテナ管理)
- Prettier(コード整形)
- Bracket Pair Colorizer(コードブロックの視認性向上)
これらを活用することでリモートサーバー環境でもローカルと変わらない操作感を得ることができ、Linux初心者からベテランまで幅広く活用できます。
3. GUI環境のインストール (AlmaLinux)
3.1 基本的なGNOMEデスクトップ環境
# rootユーザーまたはsudo権限で実行
# システムアップデート
dnf update -y
# GNOMEデスクトップ環境のインストール
dnf groupinstall "Server with GUI" -y
# リモートデスクトップ関連パッケージのインストール
dnf install epel-release -y
dnf install xrdp tigervnc-server -y
# ファイアウォール設定
firewall-cmd --permanent --add-port=3389/tcp
firewall-cmd --reload
# xrdpサービスの有効化と起動
systemctl enable xrdp
systemctl start xrdp
# GUIターゲットをデフォルトに設定(オプション)
systemctl set-default graphical.target
3.2 軽量デスクトップ環境 (Xfce)
リソースが限られている場合や、より軽量なGUI環境が必要な場合はXfceがおすすめです:
# Xfceのインストール
dnf install epel-release -y
dnf groupinstall "Xfce" -y
# xrdpのインストールと設定
dnf install xrdp tigervnc-server -y
systemctl enable xrdp
systemctl start xrdp
# Xfceをデフォルトセッションに設定
echo "xfce4-session" > ~/.Xclients
chmod +x ~/.Xclients
4. クラウドプラットフォーム別ポート開放設定
4.1 AWS
- EC2ダッシュボードから該当インスタンスのセキュリティグループを選択
- 「インバウンドルールの編集」をクリック
- 「ルールの追加」から、「タイプ: RDP」、「ソース: カスタム」で自分のIPまたは必要な範囲を指定
4.2 Azure
- 仮想マシンページから「ネットワーク設定」を選択
- 「受信ポートの規則を追加」をクリック
- 「サービス: RDP」、「送信先ポート範囲: 3389」を設定し、適切な優先度と名前を付ける
4.3 GCP
- VPCネットワーク → ファイアウォールルールへ移動
- 「ファイアウォールルールを作成」をクリック
- 名前を入力し、ターゲットタグ、ソースIP範囲を指定
- 「指定したプロトコルとポート」で「tcp:3389」を入力
4.4 Oracle Cloud
- 仮想クラウドネットワーク → セキュリティリストへ移動
- 該当するセキュリティリストを選択
- 「イングレスルールの追加」をクリック
- 「送信先ポート範囲: 3389」、適切なソースCIDRを設定
5. リモートデスクトップ接続
5.1 Windowsのリモートデスクトップクライアント
- Windowsの「リモートデスクトップ接続」を起動
- コンピューター欄にVM IPアドレスを入力
- ユーザー名を入力して接続
- 証明書の警告が表示されたら「はい」をクリック
5.2 macOSのMicrosoft Remote Desktop
- App StoreからMicrosoft Remote Desktopをインストール
- 「+」ボタンから「Add PC」を選択
- PC nameにIPアドレス、User accountにユーザー名を入力
- 接続をダブルクリックしてログイン
6. トラブルシューティングとセキュリティ強化
6.1 一般的な問題と解決策
問題1: 「login failed for display 0」エラー
解決策:
# 既存のセッションを確認して終了
ps aux | grep xrdp
kill -9 [該当するプロセスID]
# 一般ユーザーを作成して切り替え(rootではなく)
useradd newuser
passwd newuser
# パスワードを設定
# 設定ファイルを編集
vi /etc/xrdp/xrdp.ini
[Xrdp]セクションでallow_root_login=true
を追加または変更します。
問題2: 黒い画面やグレーの画面しか表示されない
解決策:
# .xsessionファイルの作成
echo "export GNOME_SHELL_SESSION_MODE=gnome-classic" > ~/.xsession
echo "exec gnome-session" >> ~/.xsession
chmod +x ~/.xsession
# xrdpの再起動
systemctl restart xrdp
6.2 セキュリティ強化
1. rootではなく一般ユーザーを使用
useradd adminuser
passwd adminuser
usermod -aG wheel adminuser # sudo権限を付与
2. ファイアウォールの制限
# 特定のIPアドレスからのみRDP接続を許可
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="your-ip/32" port port=3389 protocol=tcp accept'
firewall-cmd --reload
3. SELinuxの設定
# SELinuxコンテキストの修正
chcon -t bin_t /usr/sbin/xrdp
chcon -t bin_t /usr/sbin/xrdp-sesman
7. 最新アプローチ: Webベースのリモートアクセス
7.1 Apache Guacamole
ブラウザからリモートデスクトップにアクセスできる「Apache Guacamole」も便利です:
# 依存パッケージのインストール
dnf install -y gcc make cairo-devel libjpeg-turbo-devel libpng-devel \
libtool uuid-devel freerdp-devel pango-devel libssh2-devel \
libtelnet-devel libvncserver-devel pulseaudio-libs-devel openssl-devel \
libvorbis-devel libwebp-devel tomcat mysql-server
# Guacamoleのインストールと設定(詳細手順は省略)
# 公式ドキュメント: https://guacamole.apache.org/doc/gug/
7.2 noVNC
HTML5ベースのVNCクライアントであるnoVNCも選択肢の一つです:
# 依存パッケージのインストール
dnf install -y tigervnc-server novnc python3
# noVNCの設定(詳細手順は省略)
8. コンテナ技術でのGUI環境(奇策)
DockerやPodmanを使用したコンテナベースのGUI環境も最新のアプローチです:
# Podmanのインストール
dnf install podman -y
# GUIアプリケーションを含むコンテナの実行例
podman run -it --name gui-container \
-e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/home/user/.Xauthority \
--net=host \
docker.io/jlesage/firefox
または、デスクトップ環境全体をコンテナ化する例:
podman run -d --name desktop \
-p 3389:3389 \
-e USER_ID=1000 \
-e GROUP_ID=1000 \
docker.io/linuxserver/rdesktop:alpine-mate
まとめ
本記事では、CentOSの後継OSであるAlmaLinuxを中心に、クラウド環境でのGUI構築の最新手法を紹介しました。従来のGNOMEデスクトップだけでなく、軽量なXfceやWebベースのリモートアクセス、さらにはコンテナ技術を活用した新しいアプローチまで、様々な選択肢を提供しています。
クラウド環境は常に進化していますので、各クラウドプロバイダーの最新ドキュメントも参照しながら、最適なGUI環境を構築してください。
注意点:
- rootユーザーでの直接ログインは、セキュリティ上推奨されません。一般ユーザーを作成し、必要に応じてsudo権限を付与してください。
- RDPは公開インターネットに直接公開せず、VPNやSSHトンネル経由でアクセスするか、アクセス元IPを制限することをお勧めします。
- クラウドのコスト管理のため、使用しないときはインスタンスを停止することを検討してください。
以下は2020年7月に公開した記事です。当時の技術環境を知るための記録として、内容をそのまま残してあります。
クラウドサービスでlinux系のOSはコマンド入力が必須になっているのではないでしょうか。CUI(Character-based User Interface)と呼ばれるものでキーボードに入力されるコマンドによって、オペレーティング・システムの操作をおこなうユーザーインターフェースだからです。これに対し、GUI(Graphical User Interface)はユーザが画面で視覚的に理解して行動を指定できるもので、直感的に操作できるのが特徴です。マウスや音声などで指示をだします。一般の多くの人はウインドウズを使用しているので前者をおこなおうとすると苦労します。そこで本日はクラウドに作成したVMにGUI環境を組み込んでRDP(リモートデスクトップ接続)をしてみましょう。私はOracle CloudのCentOS7のVMがすでに構築してあるのでこれを使用します。
それではいつものようにSSH接続をします。ソフトはTeraTermを使います。root権限にてログインしておきます。デスクトップ環境をインストールするため次のコマンドでGNOME Desktopをインストールします。
yum groups install "GNOME Desktop"
次にxrdp、および関連するtigervnc-server をインストールします。
xrdpはオープンソースで開発されたソフトウェアです。
yum install epel-release
yum install xrdp tigervnc-server
ポートの開放状況を確認し、RDP接続に使用するポート3389を開放します。その後設定を反映します。
firewall-cmd --list-all
firewall-cmd --permanent --zone=public --add-port=3389/tcp
firewall-cmd --reload
xrdpを起動、および再起動時に起動するようにします。
systemctl start xrdp
systemctl enable xrdp
そしてオラクルクラウドのWebページでもポート番号3389を開放します。AWS、GCP、AZUREにも同等の設定があるのでこれを忘れずにやっておきましょう。

ここまでで設定はほぼ終わりなのでリモートデスクトップ接続をしてみます。VMの外部アドレスをコンピュータに、ユーザー名も入力して接続してみます。
ここで問題が発生しました。接続は成功しているが下記のようなメッセージが。
connectiong to sesman ip 127.0.0.1 port 3350
sesman connect ok
sending login info to session manager, please wait…
login failed for display 0

yum updateでファイルを更新しました。400近くありました。またユーザーをrootにしてログインしたらリモートできるようになりました。

コメント