ParallelsとBoot CampでのLinuxパーティション共用〜X自動設定編

id:NeoCat:20080421 のエントリで、MacBoot CampとrEFItを使ってパーティション上にインストールしたLinuxを、Parallelsからも起動できるようにしましたが、ハードウェア構成が変化するため、そのままではXの起動に失敗してしまいます。
そこで、これを自動的に再設定するようにしてみました。

方法は簡単、それぞれの環境用のxorg.confを用意しておき、次のようなスクリプトを使って起動時に自動的に切り替えさせるだけです。

#!/bin/sh

switch_xorg_conf() {
	if [ -r xorg.conf-$1 ]; then
		echo Switching to xorg.conf-$1 ...
		cp xorg.conf-$1 xorg.conf
	else
		xorg.conf-$1 not found.
	fi

}

cd /etc/X11 
if /sbin/lspci -n | /bin/grep 1ab8:1131 > /dev/null; then
	echo Parallels enviromnet detected.
	switch_xorg_conf parallels
elif /sbin/lspci -n | /bin/grep 10de:0407 > /dev/null; then
	echo nVIDIA enviromnet detected.
	switch_xorg_conf nvidia
else
	echo Unknown environment. do nothing.
fi

1ab8:1131とか10de:0407は、それぞれParallelsVGAエミュレーションデバイスBoot Campで見えるMacBook Pro 15"のnVIDIAのグラフィックデバイスの番号で、lspci | grep VGA でアドレスを調べた後、lspci -n でデバイス番号を調べた結果です。
nVIDIA用ドライバはlivnaからyumでインストールした後で、/etc/X11/xorg.conf を /etc/X11/xorg.conf-nvidia として保存。
Parallelsも同様に、Parallels Toolsを(Macの「アクション」メニューから)インストールしたあとのものを xorg.conf-parallelsという名前で保存しました。

あとは上記のスクリプトを実行権限付きで/usr/local/bin/switch-xorg-configに保存し、 /etc/X11/prefdm あたりにでも、

# Switch xorg.conf based on the system environment
if [ -x /usr/local/bin/switch-xorg-config ]; then
	/usr/local/bin/switch-xorg-config
fi

とか書いておけばよいでしょう。
なお、上記を書いた prefdm というのは、GNOMEKDEなどを設定に応じて切り替えるためのスクリプトとのこと。ただし、rhgb(グラフィカルな起動メッセージ)が出ない場合があります。rhgbが立ち上がるときはrootパーティションは書き込み不可なので、仕方ないかな〜。