2012/05/21(月)openSUSE 12.1でデスクトップ環境を作ってみた

※前置きが長いのでopenSUSEの話を読みたい人はここまで飛ばしてください(笑)


3年ぐらい前に作ったこのマシン時々青画面で落ちるという非常に厄介なマシンでして……。最初はK10STAT入れたせいかなと思ってたのですが、何ヶ月か前に定格で動かしても落ちることを発見しまして……。色々取り替えて確認した結果、原因はマザーボードかCPUってところまで詰めまして*1、でもどっちだか分からない。

それから数カ月が経過してどっちか買い換えるなら両方変えて新しくすればいいじゃないか(苦笑)ということで、新マシンを作ってopenSUSEをインストールしました。

*1 : 予想でしかないけど、おそらくマザーボードが原因。

PCの構成

種類パーツコメント
M/BBIOSTAR TA75MMicroATX。AMD A75チップセット
CPUA6-3670K (2.7GHz)倍率アンロック。3.2GHz@1.4V動作
MEMW3U1600HQ-4G (4Gx2=8GB)1.35V設定しても下がらない模様(汗)*2
HDDSAMSUNG HD502HI 500GB5400rpm。ワンプラッタ(流用)
電源HK400-14GP 400Wアイドル電流7W(流用)
VGACPU内蔵(Radeon HD6350D)ATI万歳
LANオンボード(Realtek RTL8111E)定番安物1000Base
  • メモリは本当は1.35V設定で動かす予定だったのですが、BIOSで-0.15V設定してもBIOSモニタ電圧が下がらない……。
  • HDDは一度Hitachi(HGST)に載せ替えたのですが、こっちのほうがはるかに静かだったので。おまけにワンプラッタなので(2プラッタより)アクセスも速い。

消費電力は定格動作時でアイドルで34Wぐらい。電源がクソなので、まともなものに変えれば20W代にはなりそう。時代は変わったなと思います。*3

ベンチマーク

いつものCrystalMarkです。*4

3.2GHz動作定格動作(2.7GHz)
A6-3670K_3.2G.png
A6-3670K_2.7G.png

AeroテーマをオフにするとGDIの数値が3000ぐらい下がりました。本当に変わるんですね(苦笑)

*2 : たぶんBIOSのせい

*3 : これ書いてる Athlon X2(K8)マシンの消費電力いくつだっけな……

*4 : メモリがシングルチャンネル動作になってます。本来はもう少し性能良いです。以下すべて同様。

OSの選択

最初は今までどおりWindowsにするつもりだったのですが、以前からLinuxデスクトップ環境に移行しないのか複数と言われてたこともあり、Windowsを入れた後でLinuxを入れてみました。

昔のGNOMEのファイルマネージャーが使いにくかった記憶があり、KDEを中心に試しました。

Kubuntu
ちょうど12.04 LTS(5年サポート)も出たことだしと入れたのですが、CDイメージから入れたのが原因かUbuntuに比べて日本語サポートとかがいまいちで、デフォルトのメニューが分かりにくくやめた。
Linux Mint 12
Ubuntuのユニティが不評なこともあり、それに代わって出てきたUbuntuベースのディストリビューション。12.04 LTSベースじゃないのかとかいう理由でやめた。今はUbuntu 12.04 LTSベースのLinu Mint 13 RC出てる。
LMDE 201204
DebianベースのLinux Mint。A6のCPU内蔵GPUに未対応なのかカーネルがこけるので起動せず。後日他のマシンに入れたところ、Debianはデスクトップ環境には向かない(パッケージの種類が少なくバージョンも古い。利用者が少なく日本語化等も不十分)という初めから予想できただろう結論に達しました。
Ubuntu
不評とはいえ利用者の多いことで選択。そもそもGNOME慣れなんてしてないのでUnityに違和感はなかったのですが、全体的な使い方がよく分からなかったのでボツ

