“org.gnome.Shell.desktop”是什麼意思171117111711:“在systemd日誌中的意思?
$ 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) ...
我將第一行理解為來自 PID 31408 的日誌消息,它是
pkexec
命令的一個實例。但我 100% 確定我沒有在
org.gnome.Shell.desktop
任何地方呼叫的執行檔。確實存在具有該名稱的文件,但它是 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]
?這是如何實施的?
有人認為這樣會更有用嗎?如果是這樣,為什麼?
環境
軟呢帽 27
- systemd-234-10.git5f8984e.fc27.x86_64
- gnome-session-3.26.1-1.fc27.x86_64
TL;DR:決定這樣做的是 GNOME Shell。他們在同一個程序中執行多個應用程序(小程序),因此他們決定使用 XDG 菜單規範作為附加到消息的“標籤”。
完整解釋如下…
因此,日誌綜合了您從與每條消息一起儲存的內部欄位中看到的類似 syslog 的消息。(您可以使用
-o verbose
格式查看內部欄位。)通常帶有程序名稱的欄位,也就是“標籤”,儲存在SYSLOG_IDENTIFIER欄位中。
(其他程序使用 SYSLOG_IDENTIFIER。例如,
logger
預設情況下會從呼叫它的使用者發送標籤,您可以使用該-t
選項覆蓋它。)有 3 種主要的日誌記錄方式,或者使用傳統的syslog(3)介面,通過從 systemd 服務寫入 stdout 或 stderr,或者使用本機日誌介面。
GNOME Shell 使用本機日誌介面,特別是sd_journal_stream_fd API。該函式將標識符作為第一個參數,然後將其用作通過該流發送的消息的 SYSLOG_IDENTIFIER。
初始化 journald 流的 GNOME Shell 程式碼可以在src/shell-app.c中找到,並且追溯到
appid
呼叫者的 used 表明它是使用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 似乎是指 gnome-shell,即打開 stream_fd 的程序,而不是向 fd 寫入消息的子程序。下面的日誌消息顯示 Xwayland 伺服器崩潰,但 PID 3493 是 gnome-shell 的,而不是 Xwayland 的。
3 月 17 日 18:08:39 alan-laptop org.gnome.Shell.desktop
$$ 3494 $$: (EE) 擷取信號 7(匯流排錯誤)。伺服器中止