Macbook AirにUbuntu18.04LTSをインストールする

使っていたiPhone6をiOS11にアップグレードしたところ、巷でも言われている通り明らかに遅くなった。もちろん最新OSというのは最新端末をターゲットに開発するもので、古い機体で遅くなることは仕方ないこと。確かに新しい機体が欲しくなりましたよ。エスカレーター式にアップグレードを促して、一旦上げたら二度とダウングレードできない姿勢。OSの断片化を避けたいのもわからないでもないが、端末を使うたびにイライラさせて、高価な端末を買わせる手法は露骨に感じて気持ちが離れてしまった。

iOSアプリ開発に関しても、デベロッパープログラムに加入しないと自端末ですら、1週間ごとにアプリの再インストールいけない手間があって、何だかなぁという気分でした。(デバッグ用の証明書が1週間で有効期限が切れてしまう)自分専用のアプリですら有料ってのは。。

で結局、Android端末に乗り換えました。特別優位性もないですが、大差なしといったところ。ガチガチの制限がないので、気分的に楽になった。(搭載カメラはiPhoneのほうが良いです)

そうすると、Macbook airでMacOS使う理由もなくなってきたのと、MacOSの使いづらさからほとんど起動しなくなったのも勿体ないので、Ubuntuを入れることにした。
Air端末は2011年モデルだけど、Linuxならまだまだ現役で余裕でつかえるし、ちょうど2018年4月に最新のUbuntu18.04LTSがリリースされたので、このOSで構築したときの備忘録を残すことにしました。

Ubuntu 18.04LTSインストール

端末のSSDは256GBあるので、MacOSのパーティションを半分にした後、空いたパーティションにUbuntuをインストールすることにした。以下からISOをダウンロードして、EtcherというツールでUSBメモリに焼いてインストールする。ちなみにBootcampはWindowsを動かすものなので、Linuxを入れる場合は、パーティションを開けて手動でインストールするしかない。

Etcher
Download Ubuntu Desktop

手順などは割愛する。特に何の問題もなくインストールできるので。ちなみに日本語入力は、日本語Mozcを選択した。

ブートローダーrEFIndを導入する

MacにブートローダrEFIndを導入してみる

このままでは、インストールが完了しても、Macbook AirがUbuntuを認識しない。rEFIndというブートローダーを入れるとよいらしいので、上記サイトを参考に導入した。若干記事が古いので、最新だとどうなのかは不明だが、このブートローダーでうまく起動するようになった。

Ubuntu18.04の初期設定

Ubuntu16.04と比較すると、デスクトップ回りがより洗練されて感じ。とくに追加でドライバを入れなくても、Macbook Airのタッチパッドやキーは、問題なく動作して少し拍子抜けした。ただし、気になる点もあって、以下をカスタマイズする必要があった。

  1. タッチパッドのスクロールが、自分的に逆。

「設定―デバイス―マウスとタッチパッド」で、ナチュラルスクロールをオフに変更。

  1. ファンクションキー(F1-F12)が"fn"キー同時押しになっている。

以下のようにfnmodeを変更するファイルを作成する(デフォルトが1で、マルチメディアキーが有効になっている)

> vi /etc/modprobe.d/hid_apple.conf

options hid_apple fnmode=2
  1. ユーザーフォルダ(デスクトップ、ダウンロードetc)の名称を英語にしたい。

以下のコマンドを実行して、ダイアログ上で変更する。

> LANG=C xdg-user-dirs-gtk-update

デスクトップ等のディレクトリ名を英語にする

ここで、「Don't ask me this again」をチェックして、"Update Names"を実行する。.configフォルダ以下にuser-dirs.dirsというファイルが作成されて、以降はこのファイルの内容を元に名称が変更される。また、user-dirs.localeが残っていると、システムロケールと差異があると元の状態に戻ってしまうので、このファイルを削除しておく。

> cd ~/.config
> cat user-dirs.dirs

XDG_DESKTOP_DIR="$HOME/Desktop"
XDG_DOWNLOAD_DIR="$HOME/Downloads"
XDG_TEMPLATES_DIR="$HOME/Templates"
XDG_PUBLICSHARE_DIR="$HOME/Share"
XDG_DOCUMENTS_DIR="$HOME/Documents"
XDG_MUSIC_DIR="$HOME/Music"
XDG_PICTURES_DIR="$HOME/Pictures"
XDG_VIDEOS_DIR="$HOME/Videos"
  1. MacOSの時もそうだったが、キー配列が気に入らない。

次の項で、対策した。