Fedora系は嫌な思い出しかないので選択肢にないとしても、なんだかんだでDebian系ばかり。最後に気になっていたopenSUSEを試したところ意外と使いやすく、操作も直感的に飲み込めたのでそのまま環境構築しました。

得られた教訓

  • デスクトップ環境は利用者の多いディストリを選ばないと何かと苦労する。
  • Linux Mintを使うならUbuntuベースのほうが断然良い。*5
  • コンソール(端末エミュ)が簡単に呼び出せないLinuxは使いたくない(苦笑)

おまけの教訓。

  • UEFIに大量のOSが登録されて消し方が分からない(汗)*6 bcdeditコマンドで消せました。Linuxからだとどうやって操作するんだろう?

*5 : Mintの追加分以外はUbuntuの国内リポジトリ使えるし、Ubuntu用の多様な追加リポジトリが利用できる。

*6 : EFIパーティーションから起動用ファイル自体は消せたのですが、BIOS上からの消し方が分からない……

openSUSE(KDE)の環境構築

ようやく前置きが終わりまして本題です^^;;

とはいえ基本的に以下のサイトを参考にしました。

12.1と設定項目が違う部分もありましたが、適当に解釈して設定。

一番厄介だったのはグラフィックドライバでした。普通にインストールして、ドライバ構築用のソースやら開発環境を入れて、AMDからLinuxドライバをダウンロード&インストールでなぜかうまく動かない。リポジトリから行ってもうまく動かない。

動作しているカーネルと違うバージョンのカーネルソース(ヘッダ)が入っていたのが原因でした……。普通それぐらいの整合性はパッケージマネージャーが自動で面倒みると思ってたので(Debian系なら面倒みてくれた)ハマること1~2日(汗)

autofsとCIFS(samba)、NFSv4の自動マウントと速度比較

/etc/auto.masterにファイルを登録。「hsrv」はマシン名。

/mnt /etc/auto.hsrv

/etc/auto.hsrv

uname      -fstype=cifs,rw,username=uname,password=xxx,uid=yyy,gid=users,rsize=130048 ://hsrv/uname
share     -fstype=nfs4,rw,nosetuid hsrv:/share
  • autofsの再起動「service autofs restart」
  • auto.hsrvの変更は再起動不要(アンマウントだけすればいい)

rsizeは受信バッファを増やすためのパラメーターです。man mount.cifsに書かれているとおり16KBがデフォルトで127KB(130048)が最大です。カーネルモジュール側でも16KBの制限がかかっているので、モジュールロードオプションを指定して解除しないとrsizeだけ指定しても意味がありません。

# /etc/modprobe.d/99-local.conf
options cifs CIFSMaxBufSize=129940
方法速度
rsize,CIFSMaxBufSizeの指定なし20MB/s
rsize=CIFSMaxBufSize=12994040MB/s
NFSv450MB/s

という具合です。smbmountやWindowsからのアクセス(クライアント側OSのみ変更。マシン同一)、ないしはhttp(wget使用)では100MB/s出ている環境ですので、カーネルモジュールの制限(現状127KB)をもう少しゆるくしてほしいものです……。*7

NFSv4はCIFSパフォーマンスチューニングをする前に遅さに耐えられず導入しましたが、これはこれで特定IPからの接続を無条件に信用するという糞仕様に耐えかねてLAN内公開フォルダのみに。この設定だけだとidのマップがうまく行かないようなので後日取りやめ

補足

129940を指定してあるのは1460(mmsサイズ)の倍数にするためです。詳しくはsambaのドキュメントなどを参照。実際測定したところ、130048を指定した場合は「35~40MB/s」で129940だと「40~45MB/s」ぐらいでした。

*7 : もともとそんなに気にしてなかったのですが、ファイルマネージャ上からのファイル操作が明らかに遅いので調べていたらこの有り様でした。

before.loca, after.localスクリプト

openSUSEにはrc.localが存在しません。それらは /etc/rc.d/before.local や /etc/rc.d/after.local に書く仕様にになっており、実際ファイルが置かれ「ここに書いてね」と記述があります。

