Linux | Top

Linux on SHARP MURAMASA PC-MM70G

3年ちょっと使ってきた富士通 FMV-BIBLO LOOX S5/53W の後継機として SHARP Mebius MURAMASA PC-MM70G を発売日(2004/10/22)に購入し、Debian GNU/Linux をインストールしてみました。

今回購入したのは MM70G ですが、ほぼ同型機の PC-MM50G も同じようにインストールできるはずです。 突っ込み・指摘助言などがありましたら 掲示板までお願いします。


インストール
使用機材 | インストールの方針 | インストール前の準備 | インストール
内蔵ハードウェア/外部インターフェース動作状況
CPU | グラフィックアクセラレータ | 外部ディスプレイ出力 | サウンドチップ | イーサネットコントローラ | 無線LAN (おまけ: コレガ CG-WLAP54GTV2 を SNMP でつつく) (おまけ: 内蔵無線LANを自動設定) | PCカードスロット | USB | タッチパッド | MOBILEスイッチ
Fn+F? キーの動作状況
Fnキー補完計画
ACPI 動作状況
acpid が検出するもの | ハイバネーション | サスペンド | ACアダプタ/バッテリー

インストール

今回インストールしたのは Debian GNU/Linux testing (sid) です。

使用機材

USB CD-ROM
Panasonic KXL-840AN (Debian インストーラ起動用)
USB FDD
Panasonic CF-VFDU03 (GNU Parted 起動用)

インストールの方針

購入時のファイルシステムが FAT32 なので、次のようにしました。
  1. Windows XP のセキュリティパッチを全部当てておく。 (故障時や周辺機器の動作チェックの際に Windows で起動する必要もあると思われるので、念のため残す)
  2. 不必要なアプリケーションやファイルを全部削除。
  3. GNU Parted で C: パーティションをリサイズ。
  4. 空いた領域に Debian インストール。
  5. 最終的に Windows XP とのデュアルブートに。

インストール前の準備

ページング/ハイバネーション用ファイルの削除方法については IBM ThinkPad X24についての備忘録 を参考にさせていただきました。壁紙BMPファイルの削除もここを見て気付きました。
これで C: ドライブが 14.63GB 中 11.12GB 空きの状態になりました。 つまり Windows XP で 3.5GB 使用ということに。 余裕を見て Windows には 4.5GB 割り当てることにしました。 USB FDD から GNU Parted を起動して C: をリサイズ。

GNU Parted は USB FDD 対応の GNU Parted を利用させていただきました。

リサイズ後 Windows XP が起動することを確認。


インストール

ネットワークケーブルを挿して、 Debian の新しいインストーラ(CD-ROM版) で起動。 今回使用したインストーラは current = 20041021 版で、 ベースシステムもネットワーク経由で持ってくる sarge-i386-businesscard.iso の方を使いました。

Debian のインストーラで残りのパーティショニングを行います。 自動お任せもできますが、D: ドライブの削除もあったので、私は手動で行いました。 インストール後の fdisk -l /dev/hda はこんな感じ。

# fdisk -l /dev/hda

Disk /dev/hda: 20.0 GB, 20003880960 bytes
255 heads, 63 sectors/track, 2432 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         574     4610623+   c  W95 FAT32 (LBA)
/dev/hda2             575        2426    14876190    5  Extended
/dev/hda3            2427        2432       48195   de  Dell Utility
/dev/hda5             575         671      779121   82  Linux swap
/dev/hda6             672         914     1951866   83  Linux
/dev/hda7             915        2426    12145108+  83  Linux
/dev/hda3 は購入時に切ってあった謎のパーティションで、 容量も少ないのでとりあえず残しました。 D: は削除して Linux 用に。 ちなみに D: を削除すると、クレードルを使用しての他マシンからの Windows XP のリカバリができなくなるらしいです。 まぁどうでもいいんですが。:-) swap を 800MB ほど取ったのは swsusp 用ですが、 後述するようにハイバネーションさせると X が使えなくなるので 無用の長物状態です。