Macbook AirのキーボードマップをUbuntu上で変更する

xkbでキーバインドを変更する
Ubuntu16.04 – キーボードのキー割り当て(キーバインド)をxkbで変更する

最近のUbuntuでは、xkbというツール?で変更できるらしい。
xkbcompでカレントディレクトリに現在の設定をダンプできる。

> xkbcomp $DISPLAY default.xkb

xevを実行すると、キーボードのボタンイベントをモニタすることが可能で、どのキーにキーコードが割り当てられているか確認できる。以下は、"a"ボタンを押したときのダンプ結果で、"keycode=38"だとわかる。停止するときは、コンソール画面でCtrl+Cで終了する。

> xev

KeyPress event, serial 37, synthetic NO, window 0x3800001,
    root 0x131, subw 0x0, time 22905270, (626,590), root:(707,675),
    state 0x0, keycode 38 (keysym 0x61, a), same_screen YES,
    XLookupString gives 1 bytes: (61) "a"
    XmbLookupString gives 1 bytes: (61) "a"
    XFilterEvent returns: False
    

Ubuntuのキーマップは、/usr/share/X11/kbd以下の設定ファイルで定義されている。現在の設定をベースとして、変更したい部分だけをローカルのmykbdmyswapの2つのファイルを用意して設定を追加&上書きして変更することができる。

> mkdir -p ~/.xkb/symbols/
> touch ~/.xkb/symbols/myswap
> mkdir -p ~/.xkb/keymap/
> touch ~/.xkb/keymap/mykbd

以下のキーマップを変更&割り当てた。

  • CtrlとCapsキーを入れ替える

シンボルファイルmyswapに以下を追加する。"swapkeys"という定義名で、CtrlとCapsキーを入れ替える。後述するkeymapファイルで以下をインクルードすることによって適用される。

// myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <LCTL>  { [ Caps_Lock ] };
  replace key <CAPS> { [ Control_L ] };
};
  • F11にHOMEボタンを割り当てる
  • F12にENDボタンを割り当てる

FK11FK12を追加する。Shiftキーと組み合わせたときも同様にHomeやEndを割り当てるため、カンマ区切りで指定するらしい。(Home, Home)

// myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <FK11> { [ Home, Home ] };
  replace key <FK12> { [ End, End ] };
};
  • 直接入力(英数入力)とIME(日本語入力)を英数かなに割り当てる

本来は、英数ボタンを何回押しても直接入力になって、かなボタンはその逆に常にIME入力がベストだが、どちらかのボタンを押すと、トグル切り替えになるように妥協。

Mozcのプロパティからキー設定パネルで以下のようになっていることを確認。(なってないなら、デフォルト設定をインポートする)

Screenshot-from-2018-05-02-16-52-29

Screenshot-from-2018-05-02-16-51-55

// myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <HJCV> { [ Zenkaku_Hankaku ] };
  replace key <HNGL> { [ Zenkaku_Hankaku ] };
};

以上をまとめた設定が以下になる。

// myswap
partial modifier_keys
xkb_symbols "swapkeys" {
  replace key <LCTL>  { [ Caps_Lock ] };
  replace key <CAPS> { [ Control_L ] };
  replace key <FK11> { [ Home, Home ] };
  replace key <FK12> { [ End, End ] };
  replace key <HJCV> { [ Zenkaku_Hankaku ] };
  replace key <HNGL> { [ Zenkaku_Hankaku ] };
};
//mykbd
xkb_keymap {
	xkb_keycodes  { include "evdev+aliases(qwerty)"	};
	xkb_types     { include "complete"	};
	xkb_compat    { include "complete+ledscroll(group_lock)"	};
	xkb_symbols   { include "pc+jp+us:2+inet(evdev)+group(alt_shift_toggle)+myswap(swapkeys)"	};
	xkb_geometry  { include "pc(pc105)"	};
};
  • ログイン時にキー設定を読み込む

Windowsのスタートアップフォルダのように、自動起動を設定する機能があるので、下記のように設定を読み込むシェルを作成して登録しておく。

Screenshot-from-2018-05-02-21-26-14

> touch myxkb.sh
> chmod 755 myxkb.sh
> vi myxkb.sh

#!/bin/sh
if [ -s $HOME/.xkb/keymap/mykbd ]
then
  sleep 1
  xkbcomp -I$HOME/.xkb ~/.xkb/keymap/mykbd $DISPLAY 2> /dev/null
fi

これで、ログインしたときに割り振ったキーが正常に動作すればOK。