8月 072019
 

最近の FreeBSD は BIOS では PC の機能が使えなくなってきているものがちらほら出てきて、いよいよ UEFI に変えるべきかと思えてきた。
僕の持っているちょっと古いが、今でも現役の ThinkPad E145 を BIOS で利用するのは FreeBSD/amd64 10.1-RELEASE が一番良かった。その後 10.3-R -> 11.2-R にしてみると LCD の明るさが変えられなくなったりとか。
最近 11.3-R にしたら suspend して resume すると /dev/psm0 が『もう使えないよ。』みたいなエラーを吐きやがる。

psm0: failed to get status (doinitialize).
psm0: failed to enable the device (doopen).
psm0: failed to enable the device (reinitialize).

 
こんな感じ。 resume 後はもう USB なマウスを使うしか手がない。 /dev/psm0 だけでなく /dev/sysmouse (こっちはタッチパッド) も使えない状態。 moused も hald も悲しい状態。

/dev/psm0 みたいなのは BIOS べったりなので OS 的に UEFI 対応が進む FreeBSD ではいよいよ使えなくなってきているのだろうなぁ。などと、思い、それじゃ。と、いうことで UEFI で起動してみるかぁ。と、なったのであります。

 
以前、このブログでは ThinkPad E145 を BIOS+MBR の組み合わせで Windows8 と FreeBSD のマルチブートについてエントリを書いているのですが、今回はいよいよ UEFI+GPT でのブートになります。
当時 (上記 URL の記事は 2013 年 09 月に書いていますね) は、マルチブートに関する前例が中々見当たらず、インターネット上にもそれらしい記事がなかったのですが、最近は探せばちらほらと見つかるようになってきましたね。それは非常に良いことです。

と、いうことで僕もトライ。今回は、自分の今後のことも兼ねて、メモ的にその手順について書き留めておきます。まぁ、作業はほとんどが Windows10 上で行うんですけどね。

おおまかな手順は以下です。

0. Windows の回復 USB メモリの作成
1. Windows10 をまずインストール。もしくはパーティションを分割
2. FreeBSD 用 EFI パーティションを作成
3. FreeBSD/amd64 12.0-RELEASE をインストール
4. bcdedit でマルチブート設定
5. EFI パーティションにファイル設置
6. 電源投入で FreeBSD 起動

だいたいこんな感じでしょうか。では、はじまりです。

一応、断っておきますが、0 番目の「回復 USB メモリ」はもしものためにちゃんと作成しておきましょう。僕は Windows10 環境を何回もぶっ飛ばしていたりしますが、もし、そうなっても僕は責任持てません:-|。

 
1. Windows10 のインストール
新しい PC を買ってきたときや、今使っている PC には Windows10 が最初から入っていると思われます。
コントロールパネル -> コンピュータの管理 -> ディスクの管理 で、Windows10 に割り当てられているパーティションをちっこくしてあげる。詳細は書きませんけども。
新規に Windows10 をインストールする場合は C:\ を好きなサイズにして FreeBSD をインストールするスペースを残しておきます。
まず最初に Windows10 をインストールする。もしくは Windows10 がインストールされている状態。と、いうのが重要です。

 
新規に Windows10 をインストールする場合、ブート用の USB メモリを作成するところから始める人がいるかもしれませんが、僕の場合、今回は Windows のアプリで rufus と、いうのを利用しました。

バージョンにもよるかもしれませんが、 Windows10 の ISO ファイルは rufus に食わせると USB の起動イメージを BIOS+MBR で作るか UEFI+GPT で作るか指定できます。もしこの時に UEFI+GPT で作成した場合には NotePC の BIOS 設定は UEFI モードにしないとイントールできません。
Widowos10 の USB の起動イメージを BIOS+MBR で作ると、インストールした Windows10 は BIOS+MBR になってしまいます。今回は UEFI+GPT で USB 起動イメージを作成することになります。

作成した USB 起動イメージに合わせるために BIOS の設定を確認しましょう。 BIOS の設定については以前書いています。そちらを参考にしてください。

さてと。これで Windows10 のインストールが無事に完了しました。

 
2. FreeBSD 用 EFI 領域の確保
FreeBSD を ISO イメージから起動してメニューの [install] を選択して進めていくと、 Windows10 がインストールされているにも関わらず FreeBSD しかブートしない NotePC になってしまいます。 bsdinstall を利用して (それはつまりは FreeBSD をフツーにインストールする。と、いうことです) FreeBSD をインストールすると既に存在する Windows10 の EFI パーティションを上書きしてしまうからなんですね。

フツーの人 (それは takawata さん みたいにマニアではない人のこと;-) は FreeBSD はフツーにインストールすると思います。

しかし、フツーにインストールすると既にある EFI パーティションを上書きして潰してしまうので、新規に 100MB 程 EFI パーティションを作成してあげます。

Windows10 は既に起動しているはずなので、以下のコマンドを管理者権限の DOS プロンプトから実行します。

c:\ diskpart
DISKPART> list disk
DISKPART> select disk 0
DISKPART> list part
DISKPART> 
DISKPART> create partition efi size=100
DISKPART> format quick fs=fat32 label="FreeBSD-EFI"
DISKPART> assign letter="S"
DISKPART> 
DISKPART> list vol
DISKPART> list part
DISKPART> exit

 
簡単にコマンドイメージだけ書きました。

1). diskpart.exe を管理者権限で実行
2). 対象とするディスク番号を選択
3). ディスクのパーティション状況を確認
4). いよいよ create partition で EFI パーティションを 100MB で作成
5). fat32 でフォーマットして、ラベルは FreeBSD-EFI とする (お好きな文字列をどうぞ)
6). assign letter=”S” でおまじない;-)

 
これで FreeBSD の bsdinstall がアクセスする EFI パーティションが作成できました。 FreeBSD を何回インストールしても、インストール後に NotePC を再起動すると Windows10 が起動する状態になります。

上記 takawata さん の URL ではこの工程がないので Windows 側の EFI パーティションを守るために bsdinstall を利用しないで make buildworld しているんですね。あ。 takawata さんは『マニア』なのかもしれないですが、 make buildworld が好きな人なのですね。きっと;-)。

それにしても bsdinstall が既存の EFI パーティションを上書きしてしまうのが問題なんですね。メニューで上書きするかしないか選択できるようにすれば良いのに・・。

と、いうことで次は FreeBSD のインストールです。

 
3. FreeBSD のインストール
今回は FreeBSD-12.0-RELEASE-amd64-bootonly.iso をチョイスしました。もう、面倒なので Windows10 上で、やはり rufus を使い USB 起動イメージを作成しました。
FreeBSD の場合は、今度は BIOS+MBR でしか作成できません。なので、FreeBSD インストール時には今度は BIOS の設定を Legacy モードにする必要があります。

あとはフツーにインストール。パーティション分割のところで GPT を選択し、更に [Manual] を選択してHDD (最近は SSD か;-) の空き領域にインストールします。

インストールが完了してリブートします。 2. のところで書いた通り、先に FreeBSD 用 EFI パーティションを作成していると bsdinstall を利用しても Windows10 側の EFI パーティションはつぶれてないので、この時点で再起動後は Widnows10 が起動するはずです。
もし FreeBSD が起動してしまった場合は Windows10 がつぶれてしまった。と、いうことです。回復 USB メモリなどから Windows10 を復旧しましょう。

 
4. bcdedit でマルチブート設定
FreeBSD インストール後に再起動したら Windows10 が起動しましたが、インストールした FreeBSD はしっかり残っております。起動させるために Windows10 側で bcdedit を利用してエントリを作成してあげます。

以前、このブログでも BIOS+MBR 環境のときに bcdedit を利用して、Windows Boot Manager から Windows と FreeBSD をブートしていましたが、 UEFI+GPT の場合は Windows Boot Manager が利用できません。 UEFI+GPT でのマルチブート環境は Firmware Windows Boot Manager を利用してブートすることになります。

そもそも「Firmware Windows Boot Manager」とはなんぞや?と、なるのですが、簡単に言うと BIOS(UEFI) のブートセレクタです。
例えば HDD からブートするとか、CD や USB メモリからブートするとか、選択する画面は Fn キーを押してメニューを出しますが、それをどうやら「Firmware Windows Boot Manager」というようです。
CD や USB・HDD からブートするのと同じレベルのメニューに “FreeBSD” や “Windows Boot Manager” メニューが存在している状態になります。

