gnome-weather は Gjs 製。
その desktop ファイルの名前。
org.gnome.Weather.Application.desktop
これだけでも変だけど、その Exec キー。
gapplication launch org.gnome.Weather.Application
何ですかコレ?
/usr/share に org.gnome.Weather ディレクトリがある。
その中に org.gnome.Weather.Application ファイルがある。
中身は Gjs である、シバンがあるので Gjs で起動できるのは解る。
肝心の JavaScript ソースは同一ディレクトリでバイナリ化されている。
ワカガワカラナイヨ、こんなの見たことがない。
色々検索してみると、どうも DBus 関連らしい。
HowDoI/DBusApplicationLaunching – GNOME Wiki!
コレみたいだが全然ワカランぞ!
Gjs 関連は後日思い立ったら調べるとして。
とりあえず gapplication コマンドは何をしているかを試してみる。
gapplication launch org.gnome.Documents
普通に起動できるんだね、list-apps で表示されるもの以外に
/usr/share/dbus-1/services
にあるサービスなら何でも起動できるようです。
中身は普通の ini ファイルなんですけど。
ならばこんなディレクトリを作り、念の為再ログイン。
~/.local/share/dbus-1/services
org.madoka.Magika.service という名前で以下のファイルを。
残念ながら ~ や $HOME は使えないのでフルパスで。
[D-BUS Service] Name=org.madoka.Magika Exec=/home/sasakima-nao/test.py --gapplication-service
起動するファイル、上記 Exec の指定位置に保存。
+x パーミッションを忘れずに。
#!/usr/bin/env python3
import sys
from gi.repository import Gtk, Gio
class App(Gtk.Application):
    """
        org.madoka.Magika App
    """
    def __init__(self):
        Gtk.Application.__init__(
                self,
                application_id="org.madoka.Magika",
                flags=Gio.ApplicationFlags.FLAGS_NONE )
 
    def do_activate(self):
        self._win = Gtk.ApplicationWindow.new(self)
        self._win.set_title(self.props.application_id)
        self._win.show()
app = App()
app.run(sys.argv)
さあどうだ。
gapplication launch org.madoka.Magika
なるほど、あのコマンドで実行できる仕組みはコレか。
コマンドの処理が戻ってきているから最初から転送扱いみたい。
application_id が一致しないと起動はできるけど終了しない。
–gapplication-service 引数を書かないと何故か2つ起動する
ここまで解ったけど使わないかも。
セッションバスに追加されるようなので何か思いついたらne!

