Start to build GNOME 3.14, but….

もう2014年もあと一ヶ月となってしまった所で、昨年のアップグレード以来ほとんどビルドしていなかった GNOME リリースの最新版でもビルドしてインストールでも始めようかと環境を整えていたら、なんと GNOME.org のアカウントが無効になっていた。最後にアクセスしたのは確か今年の7月くらいなんだけど、それから半年近く経ってから checkout してもアクセス権が無いとかで弾かれてしまう。アカウントの連絡先のメールアドレスは gnome.gr.jp ドメインであり、最後に引っ越しした後に forwarding 設定をしていたような記憶もあるが、まったく No Any Notifications だった。まぁ、いいか :|
ということで、今迄は常に Ubuntu の最新版のリリース上でビルドしていたけど、これからは LTS リリースをベースにビルドすることにした。Security Packages 以外のアップグレードの寿命がかなり短いから。

GNOME 3.6 rc.

来週の公式リリースに向け、3.6 beta に続いて 3.6 rc の tarballs が今日からぼちぼちと upload されている模様。beta 時に作成した My debs パッケージらをさくさくと更新しビルド・インストールしてみる。今の環境がいくぶん不安定な beta なのでビルドの順番にかかわらずどんどんアップグレードしていく予定。
beta 環境とはいえ普通に使えているのだけれど、新機能、特に gnome-shell のスクリーンシャッター (画面のロックに相当) のバグのために、画面のロックを解除できないのは致命的だった (その際は、バックグラウンドから gnome-shell に SIGHUP を発行して対処していた)。
そこで beta からのバグ修正や新機能については都度まとめることにする。
まずは vte-0.34.0 の NEWS をみてみると、端末上に QR コードなんかを描画する際のバグが修正されたとかある:

