Ubuntu, ThinkPad

最近は目新しいことも特にないので日記もさぼりがちです。
ubuntu(Ubuntu GNOME)も14.04になって外部モニターを的確に検出してくれるのはいいのですが、無効にしても設定を記憶してくれません。
仕方がないのでログイン後に強制offします。

xrandr --output VGA1 --off

自動起動アプリにでも登録すればOK。
こうしないと、組み込みディスプレイのLVDSと外部ディスプレイのVGAが、一つの画面として設定されてしまいました。
希望としては今までどおり/etc/gdm/Init/DefaultでDISPLAY_MANAGER=gdmの直前で有効(VGA OFF)にできればいいのですがダメでした。
 
・・・最近は軽くて快適なWindowmakerばかり使っているので、今は~/.xprifileに書き込んでoffしています。
GNOME Shellにもこだわらないので、なんかもうUbuntu(とその派生品)ならどれでも良い気がしてます。

 
 

Ubuntu

いつもはクリーンインストールですが、今回はアップグレードしてみました。
GNOME Shellの拡張機能を確認するため


をみると、インストールした覚えの無いものが色々表示されています・・・しかも削除が出来ません???
全てボタン表示はOFFだったのでONにしたところ、SystemMoniterなど以前の設定のまま使うことができました。
暫く様子をみて、状況がかわらないようならクリーンインストールしてみようかな。

Ubuntu

GNOME-Shellとは関係のないWindow Makerの話題ばかりです。

focustran.pl、いいですね。
今風のWindow Managerに比べて地味っぽいWindow Makerですが、xcompmgrとtranssetを使えば影やらエフェクトやら透過などが実現できます。でも、いちいちWindowを個別指定して透過にするのは面倒なので、起動時のスクリプトで解決することが多いようです。
まあxtermなど限られたアプリだけ透過にするならそれでもいいのですが、アクティブと非アクティブのWindowで透明度の設定を切り替えるとなると、事は単純ではありません。
それで色々ググっていたら、やっぱり先人たちの成果がいくつか見つかりました。
私の環境ではCompositing (Page 1) / WM/DE Talk / CrunchBang Linux Forumsにありました、focustran.plが安定して動作しました。ちなみにオリジナルのスクリプトはtransset-dfで透過設定を実現していますけれど、今のubuntuではx11-appsに含まれるtranssetに変更する必要があります。
transsetに置き換えた実際のコードはこれ。


#!/usr/bin/perl -w

# This script is written by Andrei Perhinschi
# and is licensed under the GNU GPL license
# http://www.gnu.org/licenses/gpl.html

# Much thanks goes to Daniel Forchheimer (http://www.forchheimer.se/)
# for creating transset and the eutotrans
# script from which this script gets its inspiration

if ( !defined $ARGV[0] || !defined $ARGV[1] || !defined $ARGV[2] ) {
die “Usage: focustran <unfocused value> <focused value> <refresh value (secs)>\n”;
}

# default values
$trans_val = $ARGV[0];
$opaque_val = $ARGV[1];
$sleep_val = $ARGV[2];