ですが、openSUSE 12.1においては実際にここに書いても動作しない(そもそも呼ばれない)という大変に糞な素敵仕様になっております。

after.localを呼び出す場合は、openSUSEのフォーラムを参考に、/lib/systemd/system/after-local.service というファイルを以下の内容で置きます。

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.

[Unit]
Description=/etc/init.d/after.local Compatibility
ConditionFileIsExecutable=/etc/init.d/after.local

[Service]
Type=oneshot
ExecStart=/etc/init.d/after.local
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

そのあとで、

# systemctl enable /lib/systemd/system/after-local.service

としてシステムサービスを登録すると実際に呼ばれるようになります。SysVStartPriorityを0あたりにすれば、before.localも同様に行けそうですが確認しておりません。

もっとも追加のネットワーク設定をここに書こうと思ったのですが、openSUSE等ではネットワークの初期化タイミングが遅くなっているためかそもそも無効でした。

細かいネットワーク設定なり、起動後の自動スクリプト実行なりはKDE上のシステムから設定するのが流儀のようなので、よっぽどの事情がない限りこの手のスクリプトを直接使うのはやめたほうが良さそうです。

CDEmu(仮想CDマネージャー)のインストール

マシンに光学ドライブがないのもありますが*8、普段から手持ちCD/DVDは全部イメージ化してサーバやディスクに入れているので、仮想CDがマウントできないと何かと不便です。

isoファイルだけならOSのマウントで足りますが、他の形式やcueで作った仮想音楽CD、古いccd形式のイメージなどもあり、DeamonToolsのようにマウントできるソフトとしてCDEmuを導入しました。

[openSUSE 11.3] Cdemu 1.3.0のインストール [64bit]に従ってVer1.5.0をインストールしましたが、いくつか追加でメモ。

  • CDEmuのリポジトリから、vhbaとkde_cdemu(GUIマネージャ)だけインストール。vhbaモジュールなどの登録はやってくれる。
  • libmirage, cdemu-daemon, cdemu-clientはソースからインストール。パッケージから入れなかった理由は忘れました。3つは依存関係があるので、配布バージョンを揃える必要があります。
# /etc/udev/rules.d/99-vhba.rules

KERNEL=="vhba_ctl", MODE="0660", OWNER="root", GROUP="cdemud"

ユーザー権限で動かすので、使用ユーザーをグループに登録。

# groupadd cdemud
# usermod -A cdemud username

自動起動させる

自動起動させるためにスクリプトを書いてKDEシステム設定の「起動と終了」から自動起動のスクリプトを「起動時設定」で登録しました。

#!/bin/sh

cdemud -a alsa

~/bin/start_cdemu.sh に保存して

# chmod +x ~/bin/start_cdemu.sh

*8 : インストールなどではUSB外付けドライブを使用

Wineのインストールと設定

Wineのリポジトリを追加してから、以下のパッケージをインストール。

wine qt4wine

初回起動時に ~/.wine 以下にwindows環境が作られます。64bit環境では64bit Windows環境が作られますが、何かと苦労が多いので*9 32bit環境を作ったほうが無難です。

$ WINEARCH=win32 wine notepad

winecfg とか他のものを呼び出す前に、まず最初にこれをしてください。

ちなみに、.wine ディレクトリごと入れ替えればいくらでもwine環境を作れますし、wine上の仮想Cドライブ(.wine/drive_c)にデータを置かなければ、.wine以下を消せば綺麗になります。

とりあえず

$ winetricks ie6
$ winetricks wmp9
$ winetricks d3dx9 dxdiag

あたりをしておくのがおすすめです。Direct3Dが利用できるか確認。

$ wine dxdiag

起動時にソフトが落ちず、ディスプレイの項目の「Direct3Dアクセラレーター」が使用可能になっていれば成功です。落ちる場合はLinux上のディスプレイドライバまわりを疑ってください。

