MacBook Proのキーボード周り環境整備覚え書き

MacBook Proのキーボード周りの設定がようやく固まってきました。特にUSBでWindows用キーボードつなげる際のチューニングが、以前Mac mini用にやってたはずの方法が思い出せず(Mac miniは先日の停電の煽りか、システムがクラッシュして設定がのぞけなくなった)、再度あれこれ試行錯誤するはめに陥ってました。今度はちゃんと記録に残しておこうと思います。

今回いじったのは、

の4点。使用した外付けキーボードはJIS配列のRealForce。一般的なPC用キーボードで、Ctrlが左下でShiftの上にCapsLockという配列です。

目指した状態は

  1. 「英数」キー(スペースのすぐ左)でIMEのON/OFFをトグル
  2. Commandキーを使うショートカット(全選択:A、カット:X、コピー:C、ペースト:V等)がCtrlでも使えるようにする
  3. ファンクションキーとFn+ファンクションキーの動作を入れ替える
  4. USB接続のPC用キーボードで、左Shiftの上をCtrlにする(いわゆるCtrl-CAPSスワップ)
  5. USB接続のPC用キーボードで、英数の左がCommand、そのまた左がOptionという配置にする(Macに揃える)
  6. USB接続のPC用キーボードで、英数キーを利用可能にする
  7. ターミナルではCommandキーがOptionキー(=Metaキー)として使えるようにする

という感じ。1.はかなり特殊な使い方だと思いますが、「1」の左に「全/半」がない、またはESCキーとして使いたいという人にはなかなかオススメです。スペースをはさんで反対側にある「かな」キーを使い分けるのはどうも馴染めなくて、1つのキーでトグル動作させる前提で代替キーを模索した結果ここに落ち着いてます(Macにするずっと以前からコレで統一してます)。

3は、Macのデフォルトではファンクションキーは輝度や音量の調節アサインされ、通常のF1~F12キーはFnを押しながらタイプする必要があります。ちょうどPCと逆ですね。F6~F10はATOKでも使うので、これはPCに揃えたい。

4~6はPC用のキーボードをMacで使う時のお約束ですね。USBさせば普通に使えると思われがちですが、「変換(=かな)」、「無変換=(英数)」キーが使えなかったりするし、CAPSとCtrl、Command(=Win)とOption(=Alt)の位置が逆だったり。

7.はターミナルでEmacs等を使う時、Option(meta) + Wとか入れようとしてCommand + Wしてウインドウが閉じようとしてしまうのを防ぐ為です。

これら全てを解決すれば、MacBook Pro内蔵キーボードとUSBキーボード、そしてMacとWindowsのショートカットが違和感なく統一でき、気持ち良くスイッチできるというものです。

■解決編

以下、いくつかの解決方法があるものもありますが、なるべくOS標準機能を使い、サードパーティツールで書き換える部分を最小限にする方針でまとめてみました。

1. 「英数」キー(スペースのすぐ左)でIMEのON/OFFをトグル

KeyRemap4MacBookの「For Japanese」セクションに「Change EISUU Key」という項目があり、「Use EISUU as KANA/EISUU (toggle)」をチェックします(設定が用意されてるということは意外と特殊な使い方でもないのかな?)。

またIMEにATOKをインストールしている場合、「キー・ローマ字 カスタマイザ」->「キー設定」を開き、「英数」キーへの割り当てをすべて無しに、「かな」キーへの割り当てを全て「ひらがな入力文字種(あ)」にします(後者は違うのを設定した気がしますがいつのまにかこうなってました。他のON/OFF系の機能でもいいかも知れません)。

更に、「システム環境設定」→「言語とテキスト」→「入力ソース」を開き、「ATOK」の下の使わない入力モードのチェックをオフにする必要もあるかも知れません(オフにしたからといって変換候補に出なくなる訳ではありません)。

2. Commandキーを使うショートカット(全選択:A、カット:X、コピー:C、ペースト:V等)がCtrlでも使えるようにする

これもKeyRemap4MacBookで設定できます。上記同様「For Japanese」セクションの下に「Use PC style ~」というのがあるので、必要なものをチェックします。

