进一步阅读

进一步阅读

网络上流传着许多想要dmesg实时观看输出结果的人提出的问题。所有建议和答案都涉及使用dmesg -wtailjournalctl -f配置 systemd 和/或 syslog 以将 dmesg 信息输出到特定控制台等。

我陷入了一个不寻常的情况:我也需要实时查看 dmesg(内核调试)输出,但是在用户空间冻结的计算机上。(详情见下文)

如果我启动一个非常准系统的内核init=/bin/bashAlt++SysRqh立即打印神奇的 SysRq 帮助文本,即使没有 syslog 或类似的进程正在运行。这个例子证明内核可以直接将 dmesg 信息打印到屏幕上,而无需用户空间的任何帮助。

不幸的是,我的 Arch Linux 系统的一个组件正在吃掉内核打印的消息,然后它们才会到达屏幕,即使我console=tty1 loglevel=9的内核命令行中有。在 tty1 处按Alt+ SysRq+h似乎没有任何作用,直到我手动使用 去钓鱼dmesg | tail

(编辑:)评论建议使用setterm来启用消息。我很惊讶地发现这没有造成明显的影响。

我猜 systemd 的日志需要重新配置。我不知道从哪里开始。


细节/背景:

我的笔记本电脑(一台旧的但仍然有用的 ThinkPad T400)有时会任意决定从挂起恢复时锁定。 ACPI 唤醒工作正常,恢复视频,背光工作正常,键盘工作,在控制台之间切换(只要我小心地避免 X 打开)工作,甚至向上滚动 tty 工作......但用户空间仍然冻结。

我对睡眠的理解是...

# echo mem > /sys/power/state
(...)
t400 kernel: Freezing user space processes ... (elapsed 0.047 seconds) done.
(...)
t400 kernel: smpboot: CPU 1 is now offline
<system is asleep>
<I open the lid!>
t400 kernel: ACPI: Low-level resume complete
(...)
t400 kernel: Restarting tasks ... done.
(...)
# echo ohi
ohi
# _

...对于相当大量的睡眠->恢复过程,用户空间/任务被冻结,因此没有任何东西会干扰挂起-​​>睡眠->唤醒->恢复周期。

答案1

系统systemd-sysctl.service服务禁用所有“Magic SysRq”功能除了s(同步)。您需要在某个位置提供您自己的/etc/sysctl.d/具有更高优先级的重写设置。

console=tty1仅输出到第一个内核虚拟终端,该终端不一定是活动的 KVT。无论当时发生什么情况,要始终输出到活动 KVT,请使用console=tty0

进一步阅读

答案2

设定项可用于控制控制台日志级别:

setterm -msg on -msglevel 8

希望您的消息吞噬者只在启动期间更改这些设置一次,并且在挂起/恢复期间不会再次弄乱它们。

相关内容