3Dゲームや3Dベンチマークを動かす気ならついでに仮想ビデオメモリも増やしておきましょう。(標準の128MBではビデオメモリが足りず途中で落ちるゲームがありました)

$ winetricks videomemorysize=512
$ wine dxdiag   設定の確認

一部のゲームで動作はするのに単に画面だけが表示されないことがあるので、DirectDrawをGDIで処理するように設定(多分こっちがデフォルトだとは思いますが)。

$ winetricks ddr=gdi
  • wineconfig で設定変更。
  • winetricks でDLLなどを自動導入。
    • 「winetricks dlls list」で一覧取得。
  • 同一マシンにWindowsが入っているので、.wine/drive_c/windows/fonts は Windowsパーティションのフォントディレクトリをシンボリックリンクした。
  • CD(やCDEmu)のドライブをマウントする場合はCDデバイスではなくマウント済あるディレクトリを指定する。WineがCDデバイスと認識してボリュームラベルなどはよきに計らってくれる。デイバイスを直指定したり、マウントされてないと動かない。
  • qt4wineを介してexeダブルクリックで起動できる。
    • KDEのシステム設定ファイルの関連付けから、exeの関連付けのWineを上位にし(無ければ作成し)、コマンドを「cd %d; wine %f」と書き換えればダブルクリックでexeファイルが直起動できる。
  • アプリの追加からショートカットを作り、作業フォルダを.exeと同一にして、.exeファイルのフルパスの手前に「wine」とつければWindowsプログラムを通常アプリのように起動できる。
  • codecはWineを介してLinux側のcodecが直接参照されることがある。この場合、Linux側に32bit codecが入ってる必要がある。(win32アプリの場合)

日本語入力がおかしい(変換前の文字列が表示されない)等の不具合もありますが、想像以上に多くのソフトが動きました。

特に、無理だろうと思ったゲーム系が結構動きます。完璧ではありませんがDirectX(D3D)が動作するので遊べるもの多いです。ADV系ゲームはもとより、STGやアクションゲームなども普通に動いてしまいます。CDプロテクト等の特殊な読み込みも一部サポートしてるらしく、全滅ということわけでもありません。ゲームは次で書くエミュレーター(仮想PC)で動作させるよりもパフォーマンスがよく、Windowsでの起動とあまり遜色がありません。

もう何年かしてWineの完成度が高まれば、Windowsの必要は本当になくなってくるかもしれません。

ベンチマーク

WineWindows7
A6-3670K_wine.png
A6-3670K_3.2G.png

HDDはキャッシュが効いてるので無視するとして、FPUの中の乱数ベンチがWindows7より速く実行されていました。本家より速いことがあるというのは本当みたいです(笑)

D2Dの数値が思わしくないですが、スプライトの数が少なくても多くても「10 FPS」だったので、Wine側に何か問題があるような気がします。

これではなんか釈然としないので、DirectX(D3D)の性能比較のためFFXIBench3をHigh(高解像度)設定で動かしたところ3395のスコアがでました。表示がおかしいところも一切なくスコア参考表とかみても普通にゲームができそうです(笑)

環境FFXIベンチ3MHFベンチ3
Windows752171861
Wine33951408

wineアプリに引数にファイルを与えて直接実行(引数のパス変換)

書き慣れたPerlでスクリプトを作りました。

#!/usr/bin/perl

use strict;

my $cmd = shift(@ARGV);
my @arg = @ARGV;

my $path;
if ($cmd =~ m|^(.*/)([^/]+)$|) {
	$path = $1;
	$cmd  = $2;
	print "chdir($path) : ",chdir($path),"\n";
}

foreach(@arg) {
	if ($_ !~ m|^/[^/]+/|) { next; }
	$_ =~ s|/|\\\\|g;
	$_ = "z:$_";
}

my $cmdline = "wine $cmd " . join(' ',@arg);

print "(exec)",$cmdline,"\n";
exec($cmdline);

run-wine.pl とかで保存して、

$ wine /xxx/path/IrfanView/i_view32 /img/path/file.jpg

