例子

例子

我一直认为在 Linux 上所有非 root 用户都会得到相同的待遇并且总是并行运行,内核并不关心谁的 X 会话当前处于活动状态。但现在 Linux 内核、Ubuntu 或 KDE 中似乎有某种新的“功能”,如果程序不在活动的 X 会话中,则可以暂停程序。

例子

登录

  1. 我以 Alice 身份登录,并决定切换到用户 Bob 并使用此菜单启动新的 KDE 会话

在此输入图像描述

  1. Ctrl鲍勃的启动屏幕出现,我立即使用+ Alt+切换回爱丽丝F7
  2. 我做了一些工作,几分钟后我用Ctrl+ Alt+切换回 Bob 的新会话F8
  3. 我发现启动画面没有继续,会话也没有加载。现在它继续加载并在大约 10 秒内完成。

登出

与上面几乎相同:我启动注销并立即切换到另一个帐户,当我几分钟后回来时,注销尚未完成。

音乐

我开始以 Alice 的身份用 mpv 播放音乐。我切换到鲍勃的帐户。音乐玩得很好一开始,但大约 40 秒后它就停止了。我切换回 Alice 一秒钟,音乐继续播放,当我切换到 Bob 时,我又花了约 40 秒。 YouTube 似乎更早停止,大约 15 秒后。

问题

这一切都让我相信正在发生的事情会挂起不在活动 X 会话中的进程。

  1. 谁对此负责?
  2. 我怎样才能关闭它?
  3. 我可以将不应该暂停的程序列入白名单吗?

我正在使用基于 Ubuntu 16.04 LTS (Xenial Xerus) 的 KDE Neon 5 和 KDE 5.36.0。

答案1

谁对此负责?

不是Linux。不是Ubuntu。不是 X.Org。计划并未暂停。

程序本身就是罪魁祸首。自古以来,程序就能够知道它们当前是否正在显示某些内容,因为它们知道窗口系统何时要求它们重绘窗口。如果 X 会话未激活,则无需重绘。

随着时间的推移,程序(或 GUI 库,例如 KDE 库)在检测何时不需要其输出方面变得越来越聪明,以节省 CPU 周期(在电池供电的设备上,这意味着电池寿命)。

有时程序无法继续,因为它使用显卡作为处理器进行一些复杂的渲染。如果显卡正忙于显示另一个会话,则程序无法使用它。您会注意到这一点,因为如果另一个程序的窗口处于活动状态,此类程序也无法运行。

我怎样才能关闭它?
我可以将不应该暂停的程序列入白名单吗?

不幸的是,我不知道。

相关内容