EC2上でUbuntu 22.04のデスクトップ環境を作ってi3wmに切り替える

どうも、キーボードからマウスに手を動かすのが億劫な寺内です。

Linuxではウィンドウマネージャを自由に選択することができます。ウィンドウのルック&フィールや操作体系は、PCの利用者の操作性に最も影響を与える機能であり、ユーザエクスペリエンスの重要な要素です。Windowsではマイクロソフトの押し付け一択ですが、Linuxデスクトップの場合、X Windowとウィンドウマネージャが分離しているので、数ある中から自分の好みのものを選ぶことができます。

今回、i3wmというタイル型ウィンドウマネージャを知りました。このウィンドウマネージャは、ショートカットキーを自在にカスタマイズすることができ、ほぼ全てのウィンドウ操作をキーボードで行うことが出来るというものだそうです。

キーボードショートカット好きなぼくとしては、是非試したくなり、EC2上のUbuntu 22.04でi3wmを動かすことにしました。きっと同好の士がいると思いますので、その方法を共有いたします。

手順の概要

本手順は、以下の順序で実施していきます。3の手順までをAWS Systems Managerのセッションマネージャを使い実施します。その後、4以降はi3wmを起動し、その上のTerminal上で実施します。

  1. Ubuntu 22.04のEC2インスタンス作成。
  2. Ubuntu デスクトップの導入。 この時点で通常のUbuntuとして使用できるようになる。
  3. i3wmを導入し、ウィンドウマネージャの切り替え。
  4. ウィンドウ操作するための修飾キーの変更。
  5. i3wmの設定。
  6. Google Chromeなどのアプリケーションのインストール。

EC2インスタンスの起動

何はともあれEC2でUbuntu 22.04を動かすインスタンスを作ります。インスタンスタイプはインテルCPUを選びました。GravitonのArm64アーキテクチャでは、Google Chromeのバイナリが提供されていないので、オープンソースのChromiumを使うことになりますのでご注意ください。

EBSストレージはOSを動かすだけであれば、30GBもあれば十分です。

VPC、セキュリティグループなどは、EC2インスタンスへのログイン方法によって適切に選んでください。
またUbuntuのパッケージを多数取得するので、インターネットへの接続は必須です。

この記事ではAmazon Systems Manager(SSM)のセッションマネージャで初期設定を行う前提で説明しますので、SSMが使えるVPCで起動してください。IAMロールの指定を忘れずに。セキュリティグループの通信許可とキーペアは必要ありません。

AMIはUbuntu 22.04を選択しますが、SSMエージェントが入っていません。そこで、ユーザデータに以下のスクリプトを入れ、作成完了後すぐにSSMセッションマネージャでログインできるようにします。

#!/bin/bash
wget https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent

Ubuntuデスクトップとxrdpのインストール

インスタンスができあがったら、早速SSMセッションマネージャでログインします。

以下のコマンドで、Ubuntuデスクトップのパッケージ群をインストールします。同時に、RDPプロトコルでリモートデスクトップができるようにxrdpサーバもインストールします。

sudo apt update
sudo apt -y upgrade
sudo apt install -y ubuntu-desktop task-gnome-desktop xrdp
sudo systemctl enable xrdp
sudo systemctl start xrdp

ユーザの作成

次に、リモートデスクトップをするメイン利用のLinuxユーザを作成します。ここでは、 terauchiというIDを作成しています。適当に読み替えてください。

作ったユーザにスイッチユーザし、以後の作業はこのユーザで行っていきます。

sudo adduser terauchi
sudo usermod -aG sudo terauchi
sudo su - terauchi

デスクトップの日本語化

Ubuntu 22.04を日本語化するため、日本語パッケージをインストールします。そして日付表示などを日本語表記にローカライズします。

sudo apt install -y language-pack-ja-base language-pack-ja task-japanese-gnome-desktop language-pack-gnome-ja-base language-pack-gnome-ja gnome-user-docs-ja fonts-noto-cjk-extra
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
source /etc/default/locale

タイムゾーンの変更

続けて、時刻を日本時間にするためタイムゾーンを変更します。

sudo timedatectl set-timezone Asia/Tokyo
ここまで行い再起動すると、RDP接続が可能となり、標準的なUbuntuのデスクトップにログインできます。ですがそうせず、セッションマネージャのshellでこのまま続けます。 もしあなたがウィンドウマネージャ i3wm を使わず、標準のUbuntuデスクトップで生活するのであれば、ここでインストール作業は終了です。

i3wmのインストール

いよいよi3wmのパッケージをインストールします。