とかすると直接画像が開けます。KDEなら関連付けのコマンドを次のようにすればok。

wine /xxx/path/IrfanView/i_view32 %u

Wine側へのパス変換は「/で始まり、もう1つ以上/を含むもの」をパスとしてみなすようになってます。

*9 : 主にIEが入らないことが痛い。IEコンポーネントを使うソフトがイマイチ動かない。標準で入るWineプロジェクトのieframe.dllは完成度が足りず、例えばCystalMarkが動かない。

VMware, VirtualBOXのインストール

  • VMware Player 4.0.3
  • VirtualBox 4.1.14

それぞれ最新版を公式サイトからダウンロードしてインストール。VirtualBoxはリポジトリにもありますが、古いので入れないほうが良いです。どちらの仮想マシンにも試しにWindowsXPを入れてみました。

  • 共通
    • 仮想マシンの設定からIntel-VT/AMD-Vをonに(onを確認)
    • CPU 2個割り当て。メモリ1GB。
    • Direct3D等のアクセラレーションをon。
    • イーサネットはbridge設定。
    • DirectX9cをインストール。
  • VMware
    • インストール後、メニューからVMware Toolsをインストール。
  • VirtualBox
    • オーディオドライバをALSAに設定(結構重要)*10
    • 仮想マシンのビデオメモリを128MBに設定。
    • 通常起動し、DirectX9cを先にインストール。
    • セーフモードで起動。
    • インストール後、メニューからVMware Toolsをインストール。
    • メニューからGuest Additionsのインストール。
    • 公式サイトからインストールされているVirtualBoxと同じバージョンの「VirtualBox Extension Pack」を落として「# VBoxManage extpack 」してインストール。これをしないとUSBデバイスを直接ゲスト側に認識させたりできません。*11

VirtualBoxはDirectXの一部のドライバファイルを置き換えるらしく、DirectXインストール後にセーフモードで専用ドライバ(Guest Additions)をインストールするか、もしくはDirectXをインストールしたあとに再び専用ドライバをインストールする必要があります。DirectX機能が必要なければセーフモードでの起動は必要なく、普通にドライバを入れれば十分です。

dxdiagでどちらもDirect3Dが有効になっていることを確認しました。

ベンチマークとパフォーマンス

VMware Player 4.0.3VirtualBox 4.1.14
A6-3670K_vmxp_2cpu.png
A6-3670K_vboxxp_2cpu.png

HDDはキャッシュが乗ってるので無視するとしてCPU性能はほぼ同じ(通常環境より値が低めなのは4CPUのうち2つしか割り当ててないからです)。GDIはVMwareのほうが上でウィンドウを移動させたりの通常描写の体感でも差があります。一方、D2DやOpenGLはVirtualBoxのほうが上となりました。

実際DirectX9のゲームを起動してみると「ゲームにならないVMware」と「それなりに動くVirtualBox」という状況。あとVMwareのOpenGLの実装は少し端折ってるらしく変です。

エミュレーション全体の完成度やLAN速度とか安定度ではVMwareですが、ゲームをするならVirutalBoxかなという印象です。例えばVMwareがWindowsのインストールを自動で行なってしまうのはびっくりでした。まんま業務ソフトとホビーユースという感じでしょうか。VirtualBoxも完璧というわけでなく、DirectXゲームをフルスクリーン起動すると表示が乱れることも多いのですが、完成度が向上すればかなり使えるものになると思います。*12

……でも、それよりもWineの今後に期待(笑)

その他、感想とか

ユニティモード(VirtualBoxのシームレスモード)は面白いです。Linux上でWindowsアプリがX上にウィンドウだけ出て動くので、何を操作してるのかわからなくなるぐらいです(苦笑)

VirtualBoxのシームレスモードではタスクバーが出るので、タスクバーの位置を上に移動して、クイック起動にマイコンピューターやよく使うフォルダを割り当てると2つの環境を綺麗に共存できました。