ThunkPad の場合 (Lenovo の PC の場合) は電源投入時に F12 キーを押すとブートセレクタが現れます。メーカによっては F2 キーだったり F8 キーだったりするかもしれません。

これから、このブートセレクタに bcdedit でメニューを登録していきます。

 
まず、管理者権限の DOS プロンプトでフツーに bcdedit と叩くと「Windows Boot Manager」のメニュー画面の情報が出力されます。僕の知っていた bcdedit はこの、オプションなし状態の出力でした。

「Firmware Windows Boot Manager」の項目を表示するには以下のコマンドを打ちます。

C:\Windows\system32> bcdedit
C:\Windows\system32> 
C:\Windows\system32> bcdedit /enum firmware
C:\Windows\system32> bcdedit /enum all

 
/enum オプションをつけて、そのあとに firmware とすると「Firmware Windows Boot Manager」の項目を表示します。 all と打つと「Firmware Windows Boot Manager」と「Windows Boot Manager」の全ての項目を表示します。ここ、重要ですからね;-)。

まず、「Firmware Windows Boot Manager」に FreeBSD のメニューを追加します。

C:\Windows\system32> bcdedit /copy "{bootmgr}" /d "FreeBSD"
*** ここで UUID が表示される ***
C:\Windows\system32> bcdedit /set {UUID} device partition=\Device\HarddiskVolume2
C:\Windows\system32> bcdedit /set {UUID} path \EFI\FreeBSD\Boot\bootx64.efi
C:\Windows\system32> bcdedit /set fwbootmgr displayorder {UUID} /addfirst

 
以下のような雰囲気です。

1). /copy で “FreeBSD” というエントリを作成。このときに FreeBSD の UUID が割り当てられる
2). エントリ中に device を設定 (省略可)
3). エントリ中に path を設定
4). エントリ中の順番を設定

最後の 4). のエントリについて先に説明します。 /addlast で最後に追加することもできます。その場合 F12 キーを押さない場合は Windows10 が起動します。 /addfirst を指定すると先頭に追加され、 F12 キーを押さない場合は FreeBSD がブートするようになります。お好みで;-)。

上記コマンドを投入したあと、再度 bcdedit /enum firmware を叩いてみましょう。以下は抜粋です。

C:\Windows\system32> bcdedit /enum firmware

ファームウェアのブート マネージャー
--------------------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {dd655fef-3160-11e9-8f42-a6c75caf7b54} <- 先頭に追加
                        {dd655fe9-3160-11e9-8f42-a6c75caf7b54}
                        {dd655fea-3160-11e9-8f42-a6c75caf7b54}
timeout                 2
<--- 略 --->
Windows ブート マネージャー                                       <- 今回追加
--------------------------------
identifier              {dd655fef-3160-11e9-8f42-a6c75caf7b54}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\FreeBSD\Boot\bootx64.efi
description             FreeBSD
locale                  ja-JP
inherit                 {globalsettings}
badmemoryaccess         Yes
default                 {current}
resumeobject            {dd655fed-3160-11e9-8f42-a6c75caf7b54}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 30
<--- 略 --->

 
このあとに説明しますが、UEFI+GPT の場合、OS をブートさせるためには EFI パーティションにファイルを一個置いてあげる必要があります。FreeBSD の場合は、インストールされている FreeBSD の /boot/boot1.efi を上記エントリの device と path に指定したところに正しく置いてあげる必要があります。

記載内容を間違えると「Firmware Windows Boot Manager」で “FreeBSD” を選択しても何もアクションが起きません。

そして、この内容が、BIOS+MBR の頃のように

device                  partition=c:\
path                    \bootx64.efi

 
などと記載していると「Windows Boot Manager」側で認識して、ブートすると 0x000007d みたいなエラーが出力されます。

記載した内容と設置した場所を正しく一致させましょう。

 
ちなみに作成したエントリを消す bcdedit は以下になります。書いては消して、また書いて、ブートしないのでまた書いて・・。などと、いうとき用です;-)。

C:\Windows\system32> bcdedit /delete {UUID} /f
C:\Windows\system32> bcdedit /set {fwbootmgr} displayorder {UUID} /remove

 
一行目は bcdedit /copy “{bootmgr}” で作成したエントリ全てを消すコマンドです。このコマンドを実行すると「ファームウェアのブートマネージャー」からも削除されます。
二行目のコマンドは「ファームウェアのブートマネージャー」から削除するときのみ利用するコマンドです。例えば /addlast で一番最後に登録したけど、やっぱり /addfirst で先頭に登録したい。などとうとき、二行目のコマンドを実行したあとに再度 bcdedit /set fwbootmgr displayorder を叩く。と、いうときに利用します。

bcdedit で「Firmware Windows Boot Manager」に登録するコマンドはこんな感じでしょうか。

 
5. EFI パーティションにファイル設置
さてと。あと少しで環境が整います。 EFI パーティションに FreeBSD がブートするための boot1.efi を書き込んで上げます。他の PC 上で動作している FreeBSD から /boot/boot1.efi を持ってきて Windows10 側に保存して上げましょう。

まず、diskpart.exe でボリュームの確認です。

c:\ diskpart
DISKPART> list disk
DISKPART> select disk 0
DISKPART> list vol
  Volume ###  Ltr Label        Fs    Type        Size     Status     Info
  ----------  --- -----------  ----  ----------  -------  ---------  --------
  Volume 0         回復           NTFS   Partition    499 MB  正常
  Volume 1     C                NTFS   Partition    213 GB  正常         ブート
  Volume 2                      NTFS   Partition    574 MB  正常
  Volume 3                      FAT32  Partition    100 MB  正常         システム
  Volume 4         FREEBSD-EFI  FAT32  Partition    100 MB  正常         非表示
DISKPART>

 
EFI バーティションは Windows10 が作成したもの (Volume3) と FreeBSD インストール時に作成したもの (Volume4) と二つありますが、どっちを利用しても問題ありません。

Windows10 で EFI パーティションをマウントするためには以下のコマンドを利用します。

C:\Windows\system32> mountvol
C:\Windows\system32> mountvol z: /S
C:\Windows\system32> mountvol z: /D
C:\Windows\system32> mountvol z: \\?\Volume{874c2b19-1ada-4089-9a27-de7f61f38177}\
C:\Windows\system32> mountvol z: /D

 
mountvol.exe コマンドですが、オプションなしで実行するとヘルプと、下のほうにボリュームの一覧が表示されます。
Windows10 が作成した EFI パーティションを z:\ に mount する場合には二行目のコマンドを打ちます。
FreeBSD のインストール時に作成した EFI パーティションをマウントするには四行目のコマンドを利用します。 mountvol のオプションなしで実行した場合に下のほうに「現在のマウント ポイントとボリューム名の考えられる値:」で表示されたマウントポイントの *どれか* を指定します。
diskpart.exe の list vol や list part と見比べてじっくりと判断してください;-)。

ちなみに mountvol z: /D はumount するオプションです。

 
今回は FreeBSD インストール時に作成した EFI パーティションは利用せず、Widnows10 側の EFI パーティションを利用します。

C:\Windows\system32> mountvol
C:\Windows\system32> mountvol z: /S
C:\Windows\system32> z:\
z:\> mkdir EFI\FreeBSD\Boot 
z:\> cd EFI\FreeBSD\Boot 
z:\> copy c:\boot1.efi ./bootx64.efi
z:\> dir
z:\> c:\
C:\Windows\system32> exit

 
mountvol で Widnows10 の EFI パーティションを z: に mount します。 z:\ に行くと既に EFI というディレクトリが掘られています。そこに FreeBSD 用のディレクトリを作成し、c:\ に置いた boot1.efi という FreeBSD から引っこ抜いてきたファイルを bootx64.efi として保存します。
途中、ls ではなく dir コマンドで色々確認しつつ作業を行ってください。 設置場所は bcdedit コマンドで指定した device と path の各オプションと一致していることが重要です。

ちなみに mountvol で EFI パーティションをマウントしていると bcdedit /enum firmware で確認した場合の device パラメータの表示が変わってきます。 mountvol で mount している状態のほうが確認しやすいです。

 
さてと。これで全ての準備が整いました。Windows10 側でリブートしましょう。 /addfirst を指定した場合は NotePC 再起動後にスルスルっと FreeBSD が起動するようになります。