# grab all window IDs
@win_ids = `xwininfo -root -all`;
foreach my $win_id ( @win_ids ) {
unless ( $win_id =~ /has\ no\ name/ || $win_id !~ /0x/ || $win_id =~ /Desktop/ ) {
$win_id =~ /\ \”/;
$win_id = “$`”;
$win_id =~ s/\s//g;
push @id_lines, $win_id;
}
}

print “ID_LINES:@id_lines\n”;

# make all windows transparent
foreach my $win_id ( @id_lines ) {
system ( “transset –id $win_id $trans_val” );
}

$old_id = 0;
# get currently focused window’s ID
while ( 1 ) {
my $active_id = `xprop -root  | grep “_NET_ACTIVE_WINDOW(WINDOW): window id # “`;
$active_id =~ /\#\s/;
$active_id = “$'”;
chomp $active_id;
# set active window to opaque_val and old window to trans_val
if ( $old_id ne $active_id ) {
system ( “transset –id $active_id $opaque_val” );
system ( “transset –id $old_id $trans_val” );
}
$old_id = $active_id;
print “active_ID:$active_id\n”;
select ( undef, undef, undef, $sleep_val );
}

使い方は実行権を付与してからfocustran.plをパスの通っているところ(/use/local/sbin)などに置いておいてターミナルから実行するだけですが、頻繁に設定を変更することはないので、私は~/GNUstep/Library/WindowMaker/autostartの最終行に次の通り追記しました。


sleep 2
xcompmgr n &
focustran.pl 0.65 0.95 0.2 &

sleepを入れているのは、tint2自身の透過機能とバッティングしないように、安定してからスクリプトを実行するためです。こうしないとtint2の透過設定がうまく働きませんでした。
オプションの数字の意味はコードに書いてあるとおりですが、focustran.plをオプション無しで実行すると

Usage: focustran <unfocused value> <focused value> <refresh value (secs)>

ということで、最初の2つは0〜1の間の数字を、3つ目はリフレッシュの時間を書きます。最初の2つを0にすると何もWindowが見えなくなって慌てますね、きっと。また、リフレッシュが極端に短いと負荷がかかるし無駄なのでホドホドに。
xcompmgrはオプションで影その他色々な設定ができますけれど、凝り過ぎると折角の「軽い」Window Managerとしてのメリットが無くなるハメになるのでお好みで。
ドロップダウンメニューなども透過になるのはご愛嬌です。

Ubuntu

久しぶりにWindow Makerをインストールしました。Software Centerからキーワードwmakerで検索すると出てきます。
バージョンは0.95.3なので、Window MakerのHPからダウンロードできるものより若干古いですが問題ないでしょう。一時期、開発が滞っていたようですが復活したようです。
・・・どうしてもWindow Makerで環境設定しなけれればならない事情が生じただけで、GNOME-Shellに不満がある訳じゃないですけど。

まずは仮想PCのubuntu GNOMEにインストール。さすがにキビキビ動きます。
認証画面が出てくるupdate-managerなどは、gksudoで起動すればパスワードの入力が前後するだけで問題ありません。Dockの設定でコマンドの頭にgksudoを付け加えればOK。
 
仮想環境で試してみて問題無さそうだったので素のUbuntu GNOMEにインストールしたところ、Window Maker Preferencesの文字化けがどうしても解消されず、ひとしきり悩んでいたところ、2ちゃんねるのスレッド「最強のWindow ManagerのWindow Makerを語れ。にそれっぽい記事がありました。その内容は616番目のレスにあるとおり「〜msttcorefonts とかいうパッケージを外したら解消」というものでした。
そこで、私も同じようにwineをインストールしているので、Synapticパッケージマネージャで検索してttf-mscorefonts-installerを削除したら無事に文字化けが解消されました。
あとは仮想PCの~/GNUstepを丸ごとコピーすれば全く同じ環境が構築できます。
 
私のメインPCがs30以前の時くらいにNetBSD上で使っていたWMなので随分懐かしく感じました。
見た目は変わっていませんけれど、軽量キビキビWindow Managerです。
 

Ubuntu

昨日のブログの性能比較で、
$ vblank_mode=0 primusrun glxspheres
としていますが、ArchWiki -Intel Graphics (日本語)によると、単にディスプレイのリフレッシュレートにあわせず、垂直同期を無効にしてprimusrun glxspheresを実行しているだけらしいです。

ということでprimusrun glxspheresの実行結果は?というと、


$ primusrun glxspheres
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: NVS 4200M/PCIe/SSE2
61.965201 frames/sec - 64.542953 Mpixels/sec
60.067947 frames/sec - 62.566774 Mpixels/sec
60.067172 frames/sec - 62.565967 Mpixels/sec

となりますが、”vblank_mode=0 glxspheres”でも


$ vblank_mode=0 glxspheres
Polygons in scene: 62464
ATTENTION: default value of option vblank_mode overridden by environment.
ATTENTION: default value of option vblank_mode overridden by environment.
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: Mesa DRI Intel(R) Sandybridge Mobile
215.963417 frames/sec - 224.947495 Mpixels/sec
190.518084 frames/sec - 198.443636 Mpixels/sec
189.279573 frames/sec - 197.153604 Mpixels/sec

という結果になりました。
何だこれ?
Sandybridgeが優秀なの???

firefoxもnvidiaを活用するなら


$ primusrun firefox

で十分ということみたい。

まあGPUを活用することでCPUに余計な負荷がかからない、あるいはフレームレートは高いほうが良いのかもしれませんけれど、結局のところ動画鑑賞や最新のA列車、シムシティとかやらない限り、”optirun”と”primusrun”、あるいは”Sandybridge”と”NVIDIA NVS 4200M”の違いはわからないかも。
いわゆる「宝の持ち腐れ」若しくは「猫に小判」・・・ 🙁
 

Ubuntu

インストール済みのbumblebeeのバックエンドはvirtualgl。
もうひとつ、primusというのが速いらしいので試してみました。
Synapticパッケージマネージャーからキーワード”primus”で検索してインストールします。
primusをバックエンドとしてfirefoxを起動するときは


vblank_mode=0 primusrun firefox

とします。
Bumblebee -Ubuntu Wikiに書いている方法($ optirun -b primus アプリ)で起動しても実力は発揮しませんでした比較の意味がありません
glxspheresでそれぞれのバックエンドで性能を確認してみたのが次です。

$ glxspheres ←比較するなら全て同じモードでないと無意味(vblank_mode=0)
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: Mesa DRI Intel(R) Sandybridge Mobile
61.670797 frames/sec – 64.236302 Mpixels/sec
60.037847 frames/sec – 62.535421 Mpixels/sec
60.079538 frames/sec – 62.578847 Mpixels/sec

$ optirun glxspheres ←比較するなら全て同じモードでないと無意味(vblank_mode=0)
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: NVS 4200M/PCIe/SSE2
125.137578 frames/sec – 130.343301 Mpixels/sec
145.256918 frames/sec – 151.299606 Mpixels/sec
151.477554 frames/sec – 157.779021 Mpixels/sec

$ optirun -b primus glxspheres ←比較するなら全て同じモードでないと無意味(vblank_mode=0)
Polygons in scene: 62464
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: NVS 4200M/PCIe/SSE2
62.150227 frames/sec – 64.735676 Mpixels/sec
60.087967 frames/sec – 62.587627 Mpixels/sec
60.068587 frames/sec – 62.567441 Mpixels/sec

$ vblank_mode=0 primusrun glxspheres
ATTENTION: default value of option vblank_mode overridden by environment.
ATTENTION: default value of option vblank_mode overridden by environment.
Polygons in scene: 62464
ATTENTION: default value of option vblank_mode overridden by environment.
ATTENTION: default value of option vblank_mode overridden by environment.
Visual ID of window: 0x20
Context is Direct
OpenGL Renderer: NVS 4200M/PCIe/SSE2
ATTENTION: default value of option vblank_mode overridden by environment.
ATTENTION: default value of option vblank_mode overridden by environment.
234.551315 frames/sec – 244.308649 Mpixels/sec
236.700252 frames/sec – 246.546983 Mpixels/sec
236.157529 frames/sec – 245.981682 Mpixels/sec

あくまでもglxspheresで単純比較しただけなので、firefoxが劇的に変わることはありません・・・って当たり前ですね:-)
VLCはエラーが出て起動しませんでした。

