当我的 Xubuntu 18.04 笔记本电脑从挂起状态恢复时,如果笔记本电脑已挂起超过几个小时,systemd-logind 会自动注销当前会话。如果挂起和恢复之间的间隔很短,则不会注销。我还没有发现这个间隔需要多长时间才能导致注销。
我在 systemd-logind.service 上启用了调试,创建文件/etc/systemd/system/systemd-logind.service.d/10-debug.conf:
[Service]
Environment=SYSTEMD_LOG_LEVEL=debug
这会导致 systemd-logind 记录它处理的所有 D-Bus 消息,但无法发现可能导致注销的任何内容。
在 systemd-logind 开始终止当前会话之前,我扫描了所有 systemd 日志消息 ( journalctl
),调查了所有看起来可疑但找不到可能影响自动注销的任何内容。以下是一些让我觉得可疑的消息(它们不是连续的,而是来自不同的场合):
upowerd[1600]: unhandled action 'unbind' on /sys/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.4/1-1.4:1.0
polkitd(authority=local)[840]: Unregistered Authentication Agent for unix-session:c2 (system bus name :1.46, object path /org/gnome/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
wpa_supplicant[811]: dbus: fill_dict_with_properties dbus_interface=fi.w1.wpa_supplicant1.Interface dbus_property=Stations getter failed
wpa_supplicant[811]: dbus: wpa_dbus_get_object_properties: failed to get object properties: (none) none
at-spi-bus-launcher[7031]: XIO: fatal IO error 11 (Resource temporarily unavailable) on X server ":0.0"
at-spi-bus-launcher[7031]: after 30333 requests (30333 known processed) with 0 events remaining.
systemd-logind[779]: Inhibitor xfce4-power-manager (xfce4-power-manager handles these events) pid=8611 uid=1000 mode=block stopped
systemd-logind[779]: Electing new display for user paulo
systemd-logind[779]: Ignoring session c8
logind config 没有任何可能导致此问题的内容:
paulo:~$ loginctl show-session
EnableWallMessages=no
NAutoVTs=6
KillUserProcesses=no
RebootToFirmwareSetup=no
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
BlockInhibited=handle-power-key:handle-suspend-key:handle-hibernate-key
DelayInhibited=sleep
InhibitDelayMaxUSec=5s
HandlePowerKey=poweroff
HandleSuspendKey=suspend
HandleHibernateKey=hibernate
HandleLidSwitch=suspend
HandleLidSwitchDocked=ignore
HoldoffTimeoutUSec=30s
IdleAction=ignore
IdleActionUSec=30min
PreparingForShutdown=no
PreparingForSleep=no
Docked=no
RemoveIPC=yes
RuntimeDirectorySize=615313408
InhibitorsMax=8192
NCurrentInhibitors=5
SessionsMax=8192
NCurrentSessions=1
UserTasksMax=10813
我找不到任何可能导致一段时间后自动注销的东西。我真的很难过。
对于 18.04 上与 SIGBUS 的间歇性 X 崩溃,请查看以下答案:
从睡眠中醒来时出现 Ubuntu 18.04 错误:交换设备上的读取错误
我已经确认这个问题是由 Xorg 服务器与 SIGBUS 崩溃引起的。Xorg 服务器崩溃并且 systemd-logind 创建一个新的登录会话。
Xorg 服务器由于来自at-spi-bus-launcher的过多请求而崩溃。在每次崩溃之前,诸如此类的消息都会记录在 systemd 日志中:
这似乎是一个记录在案的问题,即 Xorg 在无间隔地收到过多请求时崩溃。
要解决此错误,需要 2 个步骤:
at-spi2-core
export NO_AT_BRIDGE=1
到.profile,这样 GTK 应用程序就不会抱怨缺少可访问性总线在此解决方法之后,Xorg 不再崩溃,因此从挂起恢复后不再自动注销。
我在 Gnome BugZilla 上提交了针对at-spi的错误报告。
当我认为我解决了这个问题时,它再次咬住了我:-(。问题本身确实是由 Xorg 服务器与 SIGBUS 崩溃引起的,但崩溃的根本原因不是 at-spi-bus-launcher 行为不端。它应该't 循环发出那些重复的请求,所以前面的过程仍然有效,尽管它不是 Xorg 崩溃的解决方法。
我发现 Xorg 正在使用内核驱动程序i915:
所以我尝试了另一种解决方法,强制 Xorg 使用
xserver-xorg-video-intel
加速方法uxa,它比默认的sna更稳定。这是/etc/X11/xorg.conf.d/10-intel.conf:
我已经使用这个解决方法 1 周了,Xorg 服务器没有崩溃,所以我觉得这是最终的解决方法,而 Xorg 没有修复。
我打开了一个针对 Xorg 的错误报告,这显然似乎影响了更多用户,因为它被标记为另一个错误的副本,我一开始没有检测到它,因为它的标题提到了另一种类型的崩溃。
对于那些仍然面临这个问题的人,这是我的经验。Nvidia驱动程序是问题所在。在 Linux Kernel 版本 5.0.0-27 上,安装 Nvidia 驱动程序后,“从挂起恢复时注销”开始。
在许多失败的“修复”(在此处和其他地方列出)之后,我使用 prime-select 工具禁用了 nvidia。我的笔记本电脑现在唤醒并恢复会话。我已经测试了启用/禁用 nvidia 并且可以安全地得出结论这是一种解决方法。
不过我还是想用nvidia。
这是所述 I/O 错误之前和之后的 10 行 -