カテゴリー: TechTools

元mac使いがUbuntuで理想の作業環境に近づけるためにやったこと

はじめに

最近は、WSL2上でIDEを立ち上げて開発しているのですが、動作が重たかったので、そもそもUbuntuを直接使ったほうが軽いのではないかと思い、Ubuntu上での開発環境構築をやってみました。結果として、まずまずの環境を手に入れることはできたのですが、理想の環境に近づけるには非常に苦労したので、この記事にまとめたいと思います。

Ubuntuのインストール

マシンにUbuntuをインストールします。参考までに、今回使用するマシンの情報を載せておきます。

  • HP Spectre x360 Convertible 14-ea0xxx
  • CPU: Intel Core i7-1165G7 @ 2.80GHz
  • RAM: 16GB

買ったもの

今回は外付けSSDにインストールするため、こちらの高速なSSDを購入しました。

このSSDの特徴は、USB 3.2 Gen2に対応していて、理論値1050MB/secでの読み書きができる点です。付属のType-CコードもしくはType-A変換アダプタを使ってPCと接続するのですが、Type-A変換アダプタを使っても十分使えました。
ちなみに上位モデルでUSB 3.2 Gen 2×2 に対応もありますが、PC側が対応していなかったため購入しませんでした。(USB 4ではUSB 3.2 Gen 2×2に対応していないので注意! 割と普及していない規格のようです)。PC側のUSBポートの仕様を確認してから購入しましょう!

また、インストールメディア用にMicro SDも購入しました。(書き込むイメージは3.2GBだったので、実際には4GBでも十分だと思います)

こちらは手元のUSB 2.0のSDカードリーダーを使って、SDカードからブートさせることができ、特に問題もありませんでした。ちなみに本体のSDカードスロットからはブートできませんでした。
SDカードではなく、USBメモリ等でも問題ありません。

インストールメディアの作成

まず、Ubuntuのインストールイメージをダウンロードします。今回はUbuntu 22.04 LTS日本語Remixを使用しました。日本語Remixでは、はじめから日本語環境が整っている他、日本語に関係するバグFIXなどが行われています。

Ubuntu Desktop 日本語Remixのダウンロード
https://www.ubuntulinux.jp/download/ja-remix

次に、SDカードにイメージを書き込みます。こちらはRufusを使用しました。

Rufus
https://rufus.ie/ja/

Rufusに先ほどダウンロードしたISOファイルを読ませて、「スタート」するだけで書き込みできます。

インストールメディアの起動

Windowsの[設定]→[回復]から再起動すると、回復メニューが立ち上がり、そこからUSBからブートすることができました。Ubuntuのイントール自体は、基本的に画面に沿って進めていけば完了となります。インストール先のディスクだけは絶対に間違えないようにしてください!

また、その他のオプションとして「グラフィックスとWi-Fiハードウェアと追加のメディアフォーマットのサードパーティ製ソフトウェアをインストールする」にチェックを入れました。私の環境ではセキュアブート用のパスワードを設定する必要がありました。
インストール完了後、MOKの登録画面が立ち上がったので、 Enroll MOKを選択して進めます。この際に、上で設定したセキュアブート用パスワードが必要になります。
詳細はこちらのサイトが参考になりました。

インストール完了後はインストールメディアを外し、外付けSSDだけでUbuntuが立ち上がります。私の環境では、SSDを挿していればUbuntu、そうでなければ内蔵のWindowsが立ち上がるようになりました。
ちなみに、タッチパネル・Webカメラ・マイク・WiFiなどは、インストール後何もしなくても使えました。

キーボード・トラックパッド周りのカスタマイズ

ここからは、Desktopの操作感をmac風にカスタムして、理想の環境を目指します。

kinto.shのインストール

kinto.shはLinuxでmac風のキーバインドを使えるようにするソフトウェアです。
まず、kinto.shをインストールする前に、ディスプレイサーバをWayland→Xorgに変更します。(kinto.shが内部的に依存しているXkeysnailがWayland未対応のため)
変更するには、Ubuntuのログイン画面の右下に表示される歯車マークからXorgを選択します。

次に、kinto.shをインストールするため、公式リポジトリをcloneして setup.pyを実行します。

git clone https://github.com/rbreaves/kinto.git
cd kinto
sudo apt update
sudo apt install python3
./setup.py