Ubuntu

Intel HD Graphics 3000に不満があるわけじゃありませんけれど、bumblebeeのversionが3.2.1になったこともあり、久しぶりにBIOSでNvidia Optimusを有効化してみました。
インストールは次のとおり。


sudo add-apt-repository ppa:bumblebee/stable
sudo apt-get update
sudo apt-get install bumblebee virtualgl linux-headers-generic

ターミナルから”$ optirun コマンド”とするとNvidia NVS 4200M有効で立ち上がります。。
私は面倒なのでCair-Dockのランチャーを編集して、クリック時に実行するコマンドを”optirun firefox”や”optirun vlc”として起動しています。
効果はあるのでしょうけれど、Windowsとは異なりOptimusプロファイルに基づく動的な切替じゃない。
GPUを必要とするなら自分で選択、有効にすれば良いという考え方は合理的かと思いますが・・・何だかなぁ。

Ubuntu

efibootmgr、バグらしいです。


$ sudo efibootmgr -c -g -d /dev/sda -p 2 -w -L "Ubuntu" -l '\\EFI\\ubuntu\\grubx64.efi'

上のエントリー追加コマンドを実行すると、syslogに次のようなメッセージが残ります。


kernel: [10760.733894] efivars: set_variable() failed: status=8000000000000009

