So-net無料ブログ作成

【Ubuntu 11.10】Gnome Shell (3.1.91) をグローバルメニュー化(Gnome Shell Global Menu) [ubuntu]

---2011/9/28 追記 ---

Gnome Shell 3.1.92になって、再度入れなおす必要があります。

本記事の手順を始めからやって下さい。ただ、手順7)はする必要が無くなりました。

---2011/9/28 追記終わり---

Gnome Shellをグローバルメニュー化する方法が下記に載ってました。

http://www.webupd8.org/2011/09/get-global-menu-in-gnome-shell.html

試しに私もトライ。

SS-gnome-globalmenu-002.jpeg

動きますね・・・

それでやり方は、始めに示したリンクの通りなのですが、英語なので簡単にやり方を紹介します。

 

<< インストール方法 >>

1) 環境を整える。

sudo apt-get install git-core valac-0.12 libvala-0.12-dev libgtk-3-dev gobject-introspection libgirepository1.0-dev libgtk2.0-dev autotools-dev automake autoconf intltool libtool

2) 作業ディレクトリの作成と0.9 alpha 5の展開

cd

mkdir -p globalmenu

cd globalmenu

wget http://gnome2-globalmenu.googlecode.com/files/gnome-globalmenu-0.9.alpha5.tar.bz2

tar -xvf gnome-globalmenu-0.9.alpha5.tar.bz2

4) gitからソースを持ってくる

git clone git://github.com/gnome-globalmenu/gnome-globalmenu.git

5) ブランチを行い、一部のファイルを入れ替える。

cd gnome-globalmenu

git checkout gnome-3

cp ../gnome-globalmenu-0.9.alpha5/src/{module.c,header.h,header-gtk2.h} ./src

6) ビルド&インストール

autoreconf --force --install --verbose

./autogen.sh --prefix=/usr

make

sudo make GTK2_MODULES_DIR=/usr/lib/gtk-2.0/modules GTK3_MODULES_DIR=/usr/lib/gtk-3.0/modules GLIB_COMPILE_SCHEMAS=/bin/true install

sudo glib-compile-schemas /usr/share/glib-2.0/schemas

sudo ln -sfv /usr/lib/gtk-2.0/modules/libglobalmenu-gtk2.so /usr/lib/gtk-2.0/modules/libglobalmenu-gtk.so

※後でブログを見直した時に、ブログの折り返しの都合でどこまでが1つのコマンドか分りませんでした。(*_ _)人ゴメンナサイ。 空行毎に一行です。なのでブログで、押し返してあっても上の行とくっついていれば1つの行のコマンドです。

 

7) バージョンに合わせてエクステンションを修正

cd /usr/share/gnome-shell/extensions/GlobalMenu@globalmenu.org/

sudo vi metadata.json

ここで、 "shell-version": ["3.0.4"]とかなっている部分を "shell-version": ["3.1.91"] に修正します。基本的に括弧内のバージョンが現在使用しているgnome-shellのバージョンと一致していればよいです。

gnome-shellのバージョンは端末から gnome-shell --version で出ます。私はtistaさんのPPAを使用しているので3.1.91です。

次に、下記でextensions.jsを開きます。

sudo vi extension.js

まず、 tracker.connect('app-state-changed' と書いてある部分を探します。そしたら、その行を削除して下記の2行に書き直します。

        let appSys = Shell.AppSystem.get_default();
        appSys.connect('app-state-changed', Lang.bind(this, this._onAppStateCha
nged));
 

それで、最後の方に行って、「function main() {」 という行を探します。それを、 「function init(metadata) {」に書き直します。さらにファイルの最後に下記を追記します。

function enable() {
    //indicator = new Indicator();
}

function disable() {
    indicator.destroy();
}

これでセーブします。diffの方が分かりやすい方の為に下記に載せておきます。

diff -urN a/extension.js b/extension.js
--- a/extension.js    2011-09-10 14:11:32.284649321 +0900
+++ b/extension.js    2011-09-10 14:11:57.632648748 +0900
@@ -417,7 +417,8 @@
 
         let tracker = Shell.WindowTracker.get_default();
         tracker.connect('notify::focus-app', Lang.bind(this, this._sync));
-        tracker.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged));
+        let appSys = Shell.AppSystem.get_default();
+        appSys.connect('app-state-changed', Lang.bind(this, this._onAppStateChanged));
 
         global.window_manager.connect('switch-workspace', Lang.bind(this, this._sync));
 
@@ -775,7 +776,7 @@
     Mainloop.timeout_add(3000, function () { text.destroy(); });
 }
 