パーティショニングを終了したら後はパッケージがインストールされ、 パッケージによっては色々質問されます。 GRUB インストール時に Windows XP を検出してデュアルブートについて 質問されますが、はいはいと答えていって GRUB を MBR にインストールすれば、 GRUB からデュアルブート可能になります。

インストール直後の kernel 2.4.27 でも、 その後パッケージで入れた kernel 2.6.8 でも特に問題なく起動しました。


内蔵ハードウェア/外部インターフェース動作状況

以下、メーカ/型番の所で、lspci や dmesg 等の出力を適時引用します。
kernel 2.6.10-rc1 での lspci の出力
Debianパッケージのカーネルで起動した時の dmesg: kernel 2.4.27 / kernel 2.6.8

CPU

メーカ/型番
Transmeta Efficeon TM8600
CPU: L1 I Cache: 128K (64 bytes/line), D cache 64K (32 bytes/line)
CPU: L2 Cache: 1024K (128 bytes/line)
CPU: Processor revision 24C01101, 1000 MHz
CPU: Code Morphing Software revision 6.0.4-1-62
CPU: 20040723 20:41 official release 6.0.4#6
CPU: Transmeta Efficeon(tm) Processor TM8000 stepping 04
動作状況
Longrun
LongRun は正常に動作/制御できます。 acpidを利用してACアダプタの抜き差しでLongRunの設定を自動変更するには 以下のファイルを用意します。

NX (No eXecute)
MM70G に塔載されている Efficeon は NX 機能を持っています。 最近のカーネルは NX をサポートしていて、 High Memory Support で 64GB を選択すると有効になります。 詳しくは NX対応コード書いた人(?)のドキュメント を参照してください。 ただし NX を有効にすると XFree86 が動作しなくなります。

グラフィックアクセラレータ

メーカ/型番
ATI Mobility RADEON
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon Mobility M6 LY
動作状況
XFree86 4.3.0.1 の radeon または vesa ドライバで動作しています。 インストール時に radeon ドライバを選択できない場合は、 とりあえず vesa を選択し後で /etc/X11/XF86Config-4 を編集します。
Section "Device"
        Identifier      "ATI Technologies Inc Radeon Mobility M6 LY"
#       Driver          "vesa"
        Driver          "radeon"
EndSection
[追記 2006/01/12]
kernel 2.6.11 以降だと何故か radeon ドライバでは X サーバが動作してくれません。 vesa ドライバを使用する必要があります。 また radeon ドライバを使用しているとサスペンド復帰後テキストコンソールの表示がおかしくなるのですが、vesa ドライバでは大丈夫です。
[追記 2006/07/04]
kernel 2.6.17 からまた radeon ドライバが利用できるようになりました。 (xserver-xorg 7.0.22 + xserver-xorg-video-ati 6.5.8.0-1)

外部ディスプレイ出力

1280x1024 24bit でも出力できてます。 後述のFn+F? キーの動作状況も参照してください。

サウンドチップ

メーカ/型番
AC'97コントローラ: ALi M5455 / AC'97 CODECチップ: Realtek ALC202
[OSS]
0000:00:04.0 Multimedia audio controller: ALi Corporation M5455 PCI AC-Link Controller Audio Device (rev 03)
ac97_codec: AC97 Audio codec, id: ALG64 (Unknown)

[ALSA]
% cat /proc/asound/pcm
00-00: Intel ICH : ALi M5455 : playback 1 : capture 1
00-01: Intel ICH - MIC ADC : ALi M5455 - MIC ADC : capture 1
00-02: Intel ICH - IEC958 : ALi M5455 - IEC958 : playback 1 : capture 1

% cat /proc/asound/M5455/pcm0p/info
card: 0
device: 0
subdevice: 0
stream: PLAYBACK
id: Intel ICH
name: ALi M5455
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0

% cat /proc/asound/M5455/codec97#0/ac97#0-0
0-0/0: Realtek ALC202 rev 0

