2014年12月08日

MacBook Pro Retina モデルで Ubuntu(MATE)を楽しむ方法

ハードウェアという視点で考えたとき、機能、パフォーマンス、そして美しさを兼ね備えたラップトップPCと言えば何でしょうか? 僕は MacBook Pro Retina モデルがそれだと考えています。 そして最も自由、パワフル、刺激的な OS と言えば Linux であるとも同時に考えています。 この2つを組み合わせたら最高の経験が出来そう。 そこで多少の苦難は覚悟の上、以前から興味を頂いていた MacBook Pro Retina 15 インチ・モデル (MGXA2JA)の Ubuntu 14.04 MATE 化にチャレンジしてみますよ!

Ubuntu MATE

Ubuntu MATE 14.04 を MacBook Pro へインストール


まずはインストール・メディアの作成から。 dd コマンドで ISO ファイル(mac 用に最低限のチューニングが施された専用イメージを利用)をフォーマット済み USB スティックへ書き込み、インストール・メディアを作成します(of で指定するディスク・デバイスは $ sudo fdisk -l | grep Disk で確認)。

$ sudo dd if=ubuntu-mate-14.04.1-final-desktop-amd64+mac.iso of=/dev/sdx bs=1M


これを MacBook の USB ポートへ挿入し、option キーを押しながら電源をオンにします。

boot installer


後は一般的なインストール手順と同じ。 ちなみに僕は Mac OS 自体消しちゃいますよ(いざという時には command + R キーを押しながら電源オンでインターネット復元機能が利用可能)。

※この時点では無線LANアダプタは認識されません。インストール中にアップデートも行うなら有線LANアダプタ、LANケーブルを挿入しておきましょう。

さて、インストールが終わったら何はともあれ ssh で接続出来るようにします。

$ sudo apt-get install openssh-server


これで準備の整っていないデスクトップ環境を使わずに済みますからね。

MATE には Japanese Team が作成した日本語パッケージは含まれていません。 次の手順でパッケージの更新と完全な日本語化を行います。

$ wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | sudo apt-key add -
$ wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add -
$ sudo wget https://www.ubuntulinux.jp/sources.list.d/utopic.list -O /etc/apt/sources.list.d/ubuntu-ja.list
$ sudo apt-get update
$ sudo apt-get dist-upgrade (or update)
$ sudo apt-get install ubuntu-defaults-ja


MacBook で利用している Broadcom ワイヤレス・デバイス用のドライバもインストールしておきましょう。 これで無線LANが利用出来るようになります。

$ sudo apt-get install bcmwl-kernel-source


