$ journalctl -b
...
Mar 23 18:18:50 alan-laptop pkexec[31408]: pam_unix(polkit-1:session): session opened for user root by (uid=1001)
Mar 23 18:19:47 alan-laptop org.gnome.Shell.desktop[1711]: libinput error: client bug: timer event5 debounce short: offset negative (-3ms)
...
pkexec
最初の行は、このコマンドのインスタンスであるPID 31408のログメッセージとして理解されます。
org.gnome.Shell.desktop
しかし、私は実行可能ファイルをどこでも呼び出さないと100%確信しています。その名前のファイルが存在しますが、これはXDGデスクトップファイルです。
$ find -xdev -name 'org.gnome.Shell.desktop*' 2>/dev/null
./usr/share/applications/org.gnome.Shell.desktop
$ ls -l ./usr/share/applications/org.gnome.Shell.desktop
-rw-r--r--. 1 root root 8179 Jan 22 10:19 ./usr/share/applications/org.gnome.Shell.desktop
質問
このログメッセージが表示されないのはなぜですかgnome-shell[1711]
?
これはどのように実装されますか?
これがもっと役に立つと思う人はいますか?では、なぜそうなのでしょうか?
環境
Fedora 27
- systemd-234-10.git5f8984e.fc27.x86_64
- GNOMEセッション-3.26.1-1.fc27.x86_64
ベストアンサー1
要約:GNOME Shellはこれを行うことにしました。彼らは同じプロセス内で複数のアプリケーション(アプレット)を実行していたので、XDGメニュー仕様をメッセージに添付された「ラベル」として使用することにしました。
完全な説明は以下です...
したがって、ログは、各メッセージと共に保存された内部フィールドに表示されるsyslogに似たメッセージを合成します。 (形式を使用して内部フィールドを表示できます-o verbose
。)
通常、「ラベル」とも呼ばれるプログラム名を含むフィールドは、次の場所に保存されます。syslog_identifier大地。
(他のプログラムはSYSLOG_IDENTIFIERを使用します。たとえば、デフォルトではlogger
ラベルはラベルを呼び出すユーザーから送信され、-t
このオプションを使用してラベルをオーバーライドできます。)
ログインする方法には大きく3つあります。既存の方法の使用システムログ(3)インターフェイス、systemd サービスから stdout または stderr に書き込むか、デフォルトのロギング インターフェイスを使用します。
GNOMEシェルは特にデフォルトのロギングインターフェイスを使用します。sd_journal_stream_fdAPIこの関数は識別子を最初のパラメーターとして使用し、これはストリームを介して送信されたメッセージのSYSLOG_IDENTIFIERとして使用されます。
ログストリームを初期化するGNOMEシェルコードは、以下にあります。src/shell-app.c、appid
呼び出し元まで追跡された使用は、次のように設定されていることを示しています。g_app_info_get_id。
g_app_info_get_idを調べると、IDはプラットフォームごとに異なりますが、「Unixではxdgメニュー仕様のデスクトップファイルID」であることがわかり、これは観察されたものと一致します。
src/shell-app.cのコードの前には、根拠を説明するコメントがあります。
/* This sets up the launched application to log to the journal
* using its own identifier, instead of just "gnome-session".
*/
つまり、GNOME Shellは(アプレットを介して)複数のアプリケーションを実行しているので、GNOME Shell開発者は、ログメッセージでXDGメニュー仕様を使用してどのアプレットが生成されるのかを知ることができるようにするのがより適切だと思いました。
これらのロギングストリームは、Xwaylandなどのすべての子プロセスから継承することもできます。この場合、ラベルの後のPIDは、fdにメッセージを書き込む子プロセスではなく、stream_fdを開くプロセスであるgnome-shellを参照しているようです。次のログメッセージはXwaylandサーバーがクラッシュしたことを示していますが、PID 3493はXwaylandではなくgnome-shellのPIDです。
3月17日 18:08:39 alan-laptop org.gnome.Shell.desktop[3494]: (EE) 信号 7 をキャッチしました (バスエラー)。サーバーがハングしました