Capabilities     : -headphone out-
DAC resolution   : 20-bit
ADC resolution   : 18-bit
3D enhancement   : Realtek 3D Stereo Enhancement

Current setup
Mic gain         : +0dB [+0dB]
POP path         : pre 3D
Sim. stereo      : off
3D enhancement   : off
Loudness         : off
Mono output      : MIX
Mic select       : Mic1
ADC/DAC loopback : off
Extended ID      : codec=0 rev=1 AMAP DSA=0 SPDIF DRA VRA
Extended status  : SPDIF=3/4 VRA
PCM front DAC    : 44100Hz
PCM ADC          : 48000Hz
SPDIF Control    : Consumer PCM Copyright Category=0x22 Generation=1 Rate=48kHz
動作状況
ALSA の snd-intel8x0 ドライバまたは OSS の ali5455 ドライバで動作しています。

kernel 2.6.9 以降では、ALSA ドライバに加わった変更により 逆にちゃんと音が鳴らなくなってしまっているようです。 (2.6.8 -> 2.6.9 の ChangeLog で ALSA/snd-intel8x0 の大量変更がある、 自分で 2.6.8.1 を再構築してもちゃんと snd-intel8x0 で音が鳴る、 2.6.10-rc1 では鳴らないことから推測)
[追記 2006/01/12]
新しいカーネル(少なくとも kernel 2.6.15)ではまた ALSA でちゃんと音が鳴るようになったようです。

注意事項として、サスペンド時にドライバをアンロード/ロードしないと、 サスペンドから復帰した後に音を鳴らすとシステムが固まることがあるようです。


イーサネットコントローラ

メーカ/型番
Realtek RTL8139 系列
0000:00:0a.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
動作状況
8139too ドライバで動作しています。

無線LAN

メーカ/型番
Intersil ISL3890 Prism GT
0000:00:06.0 Network controller: Intersil Corporation Intersil ISL3890 [Prism GT/Prism Duette] (rev 01)

eth1      IEEE 802.11b/g  Mode:Managed  Frequency:X.X GHz  
動作状況
prism54 ドライバで動作しています。 別途ファームウェアをPrism54.orgから入手し /usr/local/lib/firmware/isl3890 という名前で置き、 で有効になります。

prism54 ドライバ自体は、独自高速化技術 "Prism Nitro" に対応しているので、 Prism Nitro 対応の コレガ CG-WLAP54GTV2 を購入してきました。(最近の SuperG 対応製品より安かった :-) 色々やってみた結果、Prism54.org に書いてある

iwpriv eth1 s_profile 3
iwpriv eth1 s_frameburst 4500
という設定をしなくても勝手に Prism Nitro が有効になるようです。 linux-2.6.9.tar.bz2 (36261440 バイト) を ftp で get して速度を計ってみました。
基地局のジェットモード設定4回の平均時間速度
off18.56秒1.95MB/s = 15.6Mbps
推奨14.01秒2.59MB/s = 20.7Mbps
最大14.12秒2.57MB/s = 20.5Mbps
1.3倍くらいの性能アップでしょうか。

おまけ: コレガ CG-WLAP54GTV2 を SNMP でつつく
おまけ: 内蔵無線LANを自動設定


PCカードスロット

メーカ/型番
リコー RL5c475
0000:00:09.0 CardBus bridge: Ricoh Co Ltd RL5c475 (rev 81)
動作状況
動作してます。

USB

メーカ/型番
ALi のサウスブリッジ内蔵?
0000:00:0f.0 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
0000:00:0f.1 USB Controller: ALi Corporation USB 1.1 Controller (rev 03)
0000:00:0f.3 USB Controller: ALi Corporation USB 2.0 Controller (rev 01)
動作状況
動作してます。

タッチパッド

メーカ/型番
Synaptics Touchpad
Synaptics Touchpad, model: 1
 Firmware: 5.9
 180 degree mounted touchpad
 Sensor: 34
 new absolute packet format
 Touchpad has extended capability bits
 -> multifinger detection
 -> palm detection