やったっ!!

もし FreeBSD が起動しなかった場合は bootx64.efi の設置場所が bcdedit で指定したものと合っているかじっくりと確認してください。

僕の場合ですが、大失敗・・。 copy c:\boot1.efi ./bootx64efi とやっていました・・。orz
これじゃ起動しません。rename bootx64efi bootx64.efi として事なきを得、無事に FreeBSD が起動したのでありました。ふぅ。そして、パチパチパチ。

 
6. 電源投入で FreeBSD 起動
さてと。僕の場合 ThinkPad E145 は FreeBSD メインで利用し、時々 Windows10 を利用する形態なので bcdedit /set fwbootmgr displayorder {UUID} /addfirsst で登録しました。これだと電源投入後はサクっと FreeBSD が起動します。

Windows10 を起動したいときには NotePC の電源投入後に F12 キーを押してブートセレクタを表示して「Windows Boot Manager」を選択すると Windows10 が起動するようになります。

 
さてと。最後に FreeBSD 12.0-RELEASE についてちょっと書いておきます。

今まで僕はずっと BIOS+MBR な FreeBSD しか使ったことがなかったのですが、今回初めて UEFI+GPT な FreeBSD を使うことになります。
一番上で書いた /dev/psm0 が resume 後に psm0: failed to get status となって使えなくなった事象は解決しました。やっぱり FreeBSD の ACPI 周りはどんどん UEFI に傾倒して行っているのね。と、再確認できました。

あと、ThunkPad E145 など AMD のグラフィックスチップ使っている PC 限定かもしれませんが、グラフィックスチップは graphics/drm-fbsd12.0-kmod で認識しています。今までは radeonkms.ko を指定していましたが、これを利用するとカーネルパニック頻発です。 amdgpu にしたら安定しました。 UEFI ブートとは相性が良くないみたいですね。 pkg-message にも書かれています。

しかし、 UEFI にしても acpi_video.ko が使えない状態なのは変わらず。なので、ディスプレーの明るさは変えられません。 AMD グラフィックスチップの悲劇か・・。

 
とまぁ、ツラツラと書いてみましたが UEFI+GPT にした PC において Windows と FreeBSD のマルチブートについて書いてみましたが、大きな点としては

1). bsdinstall は Windows 側の EFI パーティションを潰してしまう
2). 「Windows Boot Manager」ではなく「Firmware Windows Boot Manager」でマルチブートを実現

でしょうかね。

1). のほうは僕も過去に実はずいぶんとハマりました。どうして Windows10 が起動しないのだっ!!?? みたいな・・。知っている人はちらほらいるみたいですが、僕は Slack のとあるコミュニティで FreeBSD のエラい人に教えてもらいました。 FreeBSD のインストールのために EFI パーティションを一個作成する。ってことがミソですね。

ちなみにですが、/boot/boot1.efifat が、ここで書いてきた FreeBSD インストール前に作成した EFI パーティションの中身です。
bsdinstall が Windows10 側の EFI パーティションを boot1.efifat で上書きしています。 FreeBSD インストール前に EFI パーティションを作成すると bsdinstall は FreeBSD インストール前に作成した EFI パーティションに対して /boot/boot1.efifat が書き込まれ Windows10 側の EFI パーティションは無傷です。

mountvol z: \?\hoge\ で FreeBSD 側 EFI パーティションも mount できるので確認してみるのも良いかも。

2). のほうはある意味目ウロコですね。 Windows Boot Manager を捨ててその一個前のフェーズで FreeBSD をブートしてしまう。 grub とか、他のブートマネージャは不要で bcdedit でなんとかしてしまう。ってことになりますね。

FreeBSD インストール前に EFI パーティションを一個作って、 bcdedit /enum firmware のコマンド群で制御。

この二つが今回は大きな収穫でした。これで UEFI な PC でもマルチブートは大丈夫っ!! 新しい NotePC 買おうかなー;-)。

3月 012015
 

最近はほとんどの NotePC にカメラが付いていて Windows とかだと Skype しよう。 Mac だと FaceTime しよう。などと言っていますが、普段はほとんど使わない(と、僕は思う)んだけど、実際にはどうなんでしょうか?

そんな感じの標準装備のカメラですが OS に FreeBSD を利用していた場合にどのような目的でどう使う? ってか、その前に「ここに付いているカメラは FreeBSD で動くの?」などと思ってしまうのですが、今回は実際に NotePC に付いているカメラを FreeBSD で利用してみるとこにしましょう。

 
今回登場する NotePC は僕の持っている ThinkPad Edge e145 です。このブログには何回か登場しているのですが FreeBSD がバリバリ動作しています;-)。この ThinkPad Edge e145 も最近の NotePC のトレンドを追いかけているようで、ディスプレーの上にカメラが付いています。

今回はこのカメラを利用して色々やってみたいと思います。もしかしたら、ネタ的にはもう既に枯れているかも・・f(^^;;。

 
1). カメラを認識させる
最近の NotePC に付属のカメラはほとんどが USB に接続されているようですね。 pciconf -lv とか usbconfig list コマンドを叩き、デバイス的に、どこにカメラが接続されているか確認しましょう。

 # usbconfig list
    :
ugen4.2: <Integrated Camera Vimicro corp.> at usbus4, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (256mA)
    :

 
ThinkPad Edge e145 の場合は USB の ugen4.2 として認識されているようですね。と、いうことでこいつを正しいデバイスとして認識させてみましょう。

 
2). デバイスドライバのインストール
FreeBSD の純正デバイスドライバというのは存在してないのですが、 Linux 方面で開発されたキャラクタデバイスを読み込むドライバを FreeBSD に対応させた Cuse4BSD を利用します。 ports 的には multimedia/cuse4bsd-kmod になります。
まず、これをインストールし、続いてキャラクタデバイスをビデオデバイスとして認識させる webcamd をインストールします。 ports 的には multimedia/webcamd になります。まぁ、 webcamd を make install すると関連性で cuse4bsd-kmod もインストールされますが;-)。

そして multimedia/cuse4bsd-kmod を make install したときにインストールされた cuse4bsd.ko を kldload します。

# kldload /boot/modules/cuse4bsd.ko

 
カーネルモジュールをロードしたあとに wbecamd を起動し /dev/video0 として USB カメラを認識させます。オプションに USB 接続のカメラの USB のデバイス名を指定します。

# webcamd -d ugen4.2
Attached to ugen4.2[0]
Creating /dev/video0
^Z
中断
# bg
# ls -l /dev/video0
crw-rw---  1 webcamd  webcamd  0x82 Feb 28 26:14 /dev/video0
# chmod 666 /dev/video0

 
webcamd を起動すると正しく動作する USB カメラであれば /dev/video0 が生えてきます。
その後、一旦バックグラウンドにほーり投げてパーミッションを確認します。今回は一般ユーザでも利用したいので 666 に変更しています。デバイス生成時にバーミッションを変更したい場合には /etc/devd.conf におまじないを書いてください。ここでは割愛します;-)。

以上で準備は完了です。

 
3). まずはローカルでカメラを利用してみる
/dev/video0 が生えてきたので、実際にカメラに写るモノを表示させてみたいですね。そんな時は pwcview を利用します。 ports 的には multimedia/pwcview になります。
こいつを make install したあとに特にオプションも付けずに起動すると X11 上にウィンドが現れてカメラから映る景色が表示されると思います。

しかし、ローカルな FreeBSD の X11 の画面にカメラから映る景色が表示されても「だから何?」で終わってしまいますよねf(^^;;。
僕自身もまさしくそのとおりでして。ただ単に「あ。 cuse4bsd.ko と webcamd でデバイスを認識したのね。ふーん。すごいね。いじょ。」みたいな・・f(^^;;。

この写真はまさしくそんな感じで、 ThinkPad Edge e145 上の FreeBSD で KDE4 が動いていて、そこで pwcview を起動させた状態です。

IMG_0968_NotePC_Cam_1

ディスプレーの上にカメラがあるのですが、その横にある黄緑色の LED が光っております。カメラが Ready 状態ですねぇ;-)。

と、いうことで何か別の利用方法を考えてみることにしましょう。

あ。 chmod 666 /dev/video0 しましたが、これしないと一般ユーザで起動する pwcview では 画像が読み込めない状態になります。

 
4). リモートからカメラの映像を確認する
ローカルな FreeBSD の X11 に画面が出力されたので、リモートの FreeBSD から ssh -CY し、手元の X11 に pwcview を表示させればいんじゃね? えぇ。まさしくそのとおりですね。それだとリモートの X11 にカメラに映された映像が表示されます。それもひとつの案ですね;-)。

