2011-05-21

MobileMultiUser for iOS - 家族で共有するiPadやiPhoneでユーザ環境を切り替える、マルチユーザ機能

家庭に1台iPadの時代になりました。
ポストPCのデバイスとして日々の生活をとても便利にしてくれていると思います。
ただひとつ困るのは、iPadでメールやWebのブックマークを自分専用にできないことです。
Mac OS Xだとユーザアカウントをそれぞれの人ごとに登録すれば良いのですが、iPadにはそういう機能がありません。
iPhoneは携帯電話としての感覚があるので、ひとり1台がすんなり受け入れられますが、iPadはまだひとり1台にはなかなかなっていないと思います。

そこで、ユーザ環境を切り替えるツールを作ってみました。

注意:jbとLinux (Darwin) のコマンド操作が必要ですので、このバージョンはある程度コンピュータ知識のある方以外の使用はお勧めできません。
また、プロトタイプレベルのため、限られた機能しかありません。
シェルスクリプトで作成していますので、機能拡張やご指摘などありましたら、本投稿のコメント、メールでお伝えいただけると幸いです。

なお、利用の前にはiTunesでバックアップを取得し、バックアップフォルダのコピーを保存したうえで、お願いします、念のため。

MobileMultiUser for iOS プロトタイプ1 (build #001 2011-05-16) [Download]

MobileMultiUserの機能
  • ユーザごとに保存する内容:
    標準アプリの設定内容 (Preferences)、アイコンの並び・壁紙 (SpringBoardの設定)、Safari・メール・メモの設定・データ・履歴、Webクリップアイコン、Flipboardの設定・データ。
    ユーザを切り替えるとこれらの設定内容が切り替わります。
  • ユーザの間で共有される内容:
    iTunesライブラリ、iBookライブラリ・設定、写真ライブラリ、YouTube設定・履歴、アプリのインストール状態など、前記以外全て。
    ユーザを切り替えてもこれらの設定内容は切り替わりません。
  • ユーザのアプリアイコンがホーム画面に追加されます。
    切り替えたいユーザのアイコンを押すと、環境が切り替わります。
  • ユーザの作成は以下のコマンドを使って行います。
    ここでは他のコマンドも一緒に説明します。
    • cloneUser <username>
      指定した名前のユーザを新たに作成します。
      新しいユーザの設定内容は、現在のユーザからコピーされます。
      なお、コマンド群は、/var/mobile/Library/AddressBook/MMU-parasite/ の配下にあります。
      アドレス帳のライブラリに寄生することで、MobileMultiUser の保存データが iTunes にバックアップされることをねらっています。
    • createUserIcon <username> [-icon color]
      ユーザへ切り替えるためのアプリアイコンをホーム画面に作成します。
      いくつかの色のアイコンを用意しています。
      このコマンドを実行するには特権が必要なので、su してから、または sudo と一緒に使用してください。
      また逆に、createUserIcon 以外のコマンドは mobile ユーザで実行することが必須ですので、注意してください。
    • switchUser <username>
      現在のユーザの環境を保存し、指定したユーザに環境を切り替えます。
      ホーム画面のユーザアイコンを押すと、内部的にこのコマンドが実行されます。
    • saveCurUser
      switchUser の内部コマンドです。
      現在のユーザの環境を保存します。
      保存場所は /var/mobile/Library/AddressBook/MMU-parasite/userprofiles/username/ です。
      現在のユーザ名は currentusername ファイルに記録されています。
    • restoreUser <username>
      switchUser の内部コマンドです。
      指定したユーザの環境を復元します。
      現在のユーザの環境は上書きされます。
      SpringBoard に環境の切り替えを反映させるために、respring してください。
  • iPad、iPhone、iPod touchで使用できます。
    テストした環境は、iOS 4.3.1のiPadと、iOS 4.3.1のiPod touch 4genです。
    iPadを家族で共有する場合の他に、iPhoneを仕事用とプライベート用に切り替えたり、他の人にiPad/iPhoneを貸す時の環境退避にも使用できると思います。
インストールの方法
  1. MobileMultiUser が内部的に使用するために、必要となるCydiaパッケージは Eria Ulitities、Tape Archive、sed です。
    事前にインストールしておいてください。
  2. 上記から MobileMultiUser-001.tar.gz をiPadにコピーします。
    PC/Macにダウンロードした後、scp で iPad の mobile ユーザのホームディレクトリにコピーするのが良いでしょう。

    $ scp MobileMultiUser-001.tar.gz mobile@<ipadのipアドレス>
  3. 次のコマンドでダウンロードしたファイルを展開します。
    展開する先は、/var/mobile/Library/AddressBook/MMU-parasite/ です。

    $ ssh mobile@<ipadのipアドレス>
    ipad$ cd /var/mobile/Library/AddressBook/
    ipad$ tar xzvf ~/MobileMultiUser-001.tar.gz
  4. 現在の設定を元に、最初のユーザを作成します。
    最初のユーザは defaultUser という名前になります。
    次のコマンドを実行します。

    ipad$ cd /var/mobile/Library/AddressBook/MMU-parasite/
    ipad$ ./saveCurUser
    ipad$ su
    # ./createUserIcon defaultUser
    # exit
  5. 追加のユーザを作成します。
    ここでは例としてユーザ名を Taro とします。

    ipad$ cd /var/mobile/Library/AddressBook/MMU-parasite/
    ipad$ ./cloneUser Taro
    ipad$ su
    # ./createUserIcon Taro
    # exit
本バージョンの制限事項
  • 現在のユーザを表示する方法がないので、壁紙を変更するなどして区別できるようにしてください。
    現在のユーザのアイコンをタップして切り替えようとした場合は何もせずにすぐに終了します。
  • 現バージョンでは、ユーザ間で切り替えられる設定は、使い方のところに書いたアプリだけです。
  • ユーザの作成、アイコンの作成は、コマンド操作で行います。
  • 複数のユーザでメールやSafariで同じ外部アカウント(メールアカウントなど)を設定した状態の下、ひとつのユーザでアカウントを削除した場合、他のユーザのアカウント設定からパスワードが削除されてしまいます。
    例えば、最初に defaultUser を作成し、Taro ユーザを作成後、Taroのメールアカウントを設定するために、defaultUserからコピーされたメールアカウントを削除すると、それに引きずられて defaultUserのメールアカウントのパスワードだけが削除されてしまうことがおこります。
    これは、システムのKeychainがひとつしかないためにおこる制限です。
    ユーザ間で同じメールアカウントを設定しなければこのような問題は起こりません。
  • ユーザの切替操作に対してパスワード保護等がないので、現バージョンではセキュリティ対策としての使い方には向いていません。
    あくまでユーザ環境を切り替えることができることの評価が目的です。
[2011-06-02] 今後の拡張機能のアイデアを書きました。
[2011-10-19] iCloudのApple IDの切り替えに関する考察を書きました。
[2011-12-19] MobileMultiUserの新しい画面のモックアップを公開しました
[2011-12-25] V2、パスワード設定機能付きを公開しました。
[2012-01-11] V3、iOS 5対応版公開予定です。
[2012-01-23] iOS 5対応版をCydiaで公開しました
[2012-07-29] 大幅に高速化した MobileMultiUser V4 出来ました

2011-05-03

WindowsのブートローダーでLinuxとデュアルブートする方法 - Ubuntu 11.04/12.04/12.10, Grub2の場合

Ubuntu 11.04/12.04/12.10はAppMenu (Global Menu) を採用し、よりMacに近い先進的なユーザインターフェースになりました。
インストーラもデュアルブート派(マルチブート派)により優しくなりました。
以前の投稿と同じく、Windowsのブートローダ(ntldr)でUbuntuとマルチブートするためのインストール手順を記します。

Windows 8/7/Vista/XPのブートローダで、Ubuntu Linux 11.04~12.10をデュアルブートする方法:
  1. Windowsを新規インストール、またはインストール済みのWindowsのパーティションを分けてUbuntuをインストールするエリアを作成します。
    ここでは3つのパーティション、つまりWindows用のNTFS、Ubuntu用の空きパーティション、共有用のFAT32を作成するものとします。
    容量は私の場合は80GBを40GB、20GB、10GBに分けました(テストマシンなので少なめ)。
    8/7/VistaではWindowsの管理ツールでパーティションの縮小、分割が簡単にできます。
  2. 次に、Ubuntuを真ん中のパーティションにインストールします。
    1. UbuntuのCDまたはUSBから起動し、最初のメニューで [Ubuntuを試す] を選びます。
    2. 起動後、必要であれば、
      無線LANなどネットワーク環境の設定を行います(必須ではない、インストール後じっくりやる方がよいかも)。
      また、Gpartedツール(システムメニューでgpartedと入力して検索、起動する)でパーティションの状態を確認することができます。必要であれば、過去にインストールしたUbuntuのパーティション(ブートローダ、本体、スワップ)を削除します(結果、ひとつの空き領域にします)。
    3. デスクトップにある [Install Ubuntu 11.04] を起動します。
      1. [言語の選択] で好きな言語(日本語)を選びます。
      2. [ディスク領域の割り当て] で [それ以外] を選びます
        (デフォルトの [UbuntuをWindows 7とは別にインストール] を選んでしまうと全自動インストールが走りブートローダが上書きされてしまうので、注意)。
      3. まず、スワップパーティションを作成します
        (スワップパーティションはなくてもLinuxは問題なく起動しますが、作成するのが一般的です)。
        表示されるパーティション一覧から、[空き領域] を選んで、[追加] を押します。サイズは4GB程度(Linuxサーバでは物理メモリの3倍程度と言っていましたが、昔話となりました)、場所は [後ろ]、マウントポイントは [swap] を選んで [OK] を押します。
      4. 次に、Ubuntu本体をインストールするパーティションを作成します。
        表示されるパーティション一覧から、[空き領域] を選んで、[追加] を押します。
        サイズはそのまま(全て)、マウントポイントは [/] を選んで [OK] を押します。
      5. ここで、[/] に設定したパーティションの名前を記録しておきます。
        私の場合は sda7 になりました(以前紹介した手順に比べて作成するパーティションがひとつ少なくすんでいます)。
      6. [Device for boot loader installation:] に先に記録したパーティション(私の場合sda7)を指定します。
        この手順を忘れる・間違うとWindowsのブートローダが上書きされるので、特に注意してください。
      7. [インストール] を押して、インストールを開始します。
  3. 再起動後、Ubuntuは起動しないので、今まで通りWindowで起動します。
  4. WindowsのブートローダからLinuxを起動するためのツールとしてgrub4dosを使用します(以下、設定済みの場合は4、5、6はスキップしてかまいません)。
    grldrとgrldr.mbrを c:\ に(Cドライブの直下に)コピーします。
  5. Linuxを起動するためのメニューを作成します。
    以下の内容で C:\ に menu.lst という名前のテキストファイルを作成します。
    2行目 hd0,6 の2番目の数字は、Ubuntu本体のパーティション番号マイナス1の数字です。
    sda7の場合は hd0,6 とします。
    title    Linux
    root (hd0,6)
    kernel /boot/grub/core.img
    
    ※ Ubuntu 12.10の場合は以下の内容とします。
    title    Linux
    root (hd0,6)
    kernel /boot/grub/i386-pc/core.img
  6. WindowsのブートメニューにUbuntuを追加します。
    Windows 7/Vistaの場合、管理者モードのDOS窓を開き、次のコマンドを実行します。
    2行目以降の {xxxx} は、1行目の実行結果で表示されるidを指定します。
    追加後、引数なしのbcdeditで「リアルモードブートセクター」のところに表示されることを確認します。
    bcdedit /create /d "Linux" /application bootsector
    bcdedit /set {xxxx} device partition=C:
    bcdedit /set {xxxx} path \grldr.mbr
    bcdedit /displayorder {xxxx} /addlast
    Windows XPの場合は、テキストエディタでC:\ にあるboot.iniに下記を追加します(システムファイル、隠しファイルになっている場合は解除してから)。
    C:\grldr="Linux"
  7. リブートして確認します。
    WindowsのブートメニューにLinuxの項目が追加されているはずです。
    Ubuntuを起動するときは、WindowsのブートメニューでLinuxを選んだ後、さらにLinuxを選び、次に表示されるUbuntuのブートローダーで一番上を選びます。
Linuxのブートローダ (Grub2) に比べてWindowsのブートローダ (ntldr) は融通が利かないので、安全のためWindows主体のブート方法をとりました。
こうすることで、Windowsを再インストールしたり、バージョンアップしたり、Linuxを入れ替える場合にも、ブートローダの上書きを気にせず安心して作業できます。

なお、Windowsのgrub4dosはgrubのバージョン1なので、(標準のインストール状態の)Ubuntu 11.04を直接ブートできません。
WindowsのgrubからUbuntuのgrub2をロードし、そこからUbuntuをブートしています(チェインロード)。

以前の投稿:

(Ubuntu 10.10/11.10はスキップしてしまいました。)

[2012-06-17] Ubuntu 12.04で確認しました。手順はほとんど同じで、ディスク領域を割り当てる2-3-3〜2-3-6までが一つの画面でできるように改良されています。
[2012-12-31] Ubuntu 12.10での手順を追加しました。コメントでの情報ありがとうございます、活用させていただきます。
[2013-02-23] Windows 8でもWindows 7と同様に設定できるとの情報をReatさんからもいただきました。ありがとうございます。