的所有内容都Xorg.n.log
可以通过查看journalctl
。正如Xorg
由(如果我理解正确的话)启动的GDM
,它总是具有--identifier=/usr/libexec/gdm-x-session
.但尽管开头给出了这个提示Xorg.n.log
:
/usr/libexec/gdm-x-session[3193]: Markers: (--) probed, (**) from config file, (==) default setting,
/usr/libexec/gdm-x-session[3193]: (++) from command line, (!!) notice, (II) informational,
/usr/libexec/gdm-x-session[3193]: (WW) warning, (EE) error, (NI) not implemented, (??) unknown.
所有消息的日志级别均为 4(警告)。这会导致大量带有(**)
, (==)
,的行(II)
被错误地标记为警告,这使得很容易错过实际的警告。更重要的是,(EE)
消息的日志级别也为 4,这对我来说似乎是严重错误的。
一种可能的半解决方案是通过正则表达式Xorg
完全过滤掉信息性消息,(可能因为journald v253-rc1
)。
另一种方法是使用一些复杂的管道 grep 来检查journalctl
输出(如果有人知道如何实现这一点,请解释一下,我对此是个菜鸟)。
但道路当然是Xorg
首先以适当的日志级别写入消息,而我在这里完全迷失了。内容如何Xorg.n.log
最终出现在期刊中?这是GDM
,还是Xorg
,或者,journald
的工作?其中哪个决定导入消息的日志级别?是否有可能在不重写和重新编译所有内容的情况下劫持该进程?当然,我应该提交一个与此相关的问题,以及哪个项目?谢谢。
版本信息:Pop!_OS 22.04 LTS x86_64、6.2.6-76060206-generic、GNOME 42.5、X.Org X Server 1.21.1.4、systemd 249 (249.11-0ubuntu3.7pop1~1681329414~22.04~2e1d714)
答案1
“X 目前是最后一个主流守护进程之一,它不提供记录到 syslog 的方法”...“fwiw,GDM 现在启动 X 服务器专门记录到 stdout,然后 GDM 将其转发到 systemd 日志”。
我预计 gdm-x-session 决定使用“警告”作为默认值,而不是“信息”。
是否有可能在不重写和重新编译所有内容的情况下劫持该进程?
我不这么认为!
我认为让它使用系统日志就足够了——它不需要特定于日志——但这需要工作。
一项挑战是 X 服务器被设计为例如记录其自己的段错误。因此它应该能够从信号处理程序工作(对于某些“工作”值)。
/* This function does the actual log message writes. It must be signal safe.
* When attempting to call non-signal-safe functions, guard them with a check
* of the inSignalContext global variable. */
static void
LogSWrite(int verb, const char *buf, size_t len, Bool end_line)
相反,我建议让 gdm-x-session 解析 X 日志级别标记。这类似于 systemd 对日志级别前缀所做的事情 -
系统日志级别前缀=
采用布尔参数。如果 true 且 StandardOutput= 或 StandardError= 设置为 Journal 或 kmsg(或与 +console 组合的相同设置),则由已执行进程写入的以日志级别为前缀的日志行将使用此日志级别集进行处理,但前缀被删除。如果设置为 false,则禁用这些前缀的解释,并且记录的行按原样传递。这仅适用于写入 stdout 或 stderr 的日志消息。有关此前缀的详细信息,请参阅SD 守护进程(3)。默认为 true。
对于启动 XWayland 的任何事情来说,这可能都不那么重要,因为 XWayland 在高兴时不会发出任何日志。例如,在启动过程中似乎没有记录有关“Markers:”的解释。因此,如果所有 XWayland 消息都被标记为警告,那并不是什么大问题。