今回は http で画像を転送してみましょう。 ports から mjpg-streamer をインストールします。 ports 的には multimedia/mjpg-streamer になります。 make config は default の設定で良いです。まぁ、強いて言えば “Linux-UVC V4L2 plugin” を有効にしてインストールしましょう。

インストールしたものの中で重要なのはプラグインがインストールされた場所でしょうか。 /usr/local/lib/mjpg-streamer/ の中を覗くと .so なファイルが入っていますが mjpg-streamer を起動するときに利用するプラグインになります。

では実際に起動してみましょう。

$ mjpg_streamer -i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'

 
/dev/video0 は chmod 666 しているので一般ユーザ権限で起動できます。

-i でカメラ側のオプションを指定します。 input_uvc.so プラグインを利用し、デバイスは /dev/video0 から入力します。
-o で出力側のオプションを指定します。 output_http.so プラグインを利用しコンテンツは /usr/local/www/mjpg-streamer にあることを指定します。
-o に output_file.so を指定するとカメラに写ったモノはファイルに出力してくれるのでしょうなぁ。僕は試していませんがf(^^;;。

ちなみに /usr/local/etc/rc.d/mjpg_streamer という起動スクリプトがインストールされるのですが、こいつは -i のオプションを指定する部分が無いんですよね。 rc.conf.local には以下のように書くと良いかな。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -w /usr/local/www/mjpg-streamer'"

 
さてさて。あとはウェブブラウザで http://localhost:8080 とかリモートのマシンからアクセスしてみるとそれらしいウェブサイトが表示されると思います。

ちなみにポート番号を変えたい場合には以下のように設定するが良いです。

mjpg_streamer_enable="YES"
mjpg_streamer_flags="-i 'input_uvc.so -d /dev/video0 -y' -o 'output_http.so -p 8081 -w /usr/local/www/mjpg-streamer'"

 
こんな感じで任意のポートに変更できたりします。

ただ、悲しいかな・・。 mjpg_streamer は IPv6 には対応していないようですねぇ。ソースコードの plugins/output_http/httpd.c の socket(PF_INET, …); の部分を書き換えると IPv6 対応になるかなぁ?暇なときにいじってみよう。

さてと。実際に表示される動画ですが、皆さんの目で確認してみてください;-)。
左のメニューから Static を選択すると写真が、 Stream を選択すると動画が流れ始めます。
僕の ThinkPad Edge e145 のカメラは pwcview ではまぁ、そこそこ綺麗に見えるのですが mjpg_streamer で見ると多少ちらつきますね。あと、ブラウザ側の PC の負荷が高くなるかな。

 
と、いう感じで NotePC に付いていたカメラが FreeBSD からでも利用できることが確認できました。しかもそのカメラがリモートからアクセスできて閲覧もできることが確認できたので、これで利用頻度がいっきにアップするのでは無いかと思われます。嬉しいことですね。

ただ、音を飛ばす時にはもっと別の技が必要になりそうな気がしますが、それはまた別の機会にでも:-|。

あと、カメラが付いてない FreeBSD がインストールされた PC には手元にある USB カメラを色々付けてみて cuse4bsd-kmod と webcamd で動作するか確認して見るのもよいかと思います。
もし動作する USB カメラだった場合、フツーの自作 PC にインストールした FreeBSD でも今回の組み合わせでカメラが利用できるようになるかと思われます。

ちなみに、僕は以下の二つの USB カメラを持っているのですが、こいつらをデスクトップの FreeBSD で利用してみました。

IMG_2228_NotePC_Cam_2

左側の白いのは FreeBSD というか webcamd で認識してくれませんでした。以下のようなメッセージが出力されます。

# webcamd -d ugen0.2
webcamd: Cannot find USB device

 
右側の黒いのは赤外線付きで暗いところでも良く見えるカメラなのですが、こいつは pwcview では動きましたが mjpg_streamer では動きませんでした(砂の嵐が表示されます)。
カメラによって動作が多少違うようですね。

 
と、いうことで、今回は NotePC に標準で付いているカメラで遊んでみました。 mjpg_streamer がちゃんと動いてくれると、利用価値は上がりそうですね。 また、 mjpg_streamer に変わる何か別のアプリを見つけてきて、それを試してみるのも良さそうですね。何か良い ports をご存じの方いましたら教えて下さい;-)。

また、最近流行の Raspberry Pi を FreeBSD/ARM で起動して USB カメラを接続し今回の組み合わせを利用すると、IoT な監視カメラができるかもしれません。

バッテリ運用で Raspberry Pi+USB Camera+FreeBSD+cuse4bsd-kmod+webcamd+mjpg_streamer+Wi-Fi な状態のヤツをラジコンカーに積んで走らせたら、録画ではなく、リアルタイムで動画が堪能できるような気がします。

面白そうだ・・;-)。

11月 182013
 

連チャンで ThinkPad e145 のネタですみません。 FreeBSD ネタはこれが最後です。無事に suspend/resume ができることを確認しました。

前回のエントリ「FreeBSD で suspend/resume するかの確認方法。
前々回のエントリ「ThinkPad Edge e145 で利用する FreeBSD。

上記二つのエントリで「あれ? suspend/resume が動かないなぁ。」とか思っていたのですが、色々見なおしたら無事に動作するようになりました。見なおした点は以下の通り。

・カスタムカーネル
・/boot/loader.conf
・/etc/sysctl.conf

カスタムカーネルと /boot/loader.conf はまぁ、ほぼ連動しているという気がするのですが、それ以外にも /etc/sysctl.conf を見直しました。これらの設定は 9.2-RELEASE が動作していた Thinkpad X100e から引き継いだ情報だったのですが、同じ設定内容では e145 は suspend/resume しない。と、いうことですね。

上記三つのファイルを以下の URL に置いておくのでもし良かったら参照してみてください。

カスタムカーネルコンフィグ
/etc/loader.conf
/etc/sysctl.conf

色々なファイルを消したり書いたり、色々なパラメータを追加したり削除したりを繰り返したのですが、上記の設定で安定して suspend/resume するようになりました。カーネルモジュールのロードではなく kenv などの設定のほうだと思っているんですけども。
実際に的確に原因を特定したわけではありませんが、僕的には hw.pci.enable_io_modes などが怪しいのかなぁ? とか思ったりもしたのですが、本当に特定はできていません。

 
resume から返って来た FreeBSD ですが、比較的簡単な問題点が二点。

・サスペンド時には X 上で動作していたマウスがレジューム後には動作しなくなります。/etc/rc.resume 内で /etc/rc.d/moused restart すれば良いでしょう。
・レジューム後に画面がやたらと明るくなってしまいます。 Fn+F7 で暗くしてあげてください。
・KDE4 を利用している人は「電源の管理」にサスペンドの情報が渡らなくなりました。 KDE4 側で自動休止とかできなくなったのがちょっと悲しいかな。

いじょ;-)。

と、いうことでこれで FreeBSD をバリバリ利用できる NotePC になりました。新製品で出たばかりの ThinkPad Edge e145 ですが、無線 LAN とか SD Card Reader とか動かない機器もありますが、まぁ、ヨシとしておきましょう。グラフィックスは vesa ですけど、驚くほど速く動作します;-)。

僕的には X100e に続いて中々使える NotePC。 になりそうです。

11月 172013
 

以前のエントリで「ThinkPad Edge e145 で利用する FreeBSD。」というエントリを書いたのですが、その中で動作するものとして suspend/resume と書いていますが、あれ? 当初は確かに suspend/resume していたのですが、どうも最近しなくなりました。 orz

どうして動作しなくなったのかについては現在確認中なのですが・・。

現在インストールしているバージョンは FreeBSD/amd64 9.2-RELEASE-p1 です。こいつはカスタマイズカーネルで起動しているのですが、他にも以下の要領で色々試してみました。

・カスタマイズカーネルでそ /boot/loader.conf でkldload した状態
・カスタマイズカーネルで kldload しない状態
・GENERIC カーネルで /boot/loader.conf でkldload した状態
・GENERIC カーネルで kldload しない状態