以下のコマンドでインストールします。

sudo apt install -y i3

ウィンドウマネージャをi3wmに切り替える

まず以下のコマンドで、Ubuntuの標準デスクトップのGNOMEが起動しないようにします。

sudo mv /etc/profile.d/gnome-session_gnomerc.sh /etc/profile.d/_gnome-session_gnomerc.sh

次に、RDP接続したログインした時に、ウィンドウマネージャとしてi3wmを起動するようにします。そのために、ホームディレクトリに .xsessionrc ファイルを作成します。

ついでに、後述する日本語入力メソッドMozcとターミナルソフトTerminatorの環境変数も設定してしまいます。

cat <<EOF > ~/.xsessionrc
export DefaultImModule=ibus
export GTK_IM_MODULE=ibus
export QT_IM_MODULE=ibus
export XMODIFIERS="@im=ibus"
export TERMINAL=terminator

exec i3
EOF
chmod 755 ~/.xsessionrc

再起動

OSを再起動します。

sudo reboot

リモートデスクトップ接続

Ubuntuが起動してきたら、いよいよリモートデスクトップで接続です。

まずは、ローカルPCのawsコマンドでSSMのポート転送を実行し、RDPが使うTCP3389ポートの道を作ります。インスタンスIDを指定してください。

aws ssm start-session --document-name AWS-StartPortForwardingSession --target <instance ID> --parameters "portNumber=3389, localPortNumber=13388"

ローカルPCで、RDPのリモートデスクトップクライアントを起動し、 localhost:13388に接続します。

RDPのログイン画面が表示されます。

RDPログイン画面

セッションは Xorg として、さきほど作成したユーザIDでログインします。

見事、真っ黒な画面が出たでしょうか。これが、i3wmの壁紙です。地味ですね。

続けて、i3wmの初期設定メニューが出ます。修飾キーとしてAltを使うかWinキーを使うかと聞いてきます。ここは、ESCキーを押して設定をキャンセルしてください。

真っ黒な壁紙だけになるはずです。少し不安になりますが、すかさずAlt+Enterを押します。すると、瞬時にTerminalが起動します。連打すると、どんどんTerminalが表示されてきます。

なお、ウィンドウを消すときは、Alt+Shift+qです。

このTerminalを使い、以後は作業をしていきます。

ホームディレクトリの各種ディレクトリ名が日本語になってしまったときに英語に戻すには、以下のコマンドを入力します。

env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update

修飾キーの変更

修飾キーを決定する

i3wmは、ウィンドウ操作をキーボードで行うため、大量のショートカットキーが必要になります。ショートカットキーは、修飾キーと一般キーの組み合わせです。

修飾キーはi3wmの標準では AltWin です。

しかし、 Alt はアプリケーションで多用しますので、ウィンドウ操作に専有されたくありません。そして Win キーは、ローカルPCがWindowsの場合に競合します。例えば、 Win+L というショートカットキーを入力すると、i3wmに届く前にローカルPC側が反応し、ローカルPCのWindowsがロックされてしまいます。

そのため、普段使わない修飾キーを割り当てておいたほうが良いでしょう。

ぼくはHHKBを使っているため、スペースキーのすぐ左にあるくせに使い道のない無変換キーを修飾キーとすることにしました。

修飾キーの設定

修飾キーを決めたら、そのキーコードもしくはエイリアス名を調べます。

xevコマンドでキーコードを調べることができます。

ぼくの場合、 xev を起動して無変換キーを押すと、以下のように出力されました。

KeyPress event, serial 34, synthetic NO, window 0x1a00001,
    root 0x50f, subw 0x0, time 155593, (-30,300), root:(934,324),
    state 0x0, keycode 131 (keysym 0xff22, Muhenkan), same_screen YES,
    XLookupString gives 0 bytes: 
    XmbLookupString gives 0 bytes: 
    XFilterEvent returns: False

この結果から、キーコードが131で Muhenkan というエイリアス名が付いていることがわかります。

i3wmでは、 mod1 から mod4を修飾キーに指定することができます。そこで、 Muhenkanmod3 とすることにします。なお、 mod1 には Altmod4 には Win に初めから定義されています。

X Windowのキーマップファイルを作成し、それを定義します。

以下のコマンドで、ユーザ個別のキーマップファイルを作成します。

xmodmap -pke > ~/.Xmodmap

今作ったキーマップファイルの末尾に以下を追記します。

cat <<EOF >> ~/.Xmodmap
clear mod3
add mod3 = Muhenkan
EOF

i3wmの設定

いよいよi3wm自体の設定に入ります。

