feed

2014年10月13日, 編集履歴

iBook G4でLubuntu 14.04をUSBメモリィから起動、インストールする

 PowerPC G4を搭載したiBook G4で、Lubuntu(Ubuntu Linuxの軽量版的ディストリビューション)14.04をUSBメモリィからLiveで起動し、インストールを行う。インストールを試みるiBook G4は最終モデルの12インチで、スペックは以下の通り。

 Mac OS XとLubuntuを内蔵HDDひとつでデュアルブートにするならば、あらかじめパーティションを分割しておく必要がある。Mac OS X 10.5 Leopardならば「ディスクユーティリティ」を用いて現在のHDDの内容を保持したままパーティションのリサイズや分割ができるが、10.4 Tiger以前のディスクユーティリティでは内容全消去なので注意。

ディスクイメージのダウンロード、USBメモリィへの書き込み

 Lubuntu/GetLubuntuからPowerPC版のディスクイメージをダウンロードする。

 次に、How to install Ubuntu on MacBook using USB Stickを参考にディスクイメージをUSBメモリィに書き込む(このページではISO形式のディスクイメージをIMG形式に変換しているが、私はこのステップを飛ばした)。「PowerPCPAQ - Ubuntu Wiki」も参照。

 具体的にはUSBメモリィを接続してTerminal.appから

$ diskutil list

を実行し、USBメモリィの識別子を特定する。私の場合は/dev/disk1だった(以下USBメモリィの識別子が/dev/disk1を仮定)。次に、

$ diskutil unmountDisk /dev/disk1

でUSBメモリィをマウント解除する(USBメモリィ自体は差し込んだまま)。

$ sudo dd if=/path/to/lubuntu-14.04.1-desktop-powerpc.iso of=/dev/disk1 bs=1m

でディスクイメージをUSBメモリィに書き込む(/path/to/lubuntu-14.04.1-desktop-powerpc.isoはディスクイメージのパス)。パスワードを聞かれるので入力すると書き込みが始まる。数分間待つ。それまでのUSBメモリィの中身は消去されるので注意のこと。書き込みが終わればLubuntu起動・インストール用のUSBメモリィが完成。

Open FirmwareからUSB起動

 PowerPC時代のMacは、通常はUSBからの起動ができないが、後述のおまじないを唱えることでUSBメモリィからの起動を行う。

 インストール先のiBook G4に前節で作成したLubuntu起動・インストール用USBメモリィを差し込む。電源ボタンを押してiBook G4を起動させた直後、アップルマークが出る前にキィボードのCommand+Option+o+fを押し続ける。そうすると以下のような画面が出るのでキィを放す。

 これは昔のPCで言うところのいわゆるBIOS的なヤツである。Open Firmwareのプロンプトに以下のような「おまじない」を打ち込む。

boot ud:,\\:tbxi

 この「おまじない」は「Ben Collings: Booting your iBook G4 from a USB stick」、「PowerPCPAQ - Ubuntu Wiki」を参考にした。

 日本語キィボードのiBook G4でも、この時点では英語配列として認識されているので、記号類を入力するときに注意する:Shiftを押しながら「;」の刻印があるキィ、\は「]」の刻印があるキィで入力できる。

 しばらくすると以下のような黒い画面に移行する。

 この画面で何もせずに放っておくと勝手にLubuntuがLive起動するが、そのままでは画面表示が乱れてしまうので、以下のような「おまじない」を入力する。

live video=radeonfb:1024x768-32@60

 この「おまじない」は「Lubuntu/Documentation/FAQ/PPC」を参考にした。これにより、以下のようにLubuntuが正常にLive起動する。

 次節でインストールを行うが、この時点でもFirefoxでウェブを閲覧したりといった「お試し」が可能である。ただし、iBook G4のトラックパッドがまともに反応しないし、無線LANが使えないので、USBマウスと有線LANが必須である(それぞれ修正方法があるかもしれないが……)。

Lubuntu 14.04のインストール

 Live起動したLubuntuのデスクトップにある「Install Lubuntu 14.04」アイコンをダブルクリックすることでインストールウィザードが開始する。

 まずは使用する言語で「日本語」を選択し「続ける」をクリック。

「Lubuntuのインストール準備」では必要なディスク容量とネット接続の確認、インストールオプションの選択が行われる。ここでは両オプションを選択し「続ける」とした。

