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!