詳細はこちら。
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1173423
とりあえずrEFIndで起動するから良いけど。

Ubuntu

再起動したら描画が異常に遅くなったのでシステム設定の詳細からグラフィックを確認したところ、ドライバーが次のものに変わっていました。

Gallium 0.4 on llvmpipe (LLVM 3.2, 256 bits)

なんだこれは?とgoogleで調べてみると、どうやらOpenGLのソフトウェア実装らしい。
GNOME ShellがGPU無しで動作するというものですが、実際のところ単に動くというだけで実用には程遠い代物です。
T420sの内蔵GPUはIntel Sandybridge Mobile(HD 3000)。インストール直後は自動で認識したものの、色々設定しているうちに忘れられてしまった?
mesa-utilsをインストールしてglxinfoで確認したのがこれ。


$ glxinfo | grep OpenGL
libGL error: failed to load driver: i965
libGL error: Try again with LIBGL_DEBUG=verbose for more details.
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.2, 256 bits)
OpenGL version string: 2.1 Mesa 9.1.1
OpenGL shading language version string: 1.20
OpenGL extensions:

mesa-utilsをインストールして再起動したら、無事に認識されました。
 
念の為glxinfoで確認したところ、


$ glxinfo | grep "OpenGL"
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) Sandybridge Mobile
OpenGL version string: 3.0 Mesa 9.1.1
OpenGL shading language version string: 1.30
OpenGL extensions:

$ glxinfo | grep direct
direct rendering: Yes

ということで一件落着。

【追伸】
何かの拍子で相変わらずSandybridge Mobileが認識されないことが再現しました。
どうやらX11の自動認識に失敗しているっぽいので、外部モニタ無効化スクリプトを停止して様子を見てみよう。
それでも再現するようなら、ドライバーを明示的に指定した/etc/X11/xorg.confを作ろうかな。
 
外部モニタのときは、X11がモニタを自動認識して画面を複製してくれている、かつ、以前の設定(外部モニタはOFF)を覚えてくれていないというのが問題でした。
これはデュアルブートの場合で、Windowsを起動したときに外部モニタ設定を弄る(認識させる)と、次回ubuntuの起動でも外部モニタを認識してしまうのが原因みたいです。
 

Ubuntu

いままでUbuntuにGNOME-Shellをインストールして使っていました。
でも、Unityを使わないのなら公式派生品?のUbntu GNOMEでいいやと思って、連休で暇だし再インストールを実行。
起動時の紫色の画面が落ち着いた青になっていて、gdmもデフォルトで、Amazonとか余計なものは入ってない・・・ということで大満足です。
 
さっぱりしたUbuntu GNOMEのサイトはhttp://ubuntugnome.org/です。