「インストールの種類」では、Mac OS Xとデュアルブートにする場合は一番上の「Lubuntuをこれらと併用可能な形でインストール」を、Mac OS X(やその他)を消去してLubuntu一本で行く場合は「ディスクを削除してLubuntuをインストール」を選択する。デュアルブートにする場合はあらかじめHDDに空きパーティションを作成しておくこと。さもなければ「Lubuntuをこれらと併用可能な形でインストール」がそもそも選択肢に出てこない(一番下の「それ以外」を選択することでパーティションの操作ができるかもしれないが、操作方法がよく解らず)。

 ここでは「Lubuntuをこれらと併用可能な形でインストール」を選択して「インストール」をクリック。

 タイムゾーンを選択して「続ける」。

 キィボード配列を選択して「続ける」。

 ユーザアカウントを設定するとインストールが始まり、以下のダイアログが出てインストールは完了。「今すぐ再起動する」をクリック。

 LubuntuをMac OS Xとデュアルブートできるようにインストールした以降は、iBook G4電源投入時に以下のような黒い画面が出るようになる。

 この画面で何もせずに放っておくか、あるいは表示されている説明通りにlキィを押すとLinux(Lubuntu)が起動する。xを押せばMac OS Xが起動するようになる。ディフォルトで起動するOSをMac OS Xに変更する場合は「YabootConfigurationForMacintoshPowerPCsDualBoot - Community Help Wiki」を参照。

インストール後

 Lubuntuインストール後、一通りのソフトウェアアップデートを済ませて、再起動直後のターミナル一枚とタスクマネージャを起動した時点でメモリィ使用量は110MB。

 使用感等を適当に列挙すると、

 上記のうち、トラックパッド、無線LAN、音に関してはおそらくすぐに改善できるだろうが、今回はここまで。

 動作が遅いのはMac OS Xでも同様(元が9年程度前のマシンなので)。もっと軽量なLinuxディストリビューションならば軽快な動作が可能かもしれないが、

ようなものを探すのが面倒なので、今回は有名なUbuntuの軽量版的ディストリビューションであるLubuntuを選択した。

2014年10月05日, 編集履歴

Murasakiをver. 2.2.2に更新しました

 OS X用スクロール型EPUBリーダアプリケーションMurasakiがver. 2.2.2になりました。

 ver. 2.2.2はバグ修正版です。修正箇所は、

です。ナビゲーション構造の解析に関する問題は、コンタクトフォームよりご報告いただきました。ありがとうございます。

2014年09月18日, 編集履歴

Mailto Interceptor Liteをリリースしました

 mailto:リンクのクリック等によるメールアプリケーションの意図しない即時起動を抑制するユーティリティアプリケーションMailto Interceptorに無料のLite版ができました。

 Lite版ではmailto:リンクのクリック等に対する動作として、

が行えます。通常版では以上に加えて、

が搭載されています。まずは無料のLite版でMailto Interceptorの機能をぜひお試しください。

2014年09月10日, 編集履歴

Mailto Interceptorをver. 1.2にヴァージョンアップしました

 mailto:リンク等によるメールアプリケーションの即時起動を抑制するユーティリティMailto Interceptorをver. 1.2にヴァージョンアップしました。

 ver. 1.2では、

が付きました。

カスタムURLの定義

 これまでも、mailtoリンクをクリックしたときのディフォルト動作として、あるいはポップアップメニューから選択したときに、Mailto Interceptorであらかじめ定義されたGmailの作成画面を開くことは可能でした。ver. 1.2ではあらかじめ定義されたURL以外に自分で定義したカスタムURLを開くことができるようになります。

 たとえば、上記画像のようにカスタムURLを定義した場合、mailtoリンクをクリックしたディフォルト動作として、あるいはポップアップメニューから選択したときに、https://example.com/mail_compose?to={to}なるURLを開くことができるようになります。{to}の部分はmailtoリンクで指定された宛先アドレスに置き換わります。置換可能なプレイスホルダは全部で5種類あります。

 それぞれURLを開くときにmailtoリンクで指定されたものに置換されます。

 カスタムURLを定義することで——自分が使っているウェブメールサーヴィスがメール作成画面へのURLを提供しているならば——mailtoリンクのクリックでそれらを開くことができるようになります。

のふたつが定義済みURLとして提供されています。

ポップアップメニューの編集

 Mailto Interceptorでは、mailtoリンククリックに対する動作として、ポップアップメニューを開く機能を提供しています。あらかじめディフォルト動作を決め打ちするのではなく、その場で

等の動作を選択することができます。

 ver. 1.2ではこのポップアップメニューのメニュー項目を編集する機能を追加しました。ポップアップメニューに表示されるメニュー項目を自分好みに追加・削除したり、並べ替えたりすることができるようになりました。

 追加できるメニュー項目は、