*10 : これをしないとゲームで音が途切れたり止まったりします

*11 : これぐらい本体と一緒に標準で入れてもいいと思うのですが。

*12 : 反面DirectXの表示が乱れるということはほとんどありませんでした。

mikutter

twitterはブラウザで済ませてしまうことが多いのですが、さすがにあれもこれもとウィンドウを広げると画面が狭いので、スマホっぽいクライアントソフトを入れてみました。

Windows環境ではOpenTweenを使うこともありますが、mikutterはそれと比べてもかなり扱い易いソフトです。複雑な操作はブラウザからするので……という自分みたいな人にはおすすめ。

さてこのソフト「Ruby 1.9.2以降」を要求するので動作させるのがとても面倒くさい。*13

まず以下にリポジトリを追加してRuby 1.9.xをインストールします。

http://download.opensuse.org/repositories/devel:/languages:/ruby:/1.9/openSUSE_12.1/

1.9用の必要なライブラリなんてまずパッケージで手に入らないので、gemを使って構築してしまいます。(perlのppmみたいなもの)

# gem install gtk2 ruby-hmac openssl-nonblock cairo

これだけあれば動作するはずです。*14

*13 : Ruby普段使わない身からすると、とっとと動作も速い1.9系に移行すればいいと思うのですが、互換性の問題からRuby1.8系が使われ続けてる……。

*14 : 最初、ソースからruby-gtk2ライブラリを作ろうとして(KDE環境なので)依存関係を辿ってどこまで必要か探してたら挫折したのですが、gemでやったら一発でした。

beckyからThunderbirdへの移行

CircleBeckyプラグインで「ディレクトリ構造付の.eml」でエクスポートしてからThuderbirdでImprotExportToolsプラグインを使ってフォルダ階層ごとインポートしました。最初はSylpheedを使おうと思っていたのですがフォルダ階層を保ったインポートができなかったのと、複数アカウンとメールボックスの紐付けが微妙で、1メール=1ファイル構造(MH形式)にめまいがしたのでボツに。

導入アドオンや設定

  • CompactHeader …… ヘッダ表示をコンパクトに
  • ManualSortFolders …… フォルダやアカウントを手動で並べ替え
  • MinimizeTo Tray Plus …… 最小化時にタスクトレイへ
  • 未読フォルダのみを太字に …… Thunderbirdでアカウント名の新着時フォントを変更するを参考に、(profile-dir)/chrome/userChrome.css に以下を記述。
    /* メールのアカウント名のフォントをboldからnormalに */
    treechildren:-moz-tree-cell-text(folderNameCol, isServer-true) {
      font-weight: normal !important;
    }
    /* メールのアカウント名を新着がある場合にだけboldに */
    treechildren:-moz-tree-cell-text(folderNameCol, biffState-NewMail,
                                     isServer-true) {
      font-weight: bold !important;
    }
    
  • 特定フォルダの未読無視はできないのですが、メールフィルタで振り分け時に「既読にする」というルールを同時に追加してあげれば新着通知は出ないようです。
    • これでは読んだか読まないかも分からなくなるので「タグに『後で』を付ける」設定をして「後で」タグ付きのものを抽出する検索フォルダを作成しました。

Becky! Importなんてプラグインが……

Becky! Import 1.1.0

作者: Mozilla Japan

日本国内で利用されているメールソフト「Becky!」から、メッセージ、アドレス帳、フィルタ、アカウント設定をインポートする機能を提供します。

気づくのが遅かった(汗)

その他の設定メモ等

firefox

プロファイルディレクトリを丸コピーして終了。

その他メモ

  • 入れたソフト
    • smplayer …… メディアプレイヤー。smplayer2より使いやすかった。
    • Audacious …… winampもどき。
  • ウィンドウ出現位置がおかしくなったら ~/.kde4/share/config/ 以下の該当アプリの設定を消してみる。
  • Logitechマウスの設定は lomoco コマンド。設定は /etc/sysconfig/logitech_mouse