-function main() {
+function init(metadata) {
     var leftChildren = Main.panel._leftBox.get_children_list();
     var oldAppMenuButton = leftChildren[leftChildren.length - 1];
     Main.panel._leftBox.remove_actor(oldAppMenuButton);
@@ -785,3 +786,11 @@
     Main.panel._leftBox.add(button.actor);
     Main.panel._menus.addMenu(button.menu);
 }
+
+function enable() {
+    //indicator = new Indicator();
+}
+
+function disable() {
+    indicator.destroy();
+}

8)環境変数の設定。

cp ~/globalmenu/gnome-globalmenu/globalmenu.sh /etc/profile.d/
sudo chmod +x /etc/profile.d/globalmenu.sh

これでまずログアウト&ログインします。※gnome-shellの再起動でも可能。但し、再起動時に起動していたアプリケーションにはGlobalmenuは適応されません。

9) global menu extensionの有効化

gnome-tweak-toolを使ってShell Extensionsの設定をします。

SS-gnome-globalmenu-003.jpeg

GlobalMenu Extension をオンにしたときにはWindo List Extensionはオフにしてください。どちらもオンになっていると1つアプリを立ち上げるとパネルに2つアプリが表示されます。

余談ですが、Delta-Shellの場合、下図のようになります。

SS-gnome-globalmenu-001.jpeg

以前、『【Ubuntu 11.10:Gnome3】Oneiric Alpha 3でGnome Shellを動かすと、デスクトップの上部パネルの背後にメニューバーが出てしまう問題。(Unity以外の環境なら同じ問題が発生する可能性あり)』という記事を書きました。

この時下図のように、パネルの下にメニューが出ていました。

SS-gnome-shell-oneiric-001.JPG

上図の2つを大きくして(クリックして)よく見てもらうとわかるのですが、Gnome Shell Global Menuを入れると(1つ上の図)、メニューの項目は無くなっています。ただ、3mm程度上に白い部分が残ってます。

私の予想ですが、デスクトップの管理の為にNautilusが立ち上げたのにも関わらず、メニュー項目を表示しているのだと思います。 UnityでもGnome Shellでもglobalmenuが動いていると、globalmenuが表示項目を受け取るのですが、どこにも表示できないので、見えないだけではないかと予想しています。

 

 ←ワイヤレスマウス

   1000円ちょっとでワイヤレスマウス。
   ワイヤレスマウスにはあまりよい思い出がない。
   でも、これだけ安いとダメ元でと思ってしまいます。
   しかし、マウスって消耗品ですね。 


nice!(1)  コメント(0) 
共通テーマ:パソコン・インターネット

【Ubuntu 11.10】Unity 4.14.2になってDashメニューを開くと、ボタン(閉じる/最小化/最大化)にテーマが適応されなくなった。(仮対処) [ubuntu]

2011/9/10にアップデートしたらUnityが4.14.2になりました。

そしたら、Dashメニューを開くと右上のボタン(閉じる/最小化/最大化)ボタンにテーマが適応されなくなりました。

SS-Dash-button-002.jpeg

それで、調べてみたところ、Dashメニューのパネル上のボタンはWindowsButton.cppのファイルでGetDashWindowButtonとGetDashMaximizeWindowButtonという関数を呼んでイメージを独自に取得していました。

取得する先のイメージファイルは、/usr/share/unity/4 内にある、ファイル名にdashという文字が入っているファイルです。

せっかくテーマがあるのに使えないのは、もったいなので適当に直してしまいました。

Dashメニューを開いたスクリーンショット。

SS-Dash-button-003.jpeg

Dashメニューを最大化したスクリーンショット。

SS-Dash-button-004.jpeg

上図の2つのスクリーンショットをよく比べてみると、左上の3つ並んでいるうちの一番右の「最大化ボタン」がちょっと違います。

これ、まだバグがあってログインして最初にDashメニューを開いた時には、最大化ボタンの初期イメージが間違ってます。一度、最大化を行うと正常に戻るのですが・・・

 

<< 直し方 >>

まってれば直ると思うので簡単に。。。

それに下記の方法は私独自の方法なので、非推奨です。

1) Unityのビルド環境を整える。

2) 下記のパッチを当てる。(または、下記を見て編集する)

