どうも、キーボードからマウスに手を動かすのが億劫な寺内です。
Linuxではウィンドウマネージャを自由に選択することができます。ウィンドウのルック&フィールや操作体系は、PCの利用者の操作性に最も影響を与える機能であり、ユーザエクスペリエンスの重要な要素です。Windowsではマイクロソフトの押し付け一択ですが、Linuxデスクトップの場合、X Windowとウィンドウマネージャが分離しているので、数ある中から自分の好みのものを選ぶことができます。
今回、i3wmというタイル型ウィンドウマネージャを知りました。このウィンドウマネージャは、ショートカットキーを自在にカスタマイズすることができ、ほぼ全てのウィンドウ操作をキーボードで行うことが出来るというものだそうです。
キーボードショートカット好きなぼくとしては、是非試したくなり、EC2上のUbuntu 22.04でi3wmを動かすことにしました。きっと同好の士がいると思いますので、その方法を共有いたします。
手順の概要
本手順は、以下の順序で実施していきます。3の手順までをAWS Systems Managerのセッションマネージャを使い実施します。その後、4以降はi3wmを起動し、その上のTerminal上で実施します。
- Ubuntu 22.04のEC2インスタンス作成。
- Ubuntu デスクトップの導入。 この時点で通常のUbuntuとして使用できるようになる。
- i3wmを導入し、ウィンドウマネージャの切り替え。
- ウィンドウ操作するための修飾キーの変更。
- i3wmの設定。
- 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
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のログイン画面が表示されます。
セッションは 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の標準では Alt
か Win
です。
しかし、 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
を修飾キーに指定することができます。そこで、 Muhenkan
を mod3
とすることにします。なお、 mod1
には Alt
、 mod4
には 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のユーザガイドやリファレンスを見ながら、ショートカットキーを覚えていきましょう。
いろいろ起動すると、以下のような感じで作業できます。
初期起動プログラムとレイアウトの保存や、壁紙の設定など楽しんでください。ぼくは、ショートカットリファレンスを画像にして壁紙にしたりしています。
では、よいLinux生活を。