残念ながら全ての状態において resume しませんでした・・。orz。

おかしいなぁ。インストール直後は suspend/resume していたよなぁ。とか思い、 メモリスティク用イメージを作成してブートして確認してみました。
FreeBSD 上でメモリスティグを作成する場合は以下の手順になります。

# dd if=FreeBSD-9.2-RELEASE-amd64-memstick.img of=/dev/da0 bs=10240

 
作成した USB メモリで FreeBSD をブートして INSTALL モードではなくコマンドブロンプトを出したあとにすかさず /usr/sbin/acpiconf -s3 とか打つんですね。すると suspend してくれます。
蓋を閉じて開けるときちんと resume してくれるので、動作的には FreeBSD/amd64 9.2-RELEASE の GENERIC カーネルでは sysctl で特に mib を変更することなく ThinkPad Edge e145 は suspend/resume してくれることが確認できました。すると、実際の利用環境においてなにか悪さしたか p1 にしたことによって正しく suspend/resume できなくなってしまったのでしょうなぁ・・。

継続して調査する所存であります。

 
と、ここまで書いたのですが、うひひ。つまり FreeBSD がブートするメモリスティック持って電気屋さんに行って、はじから(それはつまりは自分が欲しいと思っている NotePC のことですが;-)リブートしてみれば suspend/resume の確認が取れて、第一目標の NotePC が supend/resume しなければ次の NotePC で確認。とか、そこはかとなく素晴らしい技が使えるのでは無いでしょうか:D:D:D。

くれぐれも先に店員さんにヒトコト声をかけてからブートしたほうが良いとは思いますが。

けど、それで FreeBSD をネーテブにインストールしたときに suspend/resume する NotePC の情報が増えるのでそれはそれで良いことなのではないかなぁ;-)。

11月 122013
 

いやー。前回のエントリでは Windows と FreeBSD がなんとかマルチブートできる環境が構築できた。というエントリでしたが、ここでは実際に freeBSD を利用してみた感想を書いてみたいと思います。

 
1. OS のチョイス
今回は UEFI+GPT に対応していない FreeBSD/amd64 9.2-RELEASE をチョイスしました。インストール方法は前回のエントリに書いているのでそっちを参照してください。

本当は FreeBSD/amd64 10.0-BETA3 でも良かったのですが、僕の環境で利用している FreeBSD はほぼ全てが /amd64 9.2-RELEASE なんですね。何が良いかと言われれば pkgng の恩恵をごっそりと受け継げることができる。と、いうことですね;-)。

まず先に pkgng のことをちょっと書いておきましょうかね;-)。

デスクトップ PC で稼働している FreeBSD を pkgng 化して packages をドドドと作成します。2,3 の設定は以下の通り。

・/usr/ports/ports-mgmt/pkg をインストール
インストール後は pkg2ng を実行しろ。というので実行します。まぁ、新規インストールな状態なのでサクっと終わりますが;-)。

・/etc/make.conf に以下の行を追加
ここいらの設定はあちこちに書いてありますね。

WITH_PKGNG=yes

 
・packages の作成
そもそも KDE4 などの統合デスクトップ環境をインストールすると 800 個近い packages がインストールされています。インストールされたこれらを package 化します。以下はそのスクリプトです。

#!/bin/sh
pkg info | grep $1 | awk '{print "pkg create -f tbz -n -g -o /usr/ports/packages/All " $1}' | sh -x

 
一行野郎ですが、これを例えば pkg-create.sh という名で保存し、実行時には ./pkg-create.sh kde などとオプションを指定すると kde と付いた pkg info で表示される全てが packages 化されて /usr/ports/packages/All/ に格納されます。
ただ、関連性のあるプログラムまでは packages 化してくれないのであとからチマチマこのコマンドを実行する必要があるかもです;-)。

 
・packages のインストール
新しくインストールした ThinkPad e145 上の FreeBSD は同じく pkgng 化したあとに NFS でマウントした /usr/ports/packages/All/ に cd して、そこで pkg add kde* などと打つとドドドとインストールしてくれます;-)。

ただ、この pkg add するためには設定ファイルを一個用意して置く必要があります。
/usr/local/etc/pkg.conf というファイルを一個用意してあげます。

# cd /usr/local/etc
# echo "packagesite: http://pkg.freebsd.org/${ABI}/latest" > pkg.config

 
/usr/local/etc/pkg.conf.sample と、いうファイルがありますが、とりあえず一行だけ書いたファイルを置いてあげると pkg add が動き出します。このファイルが無いと pkg add はスルっと終わってしまい packages をインストールしてくれません。
packages 自体はこのファイルに書いたホスト名など、リモートから取って来なくてカレントデイレクトリの packages を利用したいので、これで十分です;-)。

以上で新規にインストールした FreeBSD の環境が整いました。早いです;-)。

 
2. 動くデバイスと動かないデバイス
packages がドドド入ったので X を起動したり色々やる準備が整いました。で、まず、動かないもの(デバイス)を書きましょうか。

・Wi-Fi: Broadcom (多分 BCM943142HM)
・Bluetooth: Broadcom 製 USB 経由 で 4.0 対応
・SD Card Reader: Realtek 製

これらはダメですね。 FreeBSD 側にドライバが無いようです。あと、渋いところでいうと AMD の SUBus が認識しない。この辺りについては pciconf -lv を置いておきますのでそちらを参照して頂ければと思います。

続いて X ですが、 e145 の CPU というか APU は A4-5000 で Radeon HD 8330 な GPU ですが、以下の URL で確認すると・・。

https://wiki.freebsd.org/AMD_GPU
https://wiki.freebsd.org/Graphics

と、いうことで Radeon HD 8000 番台は “Not supported” だそうです。残念ながら VESA 決定ですね。最後に要らないとは思うけど、xorg.conf を付けておきます。
タッチパット・トラックポイント共に動作する設定が入っています。

 
動くもので気がついたのを書いてみます。

・suspend/resume する (あれ?しなくなった。ちょっち調査中)
・テンキーで画面の明るさ変更が可能
・音は出る
・USB カメラは webcamd+cuse4bsd+pwcview で動きます

くらいかな?

 
試してないものは以下の通りですが、これは多分 Xorg とか KDE4 の機能に引っ張られると思うなぁ。あとで確認してみよう。

・D-SUB 15pin/HDMI/LCD があるけど、三画面出力とか可能なのかな?
・バッテリーの持ち状況とかまだ確認してないです

あと、以前の「PRIMERGY MX130 S2 を FreeBSD で利用する。」というエントリで「hwpstate0: set freq failed, err 6」というメッセージが延々と出力される。と書いたことが有りましたが、この NotePC でもやはり表示されます。回避策は上記エントリに書いてあるのでそのパッチを適用しました。

 
実際に ThinkPad Edge e145 を FreeBSD で利用してみた体感的な感想をちょっと書きます。比較は ThinkPad X100e とですが、実測値とかなくてすみません。

・CPU は 2Core から 4Core になったので余裕を感じます。あと、 CPU の温度が低いですね。ファンが唸りを上げて回るというのはまだ体験していません。その点からするとたとえ遅くとも「良いんじゃね;-)。」と思えます。
・Xorg が VESA でしか利用できないのが痛いかなぁ。とか思ったのですが、最近の VESA は以前よりも進んでいますね。以前は 1024×768 を 1366×768 横方向に拡張して表示してくれていたのですが、今の VESA はちゃんと画面のサイズでで表示してくれます。 2D のみなら VESA でも我慢できるかなぁ。と、いう感じかな。

しかし、KDE4 の「デスクトップ効果」では xrandr を利用してウィンドの透明化とか全仮想デスクトップの表示とかが動きます。あれあれ? VESA でも今は十分に動いているよ。状態です。 ThinkPad X100e の頃の VESA とは随分と違い驚いています;-)。

 
とまぁ、こんな感じですが、これは続くかどうかわかりません;-)。

ThinkPad X100e の場合は枯れた技術を利用した新製品の NotePC でしたが、今回購入した e145 は最新鋭の NotePC になるので X100e の頃よりは色々と楽しめそうです;-)。

と、いうことで ThinkPad Edge e145 で FreeBSD/amd64 9.2-RELEASE をインストールして動作している状態の情報を提示します。