さて、13.10 のころには SSD ロック・アップという問題 (http://gihyo.jp/admin/serial/01/ubuntu-recipe/0298?page=4) が存在したそうで、念の為 /etc/default/grub を編集・対処設定をしておきます。※ 僕自身は 14.04 で体感しておらず現在では必要の無い設定なのかもしれません。

$ sudo vi /etc/default/grub
... snip ...
#GRUB_CMDLINE_LINUX=""
# SSD LOCK-UP
GRUB_CMDLINE_LINUX="libata.force=noncq"


編集後は grub イメージを再作成しておきましょう。

$ sudo update-grub


少しデスクトップを触るとわかりますが F1 〜 F12 キーを押すと輝度、音量調整に割り当てられており純粋にファンクション・キーを使うには fn キーとの組み合わせが必要。 これでは不便なので hid-apple.conf を作成して fnmode を 2 に設定。 全く反対の動きに変えます。

$ sudo vi /etc/modprobe.d/hid-apple.conf
options hid-apple fnmode=2


編集したら update-initrafmfs しましょうね。

$ sudo update-initramfs -u


ここまでセットアップしたら一度 OS を再起動。この後にデスクトップの最適化を行います。


Ubuntu MATE デスクトップの MacBook Pro Retina 向けチューニング


逸る気持ちを抑えつつデスクトップ環境を最適化しましょう。 まずは システム > 設定 > 外観の設定 と進みフォントサイズをより大きく 14 程度に設定します。 Retina ディスプレイで標準サイズを使うと米粒みたいですからね。

ubuntu-mate-fonts


システム > 設定 > 言語サポート も開き、追加可能な言語サポートがあればインストールしておいて下さいね。

Japanese Team による日本語化を追加しておくとインプット・メソッドとして Fcitx が使えるにようになっています。 これは好みですが、かな/英数の切り替えを Mac OS ライクにするなら システム > 設定 > Fcitx を開き、全体の設定 タブで入力メソッドのオンオフを Esc キーで空に、拡張オプションで 入力メソッドをオンに を英数キー(Hangul)、入力メソッドをオフに を かなキー(Hangulhanja)に変更しておきます。

Screenshot-入力メソッドの設定-2


文字入力関係でもう一つ、F10 キーによる半角英数変換を使う人は $ dconf-editor を使って org.mate.interface スキーマの menubar-accel 値を空文字('')にしましょう(デフォルトではメニューへのアクセスに利用)。

ubuntu-mate-change-f10-shortcut


コマンドラインから設定するならこう。 

$ gsettings set org.mate.interface menubar-accel ''


ふう、広大なデスクトップを手に入れましたが Firefox でブラウジングをするには文字が小さすぎますね・・・。

ubuntu-mate-desktop


Default Full Zoom Level を拡張機能に追加、設定ページで標準のズームレベルを 150 〜 170% 程度に設定しておきましょう。 これで大分見やすくなりました。

defaul-full-zoom-level-after


最後に端末(MATE-Terminal)の透過設定。 僕が利用したインストール・イメージでは端末設定で透過にしてもデスクトップが背景として透けるだけ・・・。

ubuntu-mate-terminal1


これは F10 キーと同様、org.mate.Marco.general スキーマに含まれる compositing-manager の値を true に変更すればおk。

$ gsettings set org.mate.Marco.general compositing-manager true


ほらね(変わらない場合は一度ログアウトしてみましょう)。

ubuntu-mate-terminal2


後はお好みの環境に。 僕は cairo-dock を組み合わせてこんなデスクトップになりました

ubuntu mate desktop


鬼門! MacBook トラックパッドの最適化


これが良ければユーザ・エクスペリエンスは大概満足、不満ならば全部がダメと言っても過言では無いトラックパッド設定。 鬼門であることは重々承知の助でしたが、今も現在進行形の難しさ・・・。

まず、デスクトップから設定出来るパラーメーターだけでは絶対に満足は出来ないので専用 X 設定ファイルを作ります。

# 個別設定の保存ディレクトリを作成
$ sudo mkdir -m 755 /etc/X11/xorg.conf.d
# デフォルトの設定をコピー
$ sudo cp /usr/share/X11/xorg.conf.d/50-synaptics.conf /etc/X11/xorg.conf.d/
$ sudo chmod 644 /etc/X11/xorg.conf.d/50-synaptics.conf
# エディタで編集
$ sudo vi /etc/X11/xorg.conf.d/50-synaptics.conf


この中を見ると先頭に touchpad を含んだ InputClass セクションがあるはずです。

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"
EndSection


このセクションをこんなふうに変更します。

Section "InputClass"
        Identifier "touchpad catchall"
        Driver "synaptics"
        MatchIsTouchpad "on"
        MatchDevicePath "/dev/input/event*"

        # http://manpages.ubuntu.com/manpages/lucid/man4/synaptics.4.html
        Option "PalmDetect"            "0"
        # Minimum finger width at which touch is considered a palm.
        Option "PalmMinWidth"          "10"
        # Minimum finger pressure at which touch is considered a palm.
        Option "PalmMinZ"              "200"

        # disable three-finger tap
        # synclient ClickFinger3=0; synclient TapButton3=0
        # Option "ClickFinger3"         "0"
        # Option "TapButton3"          "0"

        # Natural scroll
        Option "VertScrollDelta"       "-100"
        Option "HorizScrollDelta"      "-100"
        Option "HorizTwoFingerScroll"  "1"


        # When finger pressure drops below this value, the  driver counts it as a release.
        Option "FingerLow"             "1"
        # When finger pressure goes above this value, the driver counts it as a touch.
        Option "FingerHigh"            "75"
        # When finger pressure goes above this value, the driver counts it as  a  press.
        Option "FingerPress"           "255"

        # Speed factor
        Option "MinSpeed"              "1.0"
        Option "MaxSpeed"              "1.2"
        # Acceleration factor for normal pointer movements.
        Option "AccelFactor"           "0.015"

        #  Maximun time (in millisseonds) for detecting a tap.
        #  A tap event happens when the finger is touched and released in a time
        #  interval shorter than MaxTapTime. 0 means disable.
        Option  "MaxTapTime"           "220"

        # Maximun movement of the finger for detecting
        # the touch and release coordinates are less than MaxTapMove units apart.
        Option  "MaxTapMove"           "150"

        # Maximun time (in millisseonds) for detecting a double tap.
        # The MaxDoubleTapTime parameter has the same function as the MaxTapTime
        # parameter, but for the second, third, etc tap in a tap sequence. If
        # you can’t perform double clicks fast enough (for example, xmms depends
        # on fast double clicks), try reducing this parameter. If you can’t get
        # word selection to work in xterm (ie button down, button up, button
        # down, move mouse), try increasing this parameter.
        Option  "MaxDoubleTapTime"     "180"

        # Some touchpads report a two-finger touch as wide finger.
        # This sets the finger width threshold to emulate a two finger press.
        # This feature works best with (PalmDetect) off.
        #Option "EmulateTwoFingerMinW" "3"

        # The duration of the mouse click generated by tapping.
        # The  ClickTime parameter controls the delay between the button down and
        # button up X events generated in response to a tap event.   A  too  long
        # value  can  cause undesirable autorepeat in scroll bars and a too small
        # value means that visual feedback  from  the  gui  application  you  are
        # interacting  with is harder to see. For this parameter to have any
        # effect, "FastTaps" has to be disabled.
        Option "ClickTime" "50"


        # The minimum horizontal & vertical H/W distance required to generate motion events
        # if your cursor move when click trackpad, try increasing this parameter
        #Option "HorizHysteresis"       "180"
        #Option "VertHysteresis"        "180"
        Option "HorizHysteresis"       "50"
        Option "VertHysteresis"        "50"

        # Switch on/off the tap-and-drag gesture.
        # Option "TapAndDragGesture" "off"

        # Area
        Option "AreaTopEdge"           "-135" # y-min: -150
#        Option "AreaBottomEdge"        "6720" # y-max: 6730
        Option "AreaLeftEdge"          "-4720" # x-min: 4750
        Option "AreaRightEdge"         "4300" # x-max: 5280

        # Switch on/off shared  memory for run-time configuration.
        Option "SHMConfig"             "on"
EndSection


ポイントだけ説明しましょうか。 まず一般的には有効にすることが多い手のひら検知(PalmDetect)は無効(0)にしています。 理由は手のひら検知によってクリック+ドラッグ操作(クリックして選択した状態でのドラッグによる移動操作)中に選択状態が解除されてしまうことがあるから。 そんなこたぁ無い、という人は有効(1)にしてください。

        # http://manpages.ubuntu.com/manpages/lucid/man4/synaptics.4.html
        Option "PalmDetect"            "0"
        # Minimum finger width at which touch is considered a palm.
        Option "PalmMinWidth"          "10"
        # Minimum finger pressure at which touch is considered a palm.
        Option "PalmMinZ"              "200"


手のひら検知を無効にすると何か大きな面積を持つものが触れただけ(つまり意図しない手のひらの接触)でもポインタが動いていしまいます。 このデメリットは下側にある Area 設定で回避しています。

        # Area
        Option "AreaTopEdge"           "-135" # y-min: -150
#        Option "AreaBottomEdge"        "6720" # y-max: 6730
        Option "AreaLeftEdge"          "-4720" # x-min: 4750
        Option "AreaRightEdge"         "4300" # x-max: 5280


MacBook Pro Retina のトラックパッドは x 軸(横軸)が -4750 〜 5280、y 軸(縦軸)が -150 〜 6730 のスケールで認識・管理されています。

$ grep range /var/log/Xorg.0.log
[ 15364.725] (--) synaptics: bcm5974: x-axis range -4750 - 5280 (res 0)
[ 15364.725] (--) synaptics: bcm5974: y-axis range -150 - 6730 (res 0)
[ 15364.725] (--) synaptics: bcm5974: pressure range 0 - 256
[ 15364.725] (--) synaptics: bcm5974: finger width range 0 - 16


この値を参考に手のひらが触れることが多い上側(AreaTopEdge)、右側(AreaRightEdge)の最大値を削り、無効地帯を作るのです。 ちなみに僕の AreaRightEdge 設定で右端が指一本分ほど無効になります。

macbook pro retina touchpad xorg area

※AreaBottomEdge で下側エリアを無効にするとクリック+ドラッグ操作で PalmDetect 有効時と似た現象が発生するケースがあり注意が必要。

FingerLow, FingerHigh は指が離れた、タップされたと判定する圧力のしきい値。 タップ(1本指の接触)によるクリック検知が敏感過ぎると感じたら FingerHigh を大きめにします(FingerPress はハードウェア・クリック)。

        # When finger pressure drops below this value, the  driver counts it as a release.
        Option "FingerLow"             "1"
        # When finger pressure goes above this value, the driver counts it as a touch.
        Option "FingerHigh"            "75"
        # When finger pressure goes above this value, the driver counts it as  a  press.
        Option "FingerPress"           "255"

MinSpeed、MaxSpeed はポインタの移動速度。 これに加速度 AccelFactor (大きいほど加速度が高くなる)を組み合わせたのがポインタ移動速度のエクスペリエンスになります。

ダブル・タップ(連続タップによるダブル・クリック操作)の反応が悪いな、と感じたら MaxDoubleTapTime の値を小さくしましょう(逆に敏感だと感じたら大きく)。

        # Maximun time (in millisseonds) for detecting a double tap.
        # The MaxDoubleTapTime parameter has the same function as the MaxTapTime
        # parameter, but for the second, third, etc tap in a tap sequence. If
        # you can’t perform double clicks fast enough (for example, xmms depends
        # on fast double clicks), try reducing this parameter. If you can’t get
        # word selection to work in xterm (ie button down, button up, button
        # down, move mouse), try increasing this parameter.
        Option  "MaxDoubleTapTime"     "180";


HorizHysteresis、VertHysteresis も大事。 感度が良すぎるとハードウエア・クリック(カチッと音がするまでトラックパッドを押してクリック操作を行う)際に移動が生まれたと判断されてポインタが僅かに動き、意図したオブジェクトをクリック又は選択出来ないことがあります。 この設定があれば指定した値(範囲)以上の指先移動が無い限り無視されます。

        # The minimum horizontal & vertical H/W distance required to generate motion events
        # if your cursor move when click trackpad, try increasing this parameter
        #Option "HorizHysteresis"       "180"
        #Option "VertHysteresis"        "180"
        Option "HorizHysteresis"       "50"
        Option "VertHysteresis"        "50"

ただし、この設定は諸刃の剣。 指の動きがデスクトップ上のカーソル動作に反映されるまでのギャップにもなります。 ハードウェア・クリック時のノイズ的カーソル移動防止ならば 180 程度まで大きく、カーソル移動の感度・繊細さ重視であれば 50 前後ってところでしょうか。

二本指タップ+スクロール操作を行うとエリア選択(ダブル・タップによる選択+ドラッグ)と誤検知されてしまいとても気になる、というなら思い切って TapAndDragGesture を off (無効化)にしちゃいましょう。  無効にしてもハードウェア・クリック+ドラッグで対応出来ますしね。

        # Switch on/off the tap-and-drag gesture.
        # Option "TapAndDragGesture" "off"


ClickTime は例えば二本指タップしてから右クリック・メニューが表示されるまでの遅延時間、つまりトラックパッド上の操作がデスクトップ上のオブジェクト動作に反映されるまでのインターバルです。 デフォルトで 100 ミリ秒ですが体感速度を上げるならば小さくします。 ただし、この値も過敏な反応に繋がる値なので変更しない or 200 ミリ秒程度まで大きくするという手もあります。

最後に二本指タップが誤検知されるケースがある三本指タップの無効化。 synaptics の man ページには ClickFinger3、TapButton3 パラメーターを 0 に設定して無効化とありますが何故か無視され、端末から synclient を使って設定するとOK(無効)というカオス。

$ synclient ClickFinger3=0; synclient TapButton3=0


追求は諦め synclient コマンドをデスクトップ開始時に自動起動(システム > 設定 > 自動起動アプリ)するよう設定しておきます。

自動起動するアプリの設定


シェル・スクリプトを用意して、これ(/usr/local/bin/my-synclient.sh)を自動起動登録しておくと上手く動きますよ。

$ sudo vi /usr/local/bin/my-synclient.sh

#!/bin/sh

# disable three-finger click
synclient ClickFinger3=0
synclient TapButton3=0

$ sudo chmod 775 /usr/local/bin/my-synclient.sh

これぐらいで僕は大概満足。

タイピング中にトラックパッドを無効にするなら syndaemon を使い synclient 同様に自動起動しておきましょう。

この例ではタイピングを検知すると 0.5 秒だけタッチパッドを無効にしています。 

$ syndaemon -i .5 -K -t -R -d

Options:
    -K  Like -k but also ignore Modifier+Key combos.
    -t  Only disable tapping and scrolling, not mouse movements, in response to keyboard activity.
    -R  Use the XRecord extension for detecting keyboard activity instead of polling the keyboard state.
    -d  Start as a daemon, ie in the background.


MacBook Pro + Ubuntu (MATE) で不満なところは?


今一番気になるのは MacBook Pro をコーヒーショップで使うと恥ずかしい・・・ではなくて、マシンが grub (ブートローダー)を見つけるのに30 秒ほど時間を要し、ブラックスクリーン状態が続くところ(Mac 組み込みの専用チップが原因?)。 OS の起動自体は 15 秒ほどで終わるんですけど grub 自体を見つけて貰うまでに時間が掛かるのでパワーオンからデスクトップ表示まで 1 分弱時間が掛かっちゃうんですよね・・・(誰か解決方法を知っていたら教えて欲ちぃ)。

内蔵カメラだけはどうしても認識されませんが、僕にとってカメラほど使わないハードウェアは無いので問題は無し(無線LANアダプタ、Bluetooth、SDXCカードスロット、スピーカーは問題無く使えてますよ!)。

え、やっぱり Linux は不便だって? そうですよね。 でも、どんなハードウェアでも動き、それらの仕組みを学び・変更する機会・選択肢(自由)が与えられるということは不便以上に大事・パワフルなことである、とも思えませんか?

それでは、また今度。
MGXA2J/A MacBook Pro Retinaディスプレイ 2200/15.4
null
売り上げランキング: 8,864

Ubuntuではじめる! Linux入門キット 14.04対応
水野 源
秀和システム
売り上げランキング: 283,828

Posted by netbuffalo at 21:00│Comments(0)TrackBack(0)Linux | Apple


この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/netbuffalo/4924796

コメントする

名前
URL
 
  絵文字