input: SynPS/2 Synaptics TouchPad on isa0060/serio4
動作状況
普通のPS2マウスとして認識しますが、スクロール機能等は使えません。

XFree86 では Synaptics TouchPad 用のドライバを追加すると スクロール等を始めとする色々な機能が増え、細かい設定も可能です。 Debianでは xfree86-driver-synaptics というパッケージで用意されています。 ただし /usr/share/doc/xfree86-driver-synaptics/README.gz ファイルには

Installation
------------
See the INSTALL file for detailed installation instructions.
と書いてありますが、この INSTALL ファイルがパッケージに入ってないので、 /usr/share/doc/xfree86-driver-synaptics/copyright に書いてあるページ からソースを持ってきて INSTALL ファイルを入手してください。 それに XF86Config-4 にとりあえず記述する内容などが書かれています。 あとは README にオプションの詳細や FAQ が書いてありますので、 それを参照して好みのカスタマイズをしてください。

今現在私が使用してる設定

[追記 2006/01/12]
kernel 2.6.11 以降(?)だと、マウスのデバイスとして /dev/psaux を指定すると Synaptics ドライバがデバイスを認識できません。 以下の対策が必要となります。

MOBILEスイッチ

動作状況
ACアダプタを抜いた状態で「MOBILE」側にスイッチを操作すると、 次の2つが確認できました。

Fn+F? キーの動作状況

Fn + F1 (無線LANのアンテナON/OFF)
効きます。
Fn + F3/F4 (ボリュームdown/up)
効きません。 後述のFnキー補完計画で機能を実装してみました。
Fn + F5 (外部ディスプレイへの出力切り替え)
効きます。
Fn + F6/F7 (液晶の輝度を下げる/上げる)
効きます。AC電源/バッテリー動作/MOBILEスイッチON の 3つの状態を独立して記憶してくれます。
Fn + F11 (ディスプレイのON/OFF)
効きます。
Fn + F12 (スタンバイ/休止/電源OFF などへ移行)
効きません。 acpid でも検出してくれない模様。 後述のFnキー補完計画で(別の)機能を実装してみました。
Fn じゃないけど、画面の180度回転 (コンビネーション失念)
効きません。
xev で調べたおまけ:

Fnキー補完計画

上記のように Fn+F3/F4/F12 あたりが本体(BIOS)側で特に何もケアされていないので、 OS側で面倒を見ることにします。 今回は X + ウィンドウマネージャの組み合わせで実装します。
  1. キーにシンボルを割り当てる。

    xev で調べると、

    を出力していること、およびこれらのキーには特にシンボルが割り当てられていない ことが分かります。これらのキーで何らかのアクションを行わせるために、 適当なシンボルを割り当てます。 /usr/include/X11/keysymdef.h から、普段使いそうにもないシンボルを適当に 選んでください。今回私はヘブライ語のシンボルにしてみました。B-)
    !for Fn+? SHARP Mebius MURAMASA PC-MM70G
    ! Fn+F3
    keycode 174 = hebrew_aleph
    ! Fn+F4
    keycode 176 = hebrew_bet
    ! Fn+F12
    keycode 223 = hebrew_gimel
    
    こんな感じのファイルを作って xmodmap に食わせるよう .xsession にでも書いてください。
  2. ウィンドウマネージャにアクションを追加する。

    私は qvwm を使っていますが、qvwm では PAGE コマンドを使うことで ショートカットキーとコマンドを対応付けることができます。 他のウィンドウマネージャでも多分同じような機能はあると思いますので 調べて適当に定義してください。 私は .qvwmrc に次のように書きました。

    Fn+F12 は本来は電源系の制御ですが、LOOX で使えていた音のミュート制御が 便利だったので今回はそれにしてしまってます。 後述のACPIの所に書いてるサスペンド用スクリプトを sudo 経由とかで呼び出せば サスペンドの機能にできます。

    [ShortCutKeys]
    hebrew_aleph None "PAGE[0, 0, amixer3] /usr/local/sbin/amixer3 down"
    hebrew_bet   None "PAGE[0, 0, amixer3] /usr/local/sbin/amixer3 up"
    hebrew_gimel None "PAGE[0, 0, amixer3] /usr/local/sbin/amixer3 mute"
    
  3. 音量調整するコマンドを用意する。

    ウィンドウマネージャから呼ばれるコマンド、上記の例でいうと /usr/local/sbin/amixer3を作成します。 必要な機能は「音量アップ」「音量ダウン」「ミュート」です。 音量制御のため、内部から amixer (ALSA用) または aumix (OSS用) を呼び出しています。 これらも別途インストールしておいてください。

    ALSA (amixer) はミュート機能があるのですが、OSS の方はいくつかミキサーソフトを 見てみましたけど「ミュート = 音量を単に 0 にしてしまうだけ」のようだったので、 「現在のボリュームを一旦ファイル ~/.aumix.mute に保存し、ミュート解除の 時にそれを読み出す」という方法で実装しました。

