4
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Linux でブラウザが開くまでの仕組み (未完)

Posted at

とあるアプリに表示されているリンクを選択すると、標準のウェブブラウザが開いてリンク先を表示する。当たり前の動作だが、その時にすでに存在すれば既存のブラウザを利用するようになっている。

  • ブラウザが開いていない場合: ブラウザを起動して URL を表示する。
  • すでにブラウザが開いている場合: 既存のブラウザを前面に出して URL を表示する。

Ubuntu でこの仕組がどのように実現されているのか調べてみた。

まず、「ブラウザ以外のとある画面に表示されているリンクを選択すると、標準のウェブブラウザが開いてリンク先を表示する。」を実現するために Linux では xdg-open というコマンドラインツールがある。github を開くには次のようにする。

$ xdg-open https://github.com

mime-type とデフォルトアプリの対応は /usr/share/applications/defaults.list に記述されている。ただどうやらこれは歴史の名残で、仕様では mimeapps.list を使うべきらしい。

デフォルトアプリを問い合わせる xdg-mime コマンドで確認と登録削除が出来る。text/html のデフォルトアプリを調べてみる。

$ xdg-mime query default text/html
firefox.desktop

という事で、text/html は firefox.desktop に関連付けられている。このファイルは /usr/share/applications/firefox.desktop に存在していて、firefox が開く事が出来る mime type を宣言している。

firefox.desktop のセクション [Desktop Entry] に Exec=firefox %u という記述があるが、ここで %u は URL を表す。結果的に firefox https://github.com が呼び出される。

/usr/bin/firefox はシェルスクリプトで、結果 /usr/lib/firefox/firefox を呼び出す。

結局 /usr/lib/firefox/firefox の中ですでにプロセスが立ち上がっていれば既存のプロセスに URL を渡しているようだ。プロセスをシングルトンにする方法は https://stackoverflow.com/questions/5339200/how-to-create-a-single-instance-application-in-c-or-c 等いくつか見つかったが、URL を渡す方法は良くわからなかった。

参考

4
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?