kinto.shが依存しているXkeysnailのバージョンが古いため、アップデートしておきます。

mv xkeysnail tmp_xkeysnail
git clone https://github.com/mooz/xkeysnail.git
rm tmp_xkeysnail

kinto.shをRestartして、表示されるXkeysnailのバージョンが最新になっていることを確認してください。
ちなみに、kinto.shを使っていると、ログイン画面でキーボードが反応しなくなることがあります。その場合は、スクリーンキーボードを使ってください。

JISキーボード対応

タブ移動のショートカットキーがJISキーボードでうまく動きませんでした。JISキーボードを使っていてもUS配列で認識するようで、 「{」は「}」、「}」は「\」と認識されます。そのため、config.pyを次のように修正しました。
(config.pyは、kinto.shの[Edit]->[Kinto Config (shortcuts)]で開けます)

K("RC-Shift-Right_Brace"): K("C-Shift-Tab"), # Go to prior tab
K("RC-Shift-Backslash"): K("C-Tab"), # Go to next tab

この設定はアプリケーションごとに複数あるので、すべて探して同じように設定します。

変換・無変換キーでIMEを有効/無効を切り替える

変換キーで有効、無変換キーで無効に設定します。

  1. mozc プロパティを開く
  2. [キー設定の選択]の編集を開く
  3. 入力キーが「henkan」のコマンドを「IME有効化」に変更する。(複数行あるので全て変更する)
  4. 入力キーが「muhenkan」のコマンドを「IME無効化」に変更する。(複数行あるので全て変更する)

CapsLockをCtrlにする

MacのJISキーボードでは、WindowsのCapsLockキーの位置に、controlキーがあります。この操作感を再現するために設定します。この設定は何故かkinto.shではうまく設定できなかったので、Gnome Tweaksを使って設定します。
まず、Gnome Tweaksをインストールします。

$ sudo apt install gnome-tweaks

インストールできたら、gnome-tweaksを起動します。

$ gnome-tweaks

[キーボードとマウス]->[追加のレイアウトオプション]を開き、次の項目にチェックを入れます。

  • Caps Lock behavior
    • Caps Lockを無効にする
  • Ctrl position
    • Caps LockをCtrlとして扱う

また、mozcキー設定で、 「eisu」となっている行を全て削除してください。(変換・無変換キーの設定と同じやり方です。)

バックスラッシュでアンダースコアを入力する

LinuxでJISキーボードを使うと、アンダースコアを入力するためにシフトキーを押す必要がありますが、Macでは不要です。こちらもkinto.shでは何故かうまく設定できなかったので、Xmodmapで設定します。
~/.Xmodmapファイルを作成し、以下の内容にします。

keycode  97 = underscore backslash underscore backslash

以下のコマンドを実行すると、反映されます。

xmodmap ~/.Xmodmap

この状態でも良いですが、この変更は一時的なもので、起動時やサスペンドから復帰したときに毎回実行する必要があります。これを解消するにはこちらの記事を参考に、起動時・サスペンスから復帰したときに上記コマンドを実行させます。

 

Waylandでは使えていたトラックパッドジェスチャーをXorgでも使う

ディスプレイサーバをXorgに変更すると、3本指ジェスチャーなどが効かなくなってしまいます。これをXorgでも使えるようにします。

まず、gnome-shell-extension-managerをインストールします。

sudo apt install gnome-shell-extension-manager

アプリケーション一覧に「Extension Manager」が追加されるため、開きます。

次に、Gesture Improvementsをインストールするため、[探す]タブで検索し、インストールします。
インストールが完了すると、[追加済]タブに表示されるため、有効化します。これだけで3本指ジェスチャーがXorgでも使えるようになります。

他にジェスチャーを追加するには、Gesture Improvementsの設定を開きます。私の場合、Chromeの戻る/進むをトラックパッドでやりたかったので、次のように設定しました。

  • Gesturesタブ
    • 4-finger gestures for workspace switchingをオン
      (デスクトップの切り替えが4本指になります)
  • App Gesturesタブ
    • Enable application specific gesturesをオン
    • [+] からGoogle Chromeを追加
      (ブラウザの戻る/進むが3本指で出来るようになります)

HHKBのFWアップデート