まず、設定ファイルをホームディレクトリにコピーします。i3wmはこのファイル1つに全ての設定を記述します。

cp /etc/i3/config ~/.config/i3/config

i3wmで無変換キーを修飾キーにする

i3wmの設定ファイル( ~/.config/i3/config )を編集します。

どこでもいいですが、41行目あたりの適当なところに、先のキーマップファイルを読み込む設定と、 set コマンドで修飾キーを指定する設定を入れます。キーマップファイルのパスは適切に修正してください。

exec --no-startup-id xmodmap /home/<USERID>/.Xmodmap
set $mod Mod3

このi3wmの設定ファイルは、初期設定として修飾キーが Mod1 に指定されているので、全ての Mod1$mod に置換します。vimなら以下のコマンドでできます。

:%s/Mod1/$mod/g

アプリケーションのインストール

Mozc GUIツールのインストール

日本語入力の設定を行っています。日本語入力メソッドは、Ubuntu 22.04のデスクトップでibus-mozcがインストールされています。ただ、何故かibus-mozc serverは入っていますが、Mozcの設定を行うGUIツール群が入っていませんでしたのでインストールします。

sudo apt install -y mozc-utils-gui

Mozcを使う設定

以下をi3wmのconfigファイル(~/.config/i3/config)の末尾に追記します。ibusを使う環境変数は、前の工程で .xsessionrc ファイルに記載してあります。

exec --no-startup-id ibus-daemon --xim -d -r

ターミナルソフトTerminatorのインストール

Ubuntu 22.04のデスクトップでインストールされているGNOME Terminalでは、何故か日本語が入力できないので、代替としてTerminatorというターミナルソフトに入れ替えます。

Terminatorはインストールだけすればいいです。これを起動する環境変数は、先の工程で .xsessionrc ファイルに記載してあります。

sudo apt install -y terminator

以上で最低限の設定は完了です。

以下は、お好みで実施ください。

dmenuの代替のアプリケーションランチャ(rofi)のインストール

i3wmでの標準のランチャーはとてもシンプルなものです。好みによりますがかなり地味です。 rofiというのが使いやすそうでしたので入れ替えます。

sudo apt install -y rofi

dmenuを起動する設定から、rofiを起動するように設定を書き換えます。i3wmのconfigファイル(~/.config/i3/config)のdmenuの部分(64行目あたり)を以下のように書き換えます。

#bindsym $mod+d exec --no-startup-id dmenu_run
bindsym $mod+d exec --no-startup-id rofi -show run
bindsym $mod+b exec --no-startup-id rofi -show window

Google Chromeのインストール

ブラウザも好みがありますが、Google Chromeをインストールするのであれば以下を実施します。

cd ~/Downloads
wget <https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb>
sudo dpkg -i google-chrome-stable_current_amd64.deb

EC2のインスタンスタイプがarm64の場合、Chromeのバイナリが配布されていないので、Chromiumを入れることになります。

sudo apt install chromium-browser

Chromeを入れたら拡張機能のvimniumを入れると、ちょっとした検索もキーボードで行うことが出来るので幸せになれます。

完成

ここでもう一度、OSを再起動して完成です。

sudo reboot

起動してきてRDPログインしたら、真っ黒い壁紙だけが表示されます。そこで新たに設定した 修飾キー+Enter でターミナルが起動します。

また 修飾キー+d でプログラムランチャーが起動します。

その他のウィンドウ操作は、i3wmのユーザガイドリファレンスを見ながら、ショートカットキーを覚えていきましょう。

i3: i3 User’s Guide
i3 - Reference Card
i3 is a dynamic tiling window manager with clean, readable and documented code, featuring extended Xinerama support, usage of libxcb instead of xlib and several...

いろいろ起動すると、以下のような感じで作業できます。

初期起動プログラムとレイアウトの保存や、壁紙の設定など楽しんでください。ぼくは、ショートカットリファレンスを画像にして壁紙にしたりしています。

では、よいLinux生活を。

著者について
寺内康之

SF好きなインフラエンジニア。プログラミングをちゃんと学びたい。
AWS Solutions Architect-Professional、AWS_DevOpsEngineer-Professional、AWS Advanced Networking-Specialtyを保持。

寺内康之をフォローする
クラウドに強いによるエンジニアブログです。
SCSKは専門性と豊富な実績を活かしたクラウドサービス USiZE(ユーサイズ)を提供しています。
USiZEサービスサイトでは、お客様のDX推進をワンストップで支援するサービスの詳細や導入事例を紹介しています。
AWS
TechHarmony
タイトルとURLをコピーしました