以上で、ALSA および OSS 環境において、Fn+F3/F4/F12 でボリューム制御が できるようになりました。なかなか便利。 同じ要領で他のコマンドを色々割り当ててみるのも面白いでしょう。

ACPI 動作状況


acpid が検出するもの

カーネル起動時(デバイスドライバ組み込み時)の出力は次のようになっています。 Lid Switch は液晶パネルの開閉のことです。
ACPI: Battery Slot [BAT0] (battery present)
ACPI: AC Adapter [AC] (on-line)
ACPI: Processor [CPU0] (supports C1 C2 C3)
ACPI: Power Button (FF) [PWRF]
ACPI: Lid Switch [LID0]
ACPI: Thermal Zone [THRM] (55 C)
多分ここに Fn+F12 に該当するものが出てこないと、ACPI で Fn+F12 を使った アクションを設定できないのではないかと思われます。

もっとも X 上ではキーイベントは検出できてますので(keycode 96 → Fn 併用で 223 に)、 特定のキーイベントでスクリプトを実行する機能があるウィンドウマネージャや デーモン等を利用すれば同等のことは実現できます。 (実際にFnキー補完計画と題してやってみました)


ハイバネーション

swsusp を利用する設定をすれば、ACPI でのハイバネーション自体は動作します。

ただしハイバネーション後、Xサーバが正常に起動しない(ハングする)ことを 確認しています。 一旦 Xサーバ終了→ハイバネーション→復帰後 Xサーバ起動、とかも無理です。

[追記 2007/05/21]
動作させることは可能です。詳しくは 備忘録 を参照してください。


サスペンド

ACPI でのサスペンドは可能です。

ただし一部のデバイス(prism54 等)がサスペンドに対応してないようで、 ドライバが有効な状態だと「デバイスをサスペンドできない」みたいな メッセージが出てサスペンドしません。 よってサスペンドを行うスクリプト内でデバイスドライバを外す等の細工を する必要があります

今現在私が使用してるサスペンド用スクリプトはこんな感じで、 電源ボタンを押すとサスペンドを行うようにしています。 (標準では電源ボタンを押すと shutdown が実行され、電源が落ちます)

なおサスペンドからの復帰は、パッケージの kernel 2.6.8 では電源ボタンでのみ 復帰できますが、私が作った 2.6.10-rc1 だとキーボードを触っても復帰します。 何が違うのかはよく分かってません。

[追記 2006/01/12]
新しいカーネル(少なくとも kernel 2.6.15)ではサスペンドの仕様が変更になっており、今まで

echo -n 3 > /proc/acpi/sleep
だった部分を
echo -n mem > /sys/power/state
にする必要があります。 詳しくは Documentation/power/states.txt を参照してください。

ACアダプタ/バッテリー

/proc/acpi 以下のファイルから状態を取得できます。

拙作の qvapm を ACPI 対応にした qvacpi を作成しました。 とりあえず動いてます。 ソース / スクリーンショット→qvacpi スクリーンショット
(APM版の qvapm のソース)


突っ込み・指摘助言などがありましたら 掲示板までお願いします。
hiramoto@flatray.com