起動時の dmesg
pciconf -lv の結果
sysctl -a の結果
vesa だけど xorg.conf

皆さんも是非 FreeBSD を PC ネーテブで動かしてみてください;-)。

11月 092013
 

前回のエントリで「購入したー。FreeBSD 用の領域確保したー。」で、終わったのですが、ガマンできずに、ロクに下調べもせずに FreeBSD 用に確保した領域に FreeBSD/amd64 9.2-RELEASE をインストールしてみたのですが・・。

あたたた。 Windows8 がぶっ飛びました。 Windows と FreeBSD の両方がブートできなくなってしまいました・・。orz。
ThinkPad X100e に引き続き、またまたリカバリー領域のバックアップをしない状態で HDD 全初期化の運命です・・。orz。

 
この ThinkPad Edge e145 ってのは最新鋭の NotePC なんですね。その辺りのことをまるで意識していませんでした。 Windows8 がブートする NotePC なので起動は Windows7 世代の PC と同様の BIOS ではなく UEFI BIOS で、パーティション構成は GPT を利用しています。こんなの知らないよーみたいな・・f(^^;;。以下、 BIOS との格闘についてです。

 
1).USB デバイスからの OS の起動
まず、USB デバイスから OS をインストールするためにメモリとか CD/DVD から起動しようとするのですが、これがまた起動しません。orz。 BIOS の設定は二ヶ所。ここを変更してあげないと外部メディアからブートできません。

・USB UEFI BIOS Support を enable に
BIOS の Config メニューから USB を選択するとこのメニューがありますが、これが disable だと USB デバイスからブートしません。

・Secure Boot
これは UEFI BIOS の機能なのですね。 UEFI の場合はブート時のウィルス対策のためにできたメニューらしいですが、新規に OS をインストールする場合には disable にしないとダメです。

IMG_6038_e145_UEFI_1

あと、細かい点としては FreeBSD のインストールメディアを USB3.0 のポートに接続するとこれまたブートしません。OS インストール中は USB3.0 は disable にしておいたほうが良いかもです。

 
2). OS のインストールと起動
例えば Windows8 のみインストールする場合や FreeBSD を先にインストールした場合にはそれぞれがブートしてくれます。
Windows8 の場合は UEFI BIOS の Startup メニューから UEFI Only を選択すれば高速にブートする状態でインストールし、起動します。 FreeBSD の場合は Legacy Only にすればインストールできて起動もします。

しかしっ!! 一個がインストールできてもう一個の OS をインストールすると最初起動していた OS がブートしなくなり、結局二つの OS 共にインストールしたモノが起動しなくなりました。

試したのは以下の通り。インストールした OS の順番を意味し、その後どうなったか? を掲載しています。 FreeBSD は GPT パーティションを利用しました。

・Windows8 (起動) -> FreeBSD/amd64 9.2-R = 両方とも起動せず
・FreeBSD/amd64 9.2-R (起動) -> Windows8 = 両方とも起動せず
・Windows8.1 (起動) -> FreeBSD/amd64 9.2-R = 両方とも起動せず
・FreeBSD/amd64 9.2-R (起動) -> Windows8.1 = 両方とも起動せず
・Windows8.1 (起動) -> FreeBSD/amd64 10.0-BAETA3 = Windows8.1 は起動するが FreeBSD を起動する方法がわからない

一番最後のパターンは FreeBSD/amd64 10.0-BAETA3 が UEFI に対応したと小耳に挟んだのでトライしました。 UEFI BIOS は Both で UEFI/Legacy Boot Priority から UEFI First でインストールしました。
Windows8.1 から bcdedit を利用し Windows8.1 のブートマネージャからのブートを試みましがダメでした。

IMG_6037_e145_UEFI_2

この辺りの情報はまだあまりなくて、 OS 単体をインストールしたら起動したとか、仮想環境にインストールしたら起動したとかそんなんばっかりで、物理的な最新の PC にインストールしてマルチブートしたという情報がほとんど無いのが現状です。

本当にヒトバシラーだぁ・・。orz。

 
3). 何とか起動。ふぅ。
もぉヨワヨワです。UEFI BIOS の設定は以下にしました。

・Secure Boot: disable
・UEFI/Legacy Boot: Legacy Only

もう明らかに前世代の PC の BIOS じゃん。みたいな・・。ここに Windows7 をまずインストールしました。この環境でインストールする Windows7 はすごいですね。 MBR パーティションにインストールしているようです。

Windows7 インストール後に FreeBSD は /amd64 9.2-R をインストールした場合はインストール時に GPT パーティションでインストールしようとしているので Windows7 のパーティションが見えません。あららら。

と、いうことでインストールの手順は以下の通り。

1. FreeBSD/amd64 9.2-R を MBR パーティションでインストール
パーティション作成時に先頭の 230GB を NTFS として確保し、残りのディスクは MBR 形式で FreeBSD パーティションを確保します。 /dev/ada0s3a,b,c,d って感じですね;-)。これで FreeBSD のインストールは完了。

2. Windows7 のインストール
FreeBSD のインストール時に先頭 230GB を確保したのでここに Windows7 をインストールします。これはパーティションを新規割り当てするなど、フツーの手順通りで OK です;-)。

3. マルチブート
インストール後に再起動。まずは Windows7 が起動します。その後 bcdedit で FreeBSD が起動するように設定します。そして、その再起動後は Windows7 のブートマネージャから両方の OS がブートするようになるのでありました。ふぅ。

 
と、いうことで、なんとか無事に二つの OS が起動するようになりましたが UEFI BIOS の知識は十分に付けてからトライしたほうが良さそうですね。UEFI BIOS でハマった道を再確認。

・ USB デバイスからインストールメディアがブートしない
USB UEFI BIOS Support を enable にする。
Secure Boot を disable にする。

・UEFI+GPT 対応 OS
Windows8は レガシー BIOS と MBR に対応しているというんだけどそれではインストールできないみたい。 UEFI Only と GPT でしか扱えませんでした。
FreeBSD 10.0-BETA3 は UEFI Only でインストールできます。ただし、マルチブート時にどのようにしたら良いのかドキュメントが無い(少ない?)。
OS としてインストールしないのに Linux のブートローダを利用するのはイヤなので関連すドキュメント全く読んでません。
Windows8 や FreeBSD 9.2-R は単体でインストールして単体で利用する分には全く問題は無いと思います。

・Legacy BIOS+MBR でマルチブート
UEFI+GPT に対応したマルチブート環境化において、ブートローダ(ブートセレクタというのかな?)部分はどうしたら良いのか全くわからなかったので古い PC アーキテクチャで OS を利用る場合に良いかと思われます。

BIOS やパーティションレベルでの最新機能は必要なく、とりあえず「何はなくともマルチブート命」って人向けでしょうかね;-)。

 
今は Windows7 そっちのケで FreeBSD/amd64 9.2-RELEASE をいじっています。一応、 X まで起動して KDE4 が動き出しました。
Windows7 はここから Windows8.1 にバージョンアップできるのかなぁ? そーすると Legacy BIOS+MBR で一応動くことになると思うんだけど。

と、いうことで今回はここまでにします。二つの OS をマルチブートするための方法を書いてみました。FreeBSD 10 側でマルチブートのための機能とかあるのかなぁ? やっぱり OS は物理マシンにインストールしないとダメですねぇ;-)。

次回は FreeBSD について、動くデバイス・動かないデバイス・その他について書いてみたいと思います;-)。

11月 062013
 

以前利用していた ThinkPad X100e がちょうど三年でぶっ壊れてしまったので新たに NotePC を購入したのですが、どうしようか悩んだ挙句 Thinkpad Edge e145 にしました。
ウェブから申し込んだのが 10/09 で受注生産だったので納期が 2-4 週間とのことで、いやー。本当に 4 週間かかりましたな。 11/06 に配達され、手元に届きました。

新しいブツが手に入ったのでしばらくはこのネタ続くかもしれないです。今回はその第一回目と、いうことで;-)。

僕が購入したのは AMD の CPU である A4-5000 が載っている受注生産モデル。 e145 の代表的なスペックは以下になります。

・CPU クロック: 1.5GHz
・CPU コア数: 4Core
・GPU: Radeon HD 8330
・メモリ: 4GB
・HDD: 7mm 厚 500GB
・OS: Windows8
・NIC: RealTek GbE
・Wi-Fi: Broadcom (多分 BCM943142HM)
・Bluetooth: Broadcom 製 USB 経由 で 4.0 対応
・SD Reader: Realtek 製

