71

GNOME 3 デスクトップのレイアウトをカスタマイズするよう依頼されました。どうやらそれを行う方法は、「拡張機能」を書くことです。

やりたかったことのいくつかは何とかできましたが、情報がまったく不足しているように感じます。どこにも有用なドキュメントが見つかりません。私は、有益な情報を見つけようと必死になって、ありとあらゆる検索用語を必死にグーグル検索して、人生の丸一日を無駄にしました。

GNOME Web サイトには、何百もの拡張機能がダウンロードできます。これらは単純な 3 ライナーではありません。それらは洗練されたコードです。方法を説明するドキュメントがなくても、誰でもこれらを作成できるという信念に逆らっています。

実際のドキュメントがどこにあるか誰か教えてください。これまでのところ、私ができる最善のことは、私が興味を持っている特定のビットを実行する魔法のコマンドを追跡しようとして、既存の拡張機能を分解することです. (簡単な作業ではありません!)

コマンド名、オブジェクト パス、サンプル プログラム、何でも役に立ちます。

4

2 に答える 2

86

私は最近それを自分で掘り下げました。ドキュメントは通常、まばらであるか、古くなっています。ここに私が始めるのを助けた(そして開発を通して)いくつかの情報源があります:

ドキュメントはほとんど利用できない (または最新のものである) ため、多くのソースを読む必要があります。上記の gnome-shell ソース (JavaScript 部分) をリンクしました。これは、非公式ドキュメント (最も完全なもの) でカバーされていない部分に飛び込むときの良い出発点です。

また、特に役立つのは、作成したいものと同様のことを行う拡張機能について extensions.gnome.org をチェックし、それらのソースを確認することです (それらのほとんどは GitHub または Bitbucket でオープンソースになっています。それらをインストールして見つけることもできます) の下のソース~/.local/share/gnome-shell/extensions/)。

使用するものや特定の関数に関するドキュメントを検索する場合は、さまざまな言語のバインディングのマニュアルを参照することもできます (パラメーターと戻り値が一致しない可能性があります)。


最後になりましたが、デバッグに関するアドバイスを次に示します。

LookingGlass は特に役に立ちません。例外の 1 行 (説明) のみが表示され、起動時 (拡張機能が最初に開始されたとき) に例外が発生した場合にのみ表示されます。

完全な StackTraces と実行時例外については、~/.xsession-errors-file を参照してください。非常に長くて肥大している可能性があります。この便利なスクリプトを使用して読み取ります。

# Grabs the last session-errors from the current X11 session.
# This includes full Stack-Trace of gnome-shell-extension errors.
# See https://live.gnome.org/GnomeShell/Extensions/StepByStepTutorial#lookingGlass
tail -n100 ~/.cache/gdm/session.log | less

Gnome 3.6 以降、gdmディスプレイ マネージャーとして使用している場合、現在のセッション ログはファイルです~/.cache/gdm/session.log

systemd を使用する一部の新しいディストリビューションでは、次のコマンドでエラー ログを取得できます。

journalctl -f /usr/bin/gnome-session

拡張機能の設定部分をデバッグするには、端末から-toolを使用して設定を起動gnome-shell-extension-prefsし、コンソールで例外出力を確認できます (gnome-shell-extension-prefs [uuid]拡張機能の設定を直接表示するために、 のようなツールを呼び出すこともできます)。

現在、ブレークポイントを使用してデバッグする実際の方法がないため (あるが、注意が必要です)、コンソールにログオンして簡単に確認し、-関数を使用できprint()ます。上記の出力が表示されます (sessions-error ファイルまたはgnome-shell-extension-prefs-tool の起動時のターミナル)。


少し入りにくいかもしれませんが、拡張フレームワークは非常に強力です。楽しんでください!


私はもう少し詳細なブログ投稿を書きました。これはここにあります: Making Gnome-Shell Extensions

于 2012-11-09T20:17:24.020 に答える
14

Gnome 開発者 - API リファレンスページには、参考文献の広範なリストがあります。

拡張機能には以下を使用しましたが、使用方法は異なる場合があります。

  • GTK+ 3
    GTK+ は、GNOME アプリケーションでユーザー インターフェイスを構築するために使用される主要なライブラリです。これは、ユーザー インターフェイス コントロールと、ユーザー インターフェイスを制御するためのシグナル コールバックを提供します。

  • GDK 3
    GDK は、ウィンドウ システムの詳細から GTK+ を分離する中間層です。

  • Clutter
    Clutter は、高速で視覚的にリッチなグラフィカル ユーザー インターフェイスを作成するための GObject ベースのライブラリです。

  • GObject Introspection
    GObject Introspection は、(GObject ベースの) C ライブラリと言語バインディングの間のミドルウェア層を提供しようとしています。

  • シェル
    シェル リファレンス マニュアル

  • St
    St - Shell Toolkit - は、便利なアクターを定義する GNOME Shell のカスタム Clutter ベースのツールキットです。これらのアクターの一部は、さまざまなレイアウト オプション StBoxLayoutStBin

  • アイコン テーマの仕様
    このfreedesktop.orgの仕様では、アイコン テーマを格納する一般的な方法について説明しています。

注:これらの最後の 2 つは、ビジュアル要素のパラメーターを見つけるのに非常に役立ちます。

  • PyGTK
    PyGTK は Python 用の GTK+ です。このリファレンスには、クラスの説明を含む各 Python PyGTK モジュール (基礎となる GTK+ ライブラリに対応する) の章が含まれています。

  • PyGObject
    PyGObject は、GObject イントロスペクションを使用して、GNOME ソフトウェア プラットフォーム全体へのクリーンで一貫したアクセスを提供する Python 拡張モジュールです。具体的に言えば、GLib、GObject、GIO、GTK+ の Python Bindings です。
    このリファレンスには、クラスの説明を含む各 PyGObject モジュールの章が含まれています。

于 2012-12-10T05:41:58.637 に答える