0.34.0
======
* Support escape sequences to set the current directory (#675987)
* Fixed drawing of Box Drawing and Block Elements characters (#682692)
* Introspection fixes (#679805, #681714)
* Build fixes

早速インストールしてみると、tree コマンドでツリーを描画している棒線部分が強調されて表示されていた:
vte-0.34.0-BlockElementChars.png
大分前のバージョンでもこんな描画バグが話題になっていたような気もするが。あと、tmux で画面を分割する線なんかも同様に太くなって分かりやすい。
前回こきおろした Nautilus だけれども特に改善の傾向はみられないようなので、以前、変更したサイドバーのカテゴリを入れ替えるパッチをこのバージョン向けに更新してみた。今回はサイドバーの一番下にネットワークの参照があるので、それをブックマーク一覧の上に移動しただけ:
NautilusChangeSidebarOrder-20120918.png
あと GNOME シェルの拡張機能で、前のバージョンの 3.4 からお気に入りで使っているマウス等のホィールでワークスペースをくるくる切り替えるものがあったのだけれど、新バージョンの 3.6 (実際はバージョン 3.5.91) 向けに公開されているものワークスペースの左端にポインタを移動してホィールを回すタイプであり、お気に入りで使っていた右端に移動させる (i.e. ポインタを動かすことなくほぼ定位置の) タイプではなかったので、ちょっと修正して使っている:

--- extension.js.Left	2012-09-18 23:59:56.086201915 +0900
+++ extension.js	2012-09-16 22:16:57.583671301 +0900
@@ -23,12 +23,12 @@
Scroller.prototype = {
_init: function() {
-		let y = Main.panel.actor.get_height() + Main.panel._leftCorner.actor.get_height()
+		let y = Main.panel.actor.get_height() + Main.panel._rightCorner.actor.get_height()
this.actor = new Clutter.Rectangle({
-			name: 'left-scroller',
+			name: 'right-scroller',
opacity: 0,
reactive: true,
-			'x': 0, 'width' : WIDTH_px,
+			'x': Main.layoutManager.primaryMonitor.width - WIDTH_px , 'width' : WIDTH_px,
'y': y, 'height': Main.layoutManager.primaryMonitor.height - y
})

左端でホィールを回す仕様は、右端でホィールを回すとワークスペースではなく、ブラウザなどのアプリケーションのスクロールバーが反応するからといったのが理由だと思うけど、右端へ移動したポインタは画面の外にでるのでそうそうは衝突することはないかな。
(とりあえず、こんなところまで)

GNOME 3.6 beta 2.

今月は 9/26 にリリース予定の GNOME 3.6 だけれども、そろそろパッケージを作成しつつ、ついこないだアップグレードが完了したばかりの安定版を置き換えていこうということで、いつもと同様に Ubuntu の次期バージョンから K35 やら toolchain やらを含むミドルウェアに順次アップグレードし (起動や一般的な作業に影響のない範囲で) 新しい環境を構築してから、3.5.91 のパッケージをそれぞれビルド・インストールしてみた。
まだまだ完了まではほど遠いものの、なんとか先週末までで GNOME シェルを起動するところまで終わったので、すこしばかり気づいたり気に入らない点 :(などをまとめてみる。公式リリースまで 2weeks ほどしかないので、今の状態からどれだけ改善(?)されるか楽しみではある。
ちなみに今回から GNOME シェルは (前のバージョン 3.4 ではモード化されていた経緯で) GDM のバージョン 3.6 との連携が必須となっており、シェルをインストールする前に GDM の 3.6 相当をインストールしておかないとXを含め全く何も起動できなくなってしまう :$。この辺りまで到達すると流石に古い GNOME シェルはアンインストールする必要があるので、フォールバックモードで compiz を使ったデスクトップ環境上でパッケージを作成・ビルド・インストールした。
まずはそのログイン画面から。GDM が起動するとこんな感じ:
ScreenShot-GDM3.6-01.png
この画面が出るまでにちょっと cool なエフェクトがある。反転しているカーソルを動かしてログインユーザを確定すると:
ScreenShot-GDM3.6-02.png
セッションを選択するなどして、パスワードを入力してログインするのはいつもと同じ。ちなみに、このログイン画面の一部は GNOME シェルなのでカレンダを表示することができ、さらに一定の時間ログインされないと時刻つきのスプラッシュスクリーンが表示される。このスクリーンは所謂 (いわゆる)「シャッター式」なので、ポインタをドラッグして上に押しやるとログイン画面が出てくるという演出つき:
ScreenShot-GDM3.6-03.png
ScreenShot-GDM3.6-04.png
ScreenShot-GDM3.6-05.png
で、ログインすると 3.4 で使っていたアプリを含む、新しいデスクトップが表示される。当然ながら古い 3.4 で使っていたテーマや拡張機能は完全には利用できない。そのあたりはアップグレードする際の留意点でもある。今まで使い慣れたシェルの拡張機能が直ぐに使えるようになるとは限らないので、アップグレードするタイミングを見極めるのは面倒かも。しかしながら既に 3.6 をサポートしたものがあり、ブラウザから e.g.o に接続すれば、このバージョンで利用できるプラグインだけフィルタリングされて表示されるようになっていて便利ではある。
ということでテーマはデフォルトの Adwita:
Screenshot-Desktop-01.png
今まで同様にカレンダも付いているし:
Screenshot-Desktop-02.png
以前は右端にあったエントリが中央に移動したものの検索機能も使える。日本語の入力しづらさは以前よりちょっとだけ改善されている (連続して変換しながら入力できるので):
Screenshot-Desktop-03.png
Screenshot-Desktop-04.png
プリミティブな部分に移してみると、GTK+ は CSS を使ったアクションが多彩になった (今バージョンはそれくらいか?):

ScreenShot-GTK3-CSS-Accordion-01.png ScreenShot-GTK3-CSS-Accordion-02.png

「システムの設定」(gnome-control-center) はあまり大きな変化は無いけれど、それぞれのアイコンが大きめになってユーザビリティが向上している:
Screenshot-GnomeControlCenter3.6-01.png
Screenshot-GnomeControlCenter3.6-02.png
Ubuntu 12.10 から、GConf のブリッジを使用しなくなり (といってもこれ自体がパッチだったのだけれど) GSettings に一本化されたため、compiz などで使用していたワークスペースを上下に移動する際のキーバインディングなど UI からは指定できなくなっている。個人的には非常に不便きまわりない :|
で、今バージョンでホント使えなくなったアプリが「ファイルの一覧」(Nautilus)。これをインストールして最初に起動した時の落胆は表現しがたい :o:
Screenshot-Nautilus3.6.png
タイムスタンプの表記がまともに国際化されていないなどまだまだ完成度が低いものの、サイドペインのツリー表示やコンパクトビュー、ペインの分割といった機能がばっさり無くなってしまって自分としては全く利用価値がないアプリになってしまった (コンパクトビューの機能をドロップしろと報告した人は、コンパクトビューはリストビューを縮小表示すれば同じだとかぬかしていたな。えっ!? これがあっさり採用されるのだから、これまた恐ろしいものだ)。本気で前のバージョンに戻そうか考えている。
次は「ディスク」(gnome-disk-utility)。これは作者が G+ なんかでも自慢していたとおり良くできているし使いやすい:
Screenshot-GnomeDisks3.6.png
次は「インターネット・メッセージ送信ツール」(empathy)。GtkApplication クラスに対応し UI が変わったくらいかな。UOA (Ubuntu Online Accounts) とか使わなそうな機能が付いていたような気もするが:
Screenshot-Empathy3.6.png
GtkApplicationクラスは全く利用価値が分からないな。ショートカットキーも使えないし、ウィンドウにフォーカスを与える際は Sloppy モード (マウスがウィンドウの上に移動したら自動的にフォーカスを与える) を使っているので使い勝手が最悪。
最後に「画面のロック」。これは gnome-screensaver ではなく GNOME シェルの機能 (スクリーン・シールド!?)。GDM のスプラッシュスクリーン同様のエフェクトを持つ。ロックを解除する時は [Esc] キーを押下する。このバージョンでは何回かに一度はクラッシュしてしまうが…:
Screenshot-ScreenLock3.6-01.png
Screenshot-ScreenLock3.6-02.png
といった感じ。その他のアプリは未だインストールしていないし、(この時期にしては) バグも多いので公式リリースがどの程度の完成度になるかは不明だけれど (びっくりするほど) 大きな違いは無いだろうと予想する。
ちなみに自分の環境では、ibus のフレームワーク抜きでビルドしている。
GNOME 3.x になってから、新しい機能ばかり重点がおかれて、今まで慣れ親しんだ機能をばっさり切り落とすようなポリシーが目立ってならない。

Embeddeding an icon path into .desktop file.

調べるのに時間がかかった割にはすぐにも忘れちゃいそうな些細なテクニック。
make 時にデスクトップ・ファイル (.desktop) の中に独自のアイコンパスを埋め込む (というか、置き換える) 方法。
最近の GTK+ 系アプリならばアイコンテーマに準拠したアイコンを自前で用意してインストールしておけば、ファイル名ではなく名前でアイコンを探す方法を .desktop ファイルでも利用できる。例えば、こんな感じで:

$ grep Icon /usr/share/applications/anjuta.desktop
Icon=anjuta
$ ls -1 /usr/share/icons/hicolor/*/*/anjuta.png
/usr/share/icons/hicolor/16x16/apps/anjuta.png
/usr/share/icons/hicolor/22x22/apps/anjuta.png
/usr/share/icons/hicolor/24x24/apps/anjuta.png
/usr/share/icons/hicolor/32x32/apps/anjuta.png
/usr/share/icons/hicolor/48x48/apps/anjuta.png

しかしながら、アイコン・セットを用意できない (したくない) 場合や独自のアイコン・ファイルを $(datadir) 配下の独自フォルダにインストールして、それを .desktop ファイルから参照する際は、そのアイコン・ファイルのパス名を指定しておく必要がある。例えば、こんな風に:

$ grep Icon /usr/share/applications/gip-ng.desktop
Icon=/usr/share/gip-ng/ui/gip.png

Makefile の中で sed コマンドを使った置き換えがてっとり早いけど、.desktop.in から intltool を使ってローカライズした結果も反映させたいので巧い方法がないか調べてみた:

  • make 中に自動で置き換えたい
  • @INTLTOOL_DESKTOP_RULE@ と衝突することなく連携させたい

後者は .desktop.in の段階で ja.po ファイルに従って日本語に展開されて .desktop ファイルが生成されるようになっているので、同様に .desktop.in を生成する際に Icon のエントリを sed などで文字列を置換するのが適当じゃないかと。
ということで、まずテンプレート (例: gip-ng.desktop.in.in) を作成しておく:

[Desktop Entry]
_Name=IP Address Calculator
_GenericName=IP Adress Calculator
_X-GNOME-FullName=gip IP Adress Calculator
_Comment=Calculate IP addresses and networks
Categories=GNOME;GTK;Utility;
Exec=gip-ng %U
Icon=@UIDIR@/gip.png                  <>
MimeType=application/x-gip;
StartupNotify=true
Terminal=false
Type=Application
X-GNOME-Bugzilla-Bugzilla=Mikeforce
X-GNOME-Bugzilla-Product=gip-ng
X-GNOME-Bugzilla-Component=utility
X-GNOME-Bugzilla-Version=@VERSION@    <>

このファイルの中にある置換文字を sed を使って妥当なデータで置き換えるために Makefile.am の記述を次のようにする:

NULL=
(中略)
## Icons for UI, Misc
uidir = $(pkgdatadir)/ui
(中略)
## Desktop File
gip-ng.desktop.in: gip-ng.desktop.in.in
@sed -e "s|@UIDIR@|${uidir}|g"                  \
-e "s|@VERSION[@]|${VERSION}|" $ $@
desktop_in_in_files = \ gip-ng.desktop.in.in \ $(NULL) desktop_in_files = \ gip-ng.desktop.in \ $(NULL) desktopdir = $(datadir)/applications desktop_DATA = \ gip-ng.desktop \ $(NULL)
@INTLTOOL_DESKTOP_RULE@ (中略)

みたとおりで、intltool に渡す一つ手前の段階でアイコンのパス名を埋め込むといった流れ。
ちなみに、置換せずにアイコン名だけで参照するならば上から5行目は不要。

Oh boy, postponed GNOME 3.0 release again!?

GNOME 3.0 Rescheduled for September 2011 Release” なんていうメールが届いていたようだけれど April 1st ネタだろうか。ネタだろうな。そのメールの1分後には “TARBALLS DUE (before Monday 23:59 UTC!, don’t forget translators!): GNOME 3.0.0 Final Release” なんてのが届いているしな。
既に当初のリリース予定である昨年9月から半年延びているけど、1年先延ばしになるってのは前例がないような。前の GNOME 2.0 リリースの時だってそんなにまごつかなかったと記憶しているけども。
ところで, やっと gnome-shell のビルドが完了した。どうもネックだった gnome-bluetooth のビルドで、dpkg-shlibdeps を使った依存関係の生成が symbols ファイルで提供できていなかった模様。
ということで、今はこんな感じで gnome-shell をテスト中。のちほど紹介する予定。