ThinkPad X100e で利用していた SSD を入れようかと、届いたその日に裏蓋を開けたのですが、なんとっ!! default の HDD は 7mm のヤツで 9mm の SSD は入りませんでした。
その他のパーツで ThinkPad X100e から色々流用できるか試してみたリストは以下です。

・AC アダプタ: 使えました;-)
・Wi-Fi: Intel Centrino Advanced-N WiMAX 6250 BIOS ロックがかかっていて利用不可
・Bluetooth: あえて Broadcom 2.0 を利用する必要ナシ
・メモリ: 規格が違うのでアウト

着脱可能で流用できそうなパーツはこれくらいでしょうかねぇ。

あと、裏蓋開けてみて X100e と違うなぁ。と思ったのは SIM スロットとか無いので随分とさっぱりしている点かな。 HDD とメモリと MiniPCI の Wi-Fi にアクセスできるくらい。

初日は Windows8 のアップデートとかしてシューリョーって感じでした。
以前利用していた X100e のときは Windows7 をブートもせずに HDD の内容を全部ぶっ飛ばしてから FreeBSD と Windows7 をインストールしたのですが、今回はリカバリーメディアを作成するために一応 Windows8 をブートしました。

にしてもっ!! リカバリー領域をバックアップするプログラムが見つかりません。同梱されていた資料は薄っぺらい紙が三枚で、ユーザ・ガイドは PC の中でそれを見るとリカバリー方法が書かれているのですが、画面右の「検索」に “recovery” と入力して表示されたプログラムを実行しろ。とは書かれているのですが、そのプログラムが見当たらないんですね。

でもって Lenovo のサイトから Rescue and Recovery 4.51 対応全言語用フルインストールファイル (594MB) をダウンロードして試したのですが e145 の Windwos8 にはインストールできませんでした。あたた。

と、いうことで 今のところは SSD 化することもできずリカバリーメディアを作成することもできない状態なのでとりあえず 480GB ほどある Windows8 パーティションを縮小して FreeBSD 用の領域を 230GB ほど確保したところで一日目の作業は終了。となったのでありますf(^^;;。

 
さてさて。今回購入した Lenovo Thinkpad Edge e145 は勢いで”赤”を購入してみました。 Lenovo Thinkpad X100e と比較してみます。

IMG_6057_ThinkPad_e145_2

まず、大きさが目につきましたね。と、いうか X100e のほうが「あ。こんなに小さかったんだ。」と感じました(右側)が、それはつまりはバッテリーの部分が飛び出るか本体に内蔵されるかで、e145 のほうが奥に長い(左側)のはバッテリーのせいなのね。と、いうことが解ります。

筐体ですが、これが随分と違うんですね。 X100e のほうはプラスチックボディーなんですが、 e145 は一応鉄製というかブリキというかプラスチックでは無い素材というかを利用しています。

どっちが良いか?聞かれれば e145 のほうが好きかなぁ。赤だからかもしれませんけど;-)。

IMG_6054_ThinkPad_e145_1

と、いうことで第一回目はこれにて終了にします。 e145 の次のネタを書くのは Windows8 か、もしかしたら FreeBSD/amd64 9.2-RELEASE をインストールしたときになるかと思われます;-)。

10月 062013
 

色々なシーンにおいて利用していた ThinkPad X100e が起動しなくなってしまいました。購入したのが 2010/09/26 なのでちょうど三年で壊れてしまった。と、いうことになります。早いなぁ。

僕が購入した NotePC は ThinkPad535E が一番最初でそのあと MacBook も含めると九台の NotePC を購入しているのですが、「遅いっ!!」と感じて買い換えるまで壊れたことは一度も無かったので、そー考えると現役で壊れてしまった NotePC はこれが初めてです。

ThinkPad って堅牢なイメージがあるのだけど、やっぱり安物ではなく、ちゃんとしたのを買え。ってことなのでしょうなぁ。

 
この NotePC は FreeBSD で利用する分には suspend/resume をちゃんとしてくれていたので悲しいモノがあります。
あと、CPU は AMD だしグラフィックスは RADEON だったしねえ。

FreeBSD の 9.2-RELEASE が出る少し前に DRI 系の Mesa で 9.1.6 が利用できるようになったのでそれらの ports を make して RADEON でバリバリ使うぜーっ!! とか思って、 portmaster -D -a が完走してリブートしたら、その後、起動しなくなりました。

CPU 負荷かけすぎたのかなぁ?とか思い、一応分解してみました。

IMG_5893_RhinkPadX100e_Crash_2

症状は以下のような状況です。

・電源は生きているようです。バッテリにも充電されます。
・CPU ファンはゴワンゴワンと回ります。
・CPU 周りも熱くなっているので CPU 自体は多分動作しているんでしょう。
・しかし、ディスプレーには何も映らない。
・D-sub 15pin で外部出力も試したけど何も写らない。
・SSD・メモリその他のパーツも取り外したけど、やはり何も動かない。

と、いう感じで完全にマザーボードがいかれたっぽい。ってのが僕の結論です。

AMD の E-450 を利用しているので以前から熱暴走する感じはあった(FreeBSD の ACPI で熱暴走前に ACPI shutdown が走るけど)。 まあ、そのあおりを受けて他のパーツに影響が及んだのであろう。と、いうのが感想です。

IMG_5895_RhinkPadX100e_Crash_1

さて。新しい NotePC が必要なのですが、もう一回 AMD の CPU の NotePC にしてみようかと思っています;-)。すると多分 Acer のヤツになるだろうとは思うのですが。

 
壊れた ThinkPadX100e ですが、パーツ取りをとりあえず行う予定。

・CPU AMD E-450 (マザーボードからひっぺがす;-)
・メモリ DDR2 2GB x1 / 1GB x1
・Wi-Fi チップ Centrino Advanced-N+WiMAX 6250
・Bluetooth モジュール
・キーボード
・Intel 240MB SSD

このくらいかなぁ。どれか欲しい人います? ;-)。

9月 102013
 

以前のエントリで「xmodmap と setxkbmap。」というのを書いているのですが、そのときに xmodmap -pke というコマンドを打ってみて、このコマンドが出力した情報をじっくりと眺めてみると何やら色々な設定があるようなので試してみることにしました。

色々な設定というのは、例えば NotePC において Fn キー + テンキー同時押しでボリューム調整を行う、であるとか画面の明るさを変更する、であるとか suspend/resume であるとかその辺りのことができるようなんですね。

IMG_5632_NotePC_Fn+10Key

通常この辺りの制御は ACPI のほうでやっていて、以前であれば、僕の場合、今回は ThinkPad X100e で試してみましたが、 acpi_ibm.ko というのを kldload して /usr/local/sbin/acpi_oem_exec.sh とかを作成して呪文のような文字列と数値を書いて devd に対応させる。というのが一般的だったんですけども。
まぁ、その辺りは man acpi_ibm してみて、その内容でスクリプトを書くんですけど、なんか大変そうで「動かなくてもいやー。」となっていたんですね。

今までは ACPI で制御していた Fn キー + テンキー同時押しの機能がどうやら xmodmap でできるらしいんですね。と、いうことで早速設定してみましょう。
まずは xmodmap -pke でどんなオプションが指定できるのかを探してみます。

$ xmodmap -pke | grep XF
keycode  63 = KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply KP_Multiply XF86ClearGrab
keycode  67 = F1 F1 F1 F1 F1 F1 XF86Switch_VT_1
keycode  68 = F2 F2 F2 F2 F2 F2 XF86Switch_VT_2
keycode  69 = F3 F3 F3 F3 F3 F3 XF86Switch_VT_3
keycode  70 = F4 F4 F4 F4 F4 F4 XF86Switch_VT_4
keycode  71 = F5 F5 F5 F5 F5 F5 XF86Switch_VT_5
keycode  72 = F6 F6 F6 F6 F6 F6 XF86Switch_VT_6
keycode  73 = F7 F7 F7 F7 F7 F7 XF86Switch_VT_7
keycode  74 = F8 F8 F8 F8 F8 F8 XF86Switch_VT_8
keycode  75 = F9 F9 F9 F9 F9 F9 XF86Switch_VT_9
keycode  76 = F10 F10 F10 F10 F10 F10 XF86Switch_VT_10
keycode  82 = KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract KP_Subtract XF86Prev_VMode
keycode  86 = KP_Add KP_Add KP_Add KP_Add KP_Add KP_Add XF86Next_VMode
keycode  95 = F11 F11 F11 F11 F11 F11 XF86Switch_VT_11
keycode  96 = F12 F12 F12 F12 F12 F12 XF86Switch_VT_12
keycode 112 = KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide KP_Divide XF86Ungrab
keycode 214 = XF86Display NoSymbol XF86Display
keycode 215 = XF86KbdLightOnOff NoSymbol XF86KbdLightOnOff
keycode 216 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 217 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp

 
なるほど。この中にキーボード配列に合いそうな XF86 なオプションを ~/.xmodmaprc に記述していけば良いんですね。などということが解りました。