diff -urN unity-4.14.2.org/plugins/unityshell/src/PanelStyle.cpp unity-4.14.2/plugins/unityshell/src/PanelStyle.cpp
--- unity-4.14.2.org/plugins/unityshell/src/PanelStyle.cpp    2011-09-09 00:14:39.000000000 +0900
+++ unity-4.14.2/plugins/unityshell/src/PanelStyle.cpp    2011-09-10 08:56:34.109067608 +0900
@@ -154,7 +154,7 @@
 PanelStyle::GetWindowButton(WindowButtonType type, WindowState state)
 {
   nux::BaseTexture* texture = NULL;
-  const char* names[] = { "close", "minimize", "unmaximize" };
+  const char* names[] = { "close", "minimize", "unmaximize","maximize" };
   const char* states[] = { "", "_focused_prelight", "_focused_pressed" };
 
   std::ostringstream subpath;
diff -urN unity-4.14.2.org/plugins/unityshell/src/PanelStyle.h unity-4.14.2/plugins/unityshell/src/PanelStyle.h
--- unity-4.14.2.org/plugins/unityshell/src/PanelStyle.h    2011-09-09 00:14:39.000000000 +0900
+++ unity-4.14.2/plugins/unityshell/src/PanelStyle.h    2011-09-10 08:57:07.453066852 +0900
@@ -31,7 +31,8 @@
   {
     WINDOW_BUTTON_CLOSE = 0,
     WINDOW_BUTTON_MINIMIZE,
-    WINDOW_BUTTON_UNMAXIMIZE
+    WINDOW_BUTTON_UNMAXIMIZE,
+    WINDOW_BUTTON_MAXIMIZE
 
   } WindowButtonType;
 
diff -urN unity-4.14.2.org/plugins/unityshell/src/WindowButtons.cpp unity-4.14.2/plugins/unityshell/src/WindowButtons.cpp
--- unity-4.14.2.org/plugins/unityshell/src/WindowButtons.cpp    2011-09-09 00:14:39.000000000 +0900
+++ unity-4.14.2/plugins/unityshell/src/WindowButtons.cpp    2011-09-10 09:35:23.377014982 +0900
@@ -244,7 +244,7 @@
 
   nux::BaseTexture* GetDashWindowButton(PanelStyle::WindowButtonType type, PanelStyle::WindowState state)
   {
-    const char* names[] = { "close_dash", "minimize_dash", "unmaximize_dash" };
+/*    const char* names[] = { "close_dash", "minimize_dash", "unmaximize_dash" };
     const char* states[] = { "", "_prelight", "_pressed" };
 
     std::ostringstream subpath;
@@ -256,12 +256,16 @@
     glib::Object<GdkPixbuf> pixbuf(gdk_pixbuf_new_from_file(filename.Value(), &error));
 
     // not handling broken texture or missing files
-    return nux::CreateTexture2DFromPixbuf(pixbuf, true);
+    return nux::CreateTexture2DFromPixbuf(pixbuf, true); */
+
+    PanelStyle* style = PanelStyle::GetDefault();
+
+    return style->GetWindowButton(type, state);
   }
 
   nux::BaseTexture* GetDashMaximizeWindowButton(PanelStyle::WindowState state)
   {
-    const char* states[] = { "", "_prelight", "_pressed" };
+/*    const char* states[] = { "", "_prelight", "_pressed" };
 
     std::ostringstream subpath;
     subpath << "maximize_dash" << states[state] << ".png";
@@ -271,8 +275,13 @@
     glib::Error error;
     glib::Object<GdkPixbuf> pixbuf(gdk_pixbuf_new_from_file(filename.Value(), &error));
 
-    // not handling broken texture or missing files
-    return nux::CreateTexture2DFromPixbuf(pixbuf, true);
+    // not handling broken texture or missing files
+    return nux::CreateTexture2DFromPixbuf(pixbuf, true); */
+
+    PanelStyle* style = PanelStyle::GetDefault();
+
+    return style->GetWindowButton(PanelStyle::WINDOW_BUTTON_MAXIMIZE, state);
+
   }
 };
 
3) ビルドして、 作成したunity_4.14.2-0ubuntu1_i386.debから/usr/lib/compiz/libunityshell.so をインストールされているものと置き換える。

4) /usr/share/themes/<テーマ名>/unityもしくは~/.themes/<テーマ名>/unityの中にmaximize.png, maximize_focused_prelight.png, maximize_focused_pressed.pngを作成する。(Ambianceのテーマは作成しなくても、既にあります。)

5) Unityをリスタートする(ログアウト&ログインでもOK)

これで一応直ります。(他に影響があるかは調べてません。)

Dashメニューのボタンくらいは直してから公開して欲しかった・・・

 

 ← USB ライト

    USBに差して使うライト
    手元の細かい所を見るのにいいかも・・
    でも、私の場合は汚れも沢山見える可能性が・・・


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット
メッセージを送る