私はHHKB Professional HYBRID Type-S(日本語配列)を使っているのですが、初期FWの場合、Ubuntuで変換・無変換・¥が反応しないというバグがあるため、アップデートが必要でした。
(PFUからはAndroidで発生するバグと公表されていますが、Ubuntuでも発生しました。)

こちらからキーマップ変更ツールと最新FWをダウンロードして、アップデートを行いました。ちなみに、この作業にはWindowsかmacOSが必要です。

開発環境のセットアップ

ここからは開発環境を構築します。

docker

基本的には、以下リンクの手順に従ってインストールすれば問題ありません。docker desktopがLinuxにも提供されていますが、私の場合ホットリロードが効かないという謎現象が起きたので、以下リンクの通り従来どおりのインストール方法がオススメです。

Docker Engine インストール(Ubuntu 向け)
https://matsuand.github.io/docs.docker.jp.onthefly/engine/install/ubuntu/

また、sudoなしにdockerコマンドを使いたかったため、こちらの設定も行いました。
続けて、docker composeもこちらを参考にインストールします。

おまけ(docker desktopのアンインストール)

私は間違ってdocker desktopをインストールしてしまったため、docker engineをインストールする前にアンインストールする必要がありました。こちらを参考にしてアンインストールしたあと、docker contextの修正が必要だったので、その方法を載せておきます。

↓これの原因は、
$ docker ps
Cannot connect to the Docker daemon at unix:///home/kaizaki/.docker/desktop/docker.sock. Is the docker daemon running?

contextがdocker-desktopのままになっていたから
$ docker info
Client:
 Context:    desktop-linux
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  compose: Docker Compose (Docker Inc., v2.4.1)
  scan: Docker Scan (Docker Inc., v0.17.0)


ちなみに、sudoで実行するとこう
$ sudo docker info
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
  compose: Docker Compose (Docker Inc., v2.6.0)
  scan: Docker Scan (Docker Inc., v0.17.0)

# なので、defaultに切り替える
$ docker context ls
NAME              DESCRIPTION                               DOCKER ENDPOINT                                    KUBERNETES ENDPOINT   ORCHESTRATOR
default           Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                              swarm
desktop-linux *                                             unix:///home/kaizaki/.docker/desktop/docker.sock   
$ docker context use default
default
Current context is now "default"
$ docker ps   # 使えるようになった!
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

IDE

VSCodeやJetBrainsのIDEは、Ubuntu Softwareからインストールできます。アプリケーション一覧にも表示されて便利なのでオススメです。

JetBrainsのキーマップ

ある程度kinto.sh側でJetBrainsのキーマップが定義されているので、JetBrains側のキーマップ設定はGNOMEのままで良いのですが、一部対応できていないものもあるので、その点のみ設定します。(タブ移動、戻る/進む、Optimize Importsなど)
以下に設定したキーマップのXMLファイルを載せておきます。

<keymap version="1" name="GNOME copy" parent="Default for GNOME">
  <action id="Back">
    <keyboard-shortcut first-keystroke="shift alt left" />
    <mouse-shortcut keystroke="button4" />
    <keyboard-shortcut first-keystroke="ctrl open_bracket" />
  </action>
  <action id="EditorCodeBlockEnd" />
  <action id="EditorCodeBlockStart" />
  <action id="EditorMoveToPageBottom" />
  <action id="EditorMoveToPageTop" />
  <action id="Forward">
    <keyboard-shortcut first-keystroke="shift alt right" />
    <mouse-shortcut keystroke="button5" />
    <keyboard-shortcut first-keystroke="ctrl close_bracket" />
  </action>
  <action id="NextTab">
    <keyboard-shortcut first-keystroke="alt right" />
    <keyboard-shortcut first-keystroke="ctrl page_down" />
  </action>
  <action id="OptimizeImports">
    <keyboard-shortcut first-keystroke="ctrl alt o" />
    <keyboard-shortcut first-keystroke="shift ctrl alt o" />
  </action>
  <action id="PreviousTab">
    <keyboard-shortcut first-keystroke="alt left" />
    <keyboard-shortcut first-keystroke="ctrl page_up" />
  </action>
</keymap>

 

さいごに

とても苦労して設定したのですが、macを買えば設定せずともすぐに使い始められるので、macが早く欲しいなと思いました。

おすすめ書籍

カイザー

シェア
執筆者:
カイザー
タグ: UbuntuGNOME

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

3週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

1か月 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前