彷徨えるフジワラ

年がら年中さまよってます

Windows での HOME 環境変数設定

Windows 運用における、HOME 環境変数設定に関する備忘録。あまりにもピンポイント過ぎる tips だけど、きっと未来の自分が、困ってググった末にこのエントリを見つけてガッカリするに違い無い。

Windows 環境で HOME 環境変数を明示的に設定するのは、Meadow に対して:

  • ${HOME}/.emacs を読み込んでもらう
  • チルダ("~")の展開を上手いことやってもらう
  • 外部プロセス(主に Mercurial)起動時に HOME 環境変数を渡してもらう

という要求があるからなのだが、先日 Windows7 を更の状態で入れた際に、ちょっとややこしい事態に。

VirtualBox を導入して OpenSolaris ゲストを作成した後で、Meadow の導入+HOME環境変数の設定を行ったのだが、HOME 環境変数設定後に VirtualBox の管理 GUI を起動すると、作成した筈の OpenSolaris ゲストが表示されない!
あれ?と思って、CUI (= VBoxManage コマンド) 経由でも確認してみたが、やはりゲスト類は一切認識されていない。

原因調査のためにファイルの所在を確認する過程で、${HOME} 配下に .VirtualBox ディレクトリが作成され、設定ファイルが置かれている事が判明。

そうか! Solaris 環境では、問答無用で ${HOME}/.VirtualBox 配下を参照していたのだけれど、どうやらその挙動は Windows バイナリにも当てはまるのね。まぁ、MercurialWindows バイナリも、HOME 環境変数が有効な場合はそっちを見に行くし、ソースを共有するのであれば、そういう仕様になってしまうのも頷ける。

そういえば、他の Windows 環境では、VirtualBox の使用を開始したのはいずれも HOME 環境変数設定後だけだから、あんまり気にならなかったのだなぁ。

ちなみに、HOME 環境変数が設定されると、「ファイル」→「環境設定」→「一般」で表示されるディスクイメージ/仮想マシンのデフォルト保存先ディレクトリも、${HOME} 配下に設定される。

で、とある事情から、HOME 環境変数を設定「しない」状態で VirtualBox を稼動させたくなったので、とりあえず HOME 環境変数定義を削除したところ、削除前の HOME 定義に基づいた Meadowチルダ展開が、何故か引き続き機能している!

リブート+コマンドプロンプト経由で HOME 環境変数が未設定であることは確認済みなのだが、Meadow 上で lisp 変数 process-environment を見てみると、確かに HOME 環境変数が設定されている。っていうか、そもそも HOME 環境変数が設定されていないのに、明らかにデフォルト位置と違う場所にある ${HOME}/.emacs が読み込まれているのは、どう考えても変だ!

ひょっとして?と思い、HOME 定義の内容を使ってレジストリに検索を掛けた所、以下のキー配下に HOME 環境変数相当の内容が保持されているのを発見!

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\GNU\Meadow\3.02\Environment

実行時に HOME 環境変数が設定されていればそちらが優先されていたので、インストーラの「.emacs 読み込み位置」云々のプロンプトには、何も設定しない事にしていたのだが、どうやらこの際の入力値 or HOME 環境変数の値が、レジストリに登録されるのだなぁ。

というわけで:

という結論に。