上にキーボードの写真を掲載しましたがちっこくて見えないですかねf(^^;;。それに合わせて今回 ThinkPad X100e に設定したのは以下の通り。

keycode 140 = XF86AudioStop
keycode 176 = XF86AudioRaiseVolume
keycode 174 = XF86AudioLowerVolume
!
keycode 162 = XF86AudioPlay
keycode 144 = XF86AudioPrev
keycode 153 = XF86AudioNext
!
keycode 115 = XF86KbdBrightnessUp
keycode 109 = XF86KbdBrightnessDown

 
以前から Fn+F4 で suspend/resume は動作していたので今回は設定しません。

ボリュームの停止・大きく・小さくは動作しました。まぁ、KDE4 のパネルにボリュームウィジェットを表示しているのでそれで調整することも可能ですが、新たに Fn+ESC ・ Fn+F1 ・ Fn+F2 キーでできるようになった。と、いう感じでしょうか。

あと、音楽の曲飛ばし(Fn+F11)と戻り(Fn+F9)・停止と再生(Fn+F10)が動作しました。利用したソフトは gmplayer で 起動時に gmplayer *.mp3 とかして再生開始します。再生している最中に Fn+ キーを押すとそれが有効になりました。けど、考えてみると gmplayer のほうにも曲飛ばしとか停止のキーバインドはあるわけでして、無理して Fn+ キーに設定する必要は無いのかなぁ;-)。

XF86KbdBrightnessDown と XF86KbdBrightnessUp は動作しませんでした。と、いうか、Fn+ のキーがもう無いんですね。 xev で keycode を取得しようとしても取得できないキーが何個かありました。
現在、画面の明るさ変更については ACPI で行っています。 kldload acpi_ibm.ko すると acpi_ibm.0.lcd_brightness という sysctl mib が生えてきます。ここに値を設定してあげると画面の明るさが変わるのですが、shell スクリプトを書いてそれを実行することにより明るさを変えています。

その他に何かできないのかな?などと思ったのは外部ディスプレーの切り替えとか。 xmodmap 的に何かパラメータはあるのかな?と思ったのですが特に無いようなので諦めました。
ではどうするか?というと、KDE4 では KDE システム設定の中に「ディスプレーとモニタ」という項目があってここから LCD か外部ディスプレーにするか変更ができるのでそれでやることにしました。なので X の再起動とかは必要ありません。調べてないんだけどこの辺りは xrandr が面倒見ているのかな?

 
と、いうことで、以前は ACPI のほうで設定していた内容がいとも簡単にできるようになったのは良いことですね。ただ、本当にその設定が必要か? 聞かれれば「特には困っていない。」のであまり必要ではないんですけどねf(^^;。キーボードに書いてあるのでそれに合わせてキーをマッピングしてみた。と、いうのが素直な感想で。けど、簡単に設定可能なものは一応設定して見ましょう。という内容のエントリなのであります;-)。

9月 102012
 

普段から利用している ThinkPad X100e ですが、こいつは Windows7 と FreeBSD/amd64 9.0-STABLE のマルチブートで利用していました。ところが、 FreeBSD 側で利用していたら GEOM がエラーを吐き出すようになってきて、どうやら HDD がご臨終のようです。
シングルユーザでブートして fsck -y を走らせても完走しないしないので、いよいよ HDD を交換することにしました。
#この前の段階でバックアップは既にバッチリ取っといてある;-)。

で、せっかくの機会なので Intel の SSD にしてみました。選択したのは INTEL 330 Series SSDSC2CT120A3 300i で 128GB モデルです。 ThinkPad X100e に最初から付いていた HDD は 東芝製の 2.5 インチ 320GB 、 5400 回転のやつでしたが、それを交換しました。

ThinkPad X100e の HDD 交換は NotePC の裏蓋のネジを外してパカっと開けるともうアクセスできるのでそこですかさず交換です。非常に簡単に HDD を交換できます。

WindowsOS 部分には 50GB 、 FreeBSD 側には 60GB にしました。ちなみに WindowsOS は Windows8 をインストールしました。

まだあまり使い込んではいませんが、実際に両方の OS での動作確認をしてみたいと思います。

1). Windows8
Windows8 は 64bit 版をインストールしました。まぁ、フツーに起動した。と、言う感じでしょうか;-)。 ThinkPad X100e のデバイスは割とサクッと認識してくれました。認識していないのは多分 3G のチップだと思います。これは Windows7 のドライバをインストールしようと思っていますがまだ試していません。

あと、 Lenovo の診断ツールとかもまだインストールしていないです。無事に動作するのかな?

で、 Windows エクスペリエンスですが、こんな結果になりました。

windows8_status.jpg

SSDに交換した以外は以前と変わらないのでこんな感じでしょうかね;-)。

2). FreeBSD/amd64 9.1-PREPELEASE
フツーにインストールしてサクサク動作しています。まぁ、特に気にすることもなく。と、いう感じでしょうか。僕の持っている ThinkPad X100e は suspend/resume するというのは以前書いていますが、今回も特に問題なく動作します。

今までは 2012/05/17 くらいの 9.0-STABLE を使い続けていたのですが、いよいよ最新版の 9.1-PREPELEASE にしてしまった。と、言う感じでしょうか。

KDE-4.8.4 の『電源管理』から suspend すると X のスクリーンセーバまでかかってくれます。すげ;-)。

if_iwn の Intel(R) PRO/Wireless 6250 は相変わらず動作が不安定ですね。 USB NIC の if_run は必須な状態です・・。orz

3). Windows8 と FreeBSD の同居
320GBの HDD から 128GB の SSD に変更し WindowsOS は 7 から 8 に変わりました。マルチブートの設定についてですが Winsodws8 側で bcdedit で書き込んであげる必要があります。

Windows8 のインストールが終わって FreeBSD/amd64 9.0-R のインストールが完了した時点では FreeBSD しか起動しなくなります。

この状態で、まず最初に試したのが FreeBSD 8.3-R の CD-ROM を持ってきて MBR にブートマネージャをインストールしてみました。 Windows7 ではブートしてくれていたのですが Windows8 ではまるっきりダメですね。 Windows8 がブートしなくなったので Windows8 のメディアでレスキューとか復旧を色々試しましたがダメだったので結局で再インストールしました。

Windows8 の再インストール後は管理者権限の DOS プロンプトから bcdedit で起動情報を設定してあげます。以前このブログでも掲載しているのでそのやり方と全く一緒で OK です。

Windows8 のブートローダはバーチャルマシンイメージが起動できたりと色々なモノがブート可能になっているのが面白いですね。

あと、 default で Windows8 をブートするようにしていると NotePC の起動直後に Windows8 のマークが表示されて Windows8 の GUI なブートメニューが表示されます。 FreeBSD を default ブートにすると Windows7 の時のようなテキストベースのブートメニューになります。

Windows8 のブートローダから FreeBSD を選択すると、いきなり BIOS のトップ画面が表示されたりするのでこれまた中々焦るというか面白い現象ですね;-)。

とまぁ、こんな感じで HDD からSSD に変更したのですが、ネタ的には Widnows8 とのマルチブートについて。になってしまったでしょうかねぇ;-)。

皆さんも Windows8 で色々検証したり遊んでみてくださいー;-)。

あ。本当に最後に一点。 bcdedit は、くれぐれも管理者権限の DOS プロンプトから実行してください。管理者権限の PowerShell から実行してもまるでコマンドを受け付けてくれません・・。orz。