3. ファンクションキーとFn+ファンクションキーの動作を入れ替える

これは簡単です。「システム環境設定」→「キーボード」を開き、「F1、F2などのすべてのキーを標準のファンクションキーとして使用」をチェックします。輝度や音量などアイコンで印刷されている機能を使う時にFnを押す形になります。

またSpotlight、Dashboard、Spaces、Expose等についてはそれぞれ「システム環境設定」の各画面でアサインが割り当てられるので、こちらだけはFnを押さずにダイレクトに機能させたければ別途設定可能です。

4. USB接続のPC用キーボードで、左Shiftの上をCtrlにする(いわゆるCtrl-CAPSスワップ)
5. USB接続のPC用キーボードで、英数の左がCommand、そのまた左がOptionという配置にする(Macに揃える)

    これら2つはKeyRemap4MacBookに設定があるのですが、ここで入れ替え設定しまうと内蔵キーボードと外付けキーボード両方に適用されてしまい、内蔵キーボードで問題がおきます。

    で、実はこれはOS標準の機能でキーボード毎に設定ができます。「システム環境設定」→「キーボード」を開き「装飾キー…」ボタンを押すと設定画面が現れます。画面上の「キーボードを選択」プルダウンメニューから対象キーボードを選択して設定すればOKです。ちょっと深いところにあるので見落としがちですが、Appleもこんな設定用意しといてくれるなんてニクいですね。

    6. USB接続のPC用キーボードで、英数キーを利用可能にする

    RealForceをMacにUSB接続した場合、無変換キーを押すとなぜか「A」が入力されてしまいます。かな入力モードで英数入力しようとおすと「あ」とか出ちゃう訳ですね。でこれもKeyRemap4MacBookの作者さんがパッチを作ってくれてまして、冒頭にリンク貼ったPCKeyboardHackがそれです。こちらをインストールし、「Enable XFER Key」をチェックし、Keycodeに「102」を指定すればOKです。ちなみに「かな」キーが「KANA Key」、「変換」キーが「XFER Key」なのでこちらも利用したければ設定して下さい。

    7. ターミナルではCommandキーがOptionキー(=Metaキー)として使えるようにする

    これもKeyRemap4MacBookで設定できます。「For Application」セクション→「Enable at only Terminal」にある「Change Command_L to Option_L」をチェックします。「(Pass-Through Tab and Backquote)」とついてるのとついてないのがありますが、ついてる方を選んでおくと、Command + Tabでアプリ切換したい時だけはCommandキーとして機能してくれます。ホント至れり尽くせりですね!

     

    なお、KeyRemap4MacBook、PCKeyboardHackともにインストールして再起動すると、「システム環境設定」画面の一番下に現れます。通常のアプリケーションとは勝手が違うのでご注意下さい。どちらもフリーですが、作者さんのサイトからPayPalを使って寄付できるようになってます。この2つのツールがなければこうもスンナリWin<->Macのスイッチができた気がしないので、感謝を込めて少額ながら贈らせていただきました。本当にどうもありがとうございます。>作者さん

    MacBook Pro Early 2011 15’のメモリ増設

    MacBook Proのメモリを純正の4GBから8GBに増設しました。Apple StoreのCTOで追加すると18,480円。タイプはDDR3-1333(PC-10600)の204pinのSO-DIMM。スロットは2つで2GBが2枚刺さっているので全交換になります。Amazonで見つけた最安はリンク下のCFDブランドのもので6,980円でした(8GBで7,000円とかスゴい時代ですな)。レビューをみると各種Macでの動作実績もあるみたいだしこれでいいやと注文したんですが、なかなか発送されないので、結局キャンセルしてヨドバシで上のADATAのものを買って来ました。ADATA、SDカード等のフラッシュメモリではあまり良いイメージがないですが、最近のDRAM、特にDDR3世代では意外と好評かみたいだしとか。ちなみにチップはhynix。MBP純正はSAMSUNGらしいとどこかで読んだんですが、実際にあけてみるとhynixでした(写真は換装前の純正品)。

    SDIM0033

    この写真、MBPを裏返して薄い底板外してすぐの状態ですが、こんなにすぐメインボードが露出するのっと国産ノートじゃ珍しい気がします。薄いとは言え金属板なのでその直下にこんな脆そうなパーツあってもキニシナイって感じなんですかね。作業中この上に重たいパーツ落としたらマザー逝くよなとかドキドキでした。

    で、あっさり起動して8GBと認識しました。問題なく動作している気がします。一応memtestのGUIフロントエンドらしいRemberをしばらく走らせてみましたが、数分で飽きて止めましたw。なにか不具合が出たらあらためて回してみます。

    2012.09.15追記: Mountain Lionにした頃からビープ三回フリーズが毎日のように発生しはじめ、結局別のメモリに交換しました

    ■メモリ増設にあたって心配したこと

    今回メモリを増設するかどうか結構迷いました。SSDが速いせいかあまり体感速度に不満はなかったので、むしろメモリが増えることでディープスリープ(ハイバネーション)からの復帰が遅くなったりしないかなとか。それがないなら値段的にも安いものだし気分も良いので増設しようと。

    気になったのはMacBook Airで1時間(正確には70分らしい)電源をつながない状態でスリープがつなぐと、Windowsでいう休止状態のような状態になり、そこからの復帰がややもたつくこと(もたつく時間より、その間アクセスランプなどのフィードバックが一切ないMacなので心臓に悪い、という方がイヤ)。MacBook Proでもそんなことになったらちょっとな、とか思ったんですが、知人に聞いたりしても復帰は一瞬じゃね?と話が合わない。よく調べてみると、1時間強でディープスリープに移行するという動作がデフォルトなのは30日スリープを謳うMacBook Air 2010のみみたいですね。他の機種でも設定をいじればそうできるし、MBAでそうならないようにもできるみたいです。つまりデフォルトではメモリ内容をSSD/HDDに書き出しつつ通電スリープで瞬時復帰(Windowsでいうとハイブリッドサスペンド、ただし時間経過による休止状態移行はオフ、って感じ)。Macではこれをセーフスリープと呼ぶみたいです。HDDだとパタンと閉じてしまらくは書き込み時間があるのですぐにカバンにしまって移動、というのは心臓に悪いですが、SSDなら問題なし。MBAに比べるとスリープで長時間持ち歩くということも少ないと思うので、これは正しい選択だし、当面このまま運用してみようと思いました。

    サーバーと一緒にUPS非対応なTeraStationをシャットダウンする

    ウチのやや古いTeraStation(HS-DHTGL/R5)はUPSに対応してませんが、どこかで先人がハックしていないかとググったところ、「Tera Stationをremoteからshutdownする方法」というブログ記事を発見しました。なるほど、wgetコマンドを使ってWeb管理インターフェイスのシャットダウンを実行する訳ですね。早速試してみたところ、ウチのDHTGLちゃんWeb管理インターフェイスの仕様が変わったらしく上記記事のスクリプトは使用できませんでした。そこで基本アプローチを拝借しつつ、DHTGL用に改変を試みました(以下、ファームウェアは1.15での情報です)。

    ■解析編

    まずそもそも元スクリプトはwgetのBASIC認証用のパラメーターで認証を突破してますが、DHTGLはBACIS認証ですらない。結構苦労しましたが、まとめると、

    • /cgi-bin/top.cgiにPOSTでパラメーターを送ることで動作している(元スクリプトではts.cgi)
    • gPage、gMode、gType、gKeyといったhidden値で実際の表示ページや動作を規定している
    • ログインページから送られるhidden値はgPage=top、gMode=authでID、PWはそれぞれtxtAuthLoginUser、txtAuthLoginPasswordというフィールド名で送られる
    • 一旦認証が通ると、gSSSとgRRRというhidden値が生成されセッション管理に用いられる
    • シャットダウンの時は認証情報の代わりにgSSS、gRRRをつけ、gPage=maintenance、gMode=shutdown、gType=shutdownを送る

    といった感じ。gSSSはセッション毎、gRRRはページ遷移毎にユニークに生成されてるっぽいです。gSSSは「07ae46da8acb13a7ba9c99acf3ef66f9」のような16進数値、gRRRは「463273411635750418」のような10進数値です。

    つまり認証(gSSS、gRRR取得)とシャットダウン実行でwgetを2回実行する必要があるみたいでした。

    ■実装編

    シェルスクリプトやsedに使い慣れてないのであまり綺麗な実装ではないですが晒してみます。うまいことすればTMPファイルを減らしたり無くしたりできそうなもんですが、よくわからなくて2つほど生成してます。もっとエレガントな方法があれば是非教えて下さい。

    #!/bin/sh
    #
    # rc script to shutdown Tera Station by knakao
    #

    #REQUIRE LOGIN

    WGET=/usr/bin/wget
    SERVER=192.168.0.***
    USER=admin
    ADMIN_PASSWD=**********
    URL="http://$SERVER/cgi-bin/top.cgi"
    TMPFILE="/tmp/ts_shutdown.tmp"
    TMPFILE2="/tmp/ts_shutdown2.tmp"

    ts_down()
    {
        # Loging in as administrator
        OPT="–post-data=txtAuthLoginUser=$USER&txtAuthLoginPassword=$ADMIN_PASSWD&gPage=top&gMode=auth -O $TMPFILE -q -T 5"
        $WGET $OPT $URL

        cat $TMPFILE | grep gSSS > $TMPFILE2

        gSSS=sed 's/.*name="gSSS"  value="\([^"]*\).*/\1/g' $TMPFILE2
        #echo ‘Current gSSS is ‘$gSSS

        gRRR=sed 's/.*name="gRRR"  value="\([^"]*\).*/\1/g' $TMPFILE2
        #echo ‘Current gRRR is ‘$gRRR

        OPT="–post-data=gPage=maintenance&gMode=shutdown&gType=shutdown&gSSS=$gSSS&gRRR=$gRRR -o /dev/null -q -T 5"
        $WGET $OPT $URL

        rm -f $TMPFILE
        rm -f $TMPFILE2
    }

    case $1 in
    start)
    ;;

    stop)
    ts_down;
    ;;
    esac

    このファイルを実行可能にして/etc/init.d/terastation等として置きます(RedHat系)。赤字部分は適宜書き換えて下さい。

    手動で実行するには

    /etc/inin.d/terastation stop

    などとします(なお当たり前ですがstartオプションは無視されます)。せっかくrcスクリプト形式なので適当な/etc/rc*.dディレクトリにシンボリックリンクを張るとか、/etc/rc.d/init.d/haltに書いておけば自動実行されるんですが、通常のメンテナンス時にも一緒にTeraStationまで落ちるのが難点ですね。UPSによるシャットダウンの時だけに実行できる仕組みがある場合はそちらを利用するのが良いでしょう。

    あとTeraStation自体と途中のハブもUPSでまかなっていないと意味がないのでご注意を。

    録画PC用にUPS導入

    電力状況が不安定ということでUPS(無停電電源装置)が重宝してます。メインのサーバーに関しては元々導入済みだったんですが、もう1台録画用などで24時間稼働しているWindows機用にも導入してみました。もちろん節電的な意味合いで昼間の明らかに録る番組がない時間帯は手動でスリープにしてたりもするんですが、もともとキッチンと回路が同じでよくブレーカーが落ちて、しかもそういう落ち方をした時にしばらく復帰不能になる現象が出てたりもしたので、この機会に導入を決意。対象PCはActivePFC電源を搭載しているので、(本当に必要か議論は別れてますが念のため)正弦波出力で一番安いオムロンのBY35S。以前から買うならコレ一択だなと思ってたので。

    といっても入手には苦労しました。計画停電に関する発表があって割とすぐに注文したんですが、Amazon本家は売り切れ。マーケットプレイスでも「在庫有り」ながら注文後に「メーカー倉庫が被災して発送不能」という返事が2件。更に価格.comで見つけた3件目にも同じ返事が来てキャンセルしたんですが、翌日に「22日に当店に入荷すると連絡が入ったので、よかったら買ってくれないか?」とメールが来て、ようやく入手ができたという次第。今はAmazonはエントリ自体出なくなってるっぽいですね。この値段で正弦波出力は珍しいのでさもありなん。

    メインサーバー用には三菱のFREQSHIP-Fを2台続けて10年ほど使い続けてて、この機種は同社ではエントリモデルで、WindowsにもLinuxにも対応しているものの基本的にシリアルポート経由のシャットダウンができるだけの簡易ユーティリティが使えるのみ(上位モデルは有料の管理ソフトにも対応)。対して本製品はUSB経由で様々な設定や状況把握ができるユーティリティが添付されています。以下画面例(クリックで原寸表示)。

    BY35S

    ホストにApacheがインストールされて(IISも選択可能)、Webアプリとして機能するので、別マシンから監視、制御することも可能です。接続容量も見られるのは嬉しいですね。余裕ありそうなら隣にあるBD&HDDレコーダーもつないでみようかと思います(もちろん連動シャットダウンはできませんが、ブレーカー落ちには対応できるので)。

    また出力コンセントがABC三系統あり、例えば本体と周辺機器のシャットダウンに時間差をつけるといったことも可能。スケジュール機能もあるので実際の計画停電よりもマージンとって運用するのにも重宝します。Windows側の動作としてはシャットダウンだけでなく休止状態も選べたりと至れり尽くせり。TeraStationなどのNASの連動シャットダウンも対応してるみたいですが、このモデルは法人モデルにしか対応してないみたいですね。少し上のモデルだと結構広く対応してるっぽいですが。ただ終了時に特定コマンドを実行することはできるので、なにか上手いバッチが作れればいけるのかも知れません。

    これだけ高機能だとメインサーバー用のも買い換えたくなってきますね。FREQSHIP-Fを最初に買ったのが2000年、そのバッテリーが逝って交換したのが2005年みたいなのでどのみちそろそろ交換時期かも知れません(まだインジゲーターはフルのようですが)。今の品薄が一段落したら検討しようかと思います。

    ウソでした。更に2010年10月に3台目を買っていたようです…>FREQSHIP-F

    Sandy Bridgeマザー交換完了

    1月に仕事&エンコ用メインマシンのCPU + マザーをSandy Bridge世代のものに交換した直後、H/P67チップセットにリコールがかかってしまいました。何年もかかって3GbpsのSATAポートが劣化していくという不具合なので、マザー交換の手間を考えると放置でもいいかと思ったんですが、GIGABYTE(の代理店のCFD)の交換ポリシーが4月22日までは交換品先送り、それ以降の受付分は手持ち分を先送りということで、後々交換する時は更に手間になりそうだということで、結局申し込みました。

    一昨日交換品のB3ステップ品が到着し、昨日交換作業を実施。マザーボードの型番が変わっており、GA-H67MA-UD2HからGA-H67MA-UD2H-B3 (rev1.1)となりました。送付品には返品用の記入済み着払い伝票や封緘テープが同封されており、段ボールに旧製品を箱ごと入れてテープで封をして着払い伝票を貼るだけです(自分の住所を書く必要もありません)。後はクロネコに集荷依頼をするか営業所に持ち込めば完了。当初言われてた様に、宅急便受け取りと同時に旧製品引き取り、という形である必要はありません。小一時間かかったマザー交換作業自体を別にすれば最低限の手間とダウンタイムで交換してもらえるようになっています。ちなみにCPU、クーラーを取り付けなおすということで冷却グリスがオマケで添付されてました(安物っぽかったので手持ちのシルバーグリス使いましたけどw)。

    Dual BIOS + Hybrid EFIに変更とのことで旧環境がそのままブートができるのか不安でしたが問題ないようです。最初は普通に起動し、プラグ&プレイによる周辺機器のドライバ再セットアップが粛々と進み再起動指示。その再起動の後にブートに失敗してエラー出ましたが、BIOSでブートドライブを再指定したところ無事起動できるようになりました。これはHDD->SSD以降の時にも似たようなことが起きたので、おそらくウチの環境起因だと思います。

    CrystalDiskMarkによるベンチもとってみましたが誤差範囲っぽいので割愛。