です。

 新しくなったMailto InterceptorMac App Storeで配信しています。どうぞよろしく。

2014年09月05日, 編集履歴

環境設定をクリアする

 Cocoaアプリケーションで環境設定を保存するにはNSUserDefaultsを使うのが定石。保存した設定はプロパティリストファイルに保存される。

 アプリケーションの開発中には保存する設定の形式をころころ変えたりするし、初期状態に戻して動作を確認したいこともよくある。以前であればプロパティリストファイルを直接開いて保存された値を編集したり削除したりしていたが、OS X 10.9 Mavericksよりプロパティリストファイルに保存されている環境設定値がキャッシュされるようになったらしく、直接編集した結果が実際には反映されなくなった。

 そこで開発中のアプリケーション自身で、キャッシュシステムに左右されることなく、環境設定値をクリアする方法を考える。

環境設定をクリアするUIを作る

 特定のキィを持つ環境設定値を削除するのであれば、

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"aKey"];

を用いるが、使用したキィの分だけ上記メソッドを繰り返すのは面倒だし、削除し忘れ等が発生する恐れがある。そのアプリケーションで使用している環境設定値すべてを削除するにはremovePersistentDomainForName:を用いる。引数にはアプリケーションのバンドルIDをNSStringで渡す。

- (IBAction)restoreDefaults:(id)sender
{
  NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
  [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:bundleIdentifier];
}

のようにすれば、環境設定をクリアするアクションメソッドが作成できる。さらに以下のようなメソッドを作成し、上記アクションメソッドを実行するメニュー項目をメインメニュー内のアプリケーションメニューに挿入しておく。

- (void)addRestoreDefaultsMenuItemToApplicationMenu
{
  NSMenuItem *menuItem = [[NSMenuItem alloc] initWithTitle:@"Restore Defaults" action:@selector(restoreDefaults:) keyEquivalent:@""];
  NSMenu *appMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
  [appMenu addItem:[NSMenuItem separatorItem]];
  [appMenu addItem:menuItem];
}

 このaddRestoreDefaultsMenuItemToApplicationMenuメソッドをapplicationDidFinishLaunching:等の中で呼び出す。

#ifdef DEBUG
  [self addRestoreDefaultsMenuItemToApplicationMenu];
#endif

 上記のようにしておけばデバッグビルド時だけ環境設定をクリアするメニュー項目が使えるようになる。デバッグ中だけに使いたければこれで良いし、ユーザがふつうに使えるように適当な場所にメニュー項目やボタン等を配置しても良いだろう。

起動時に環境設定をクリアする

 将来、環境設定値の仕様変更をミスって通常起動すらしない、というようなことがあるかもしれない。手元であれば適当に対処するが、アプリケーションのユーザからそのような報告があった場合を考える。以前であれば「プロパティリストファイルを削除してみて」と言えたが、前述の通りキャッシュが効いてファイル削除も無効になってしまう。環境設定のキャッシュを制御するプロセス(cfprefsd)を再起動させればいいのだが、ユーザに課す手数が増え複雑化してしまう(プロパティリストファイルを探して、削除して、プロセスを再起動)。

 そこで、起動時に環境設定値をクリアできるようにする。

- (void)applicationDidFinishLaunching:(NSNotification *)notification
{
  NSUInteger modFlags = [NSEvent modifierFlags];
  NSUInteger requiredFlags = NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask;
  if((modFlags & requiredFlags) == requiredFlags) {
    NSAlert *alert = [[NSAlert alloc] init];
    [alert setInformativeText:NSLocalizedString(@"Would you like to restore default preferences?", nil)];
    [alert addButtonWithTitle:NSLocalizedString(@"OK", nil)];
    [alert addButtonWithTitle:NSLocalizedString(@"Cancel", nil)];
    if([alert runModal] == NSAlertFirstButtonReturn) {
      NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
      [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:bundleIdentifier];
    }
  }
}

 上記のような処理を、アプリケーションが環境設定値を読み込む前のどこかの段階に仕込む(上記ではapplicationDidFinishLaunching:、場合によってはそれより以前の段階に仕込む)。上記の場合、この処理を通る段階でOptionShiftControlキィが押されていた場合、アラートダイアログを表示し、そのOKボタンが押されたときに環境設定値クリアの処理が走るようになる。トラブル時、ユーザには「アプリケーション起動後すみやかにOptionShiftControlを押しっぱにして」と言えば環境設定をクリアできるようになる。