升级后,标题栏中的 X 按钮不再关闭 xterm

der*_*ert 4 linux debian xterm x11 kwin

理论上,按下关闭按钮 kwin 关闭按钮应该关闭一个 xterm。在我做一个aptitude upgrade. (我正在运行 Debian 测试)。但现在它没有了——单击 X 没有任何作用——但仅适用于某些xterm。

特别是,如果我从 KDE 快速启动项或 K 菜单启动 xterm,则这些 xterm 是可关闭的。但是,如果我从键盘快捷键 (khotkeys) 启动它,则该 xterm 不可关闭。

此外,这是递归的:如果我从 xterm 启动一个 xterm,如果它的父项是,它是可关闭的。

这一般不会发生。它仅适用于 xterm。我已经测试过从不可关闭的 xterm 启动这些应用程序,它们都是可关闭的:

  • 虚拟机
  • 时钟
  • 视图
  • 海豚
  • 控制台

在那里穿插另一个程序会破坏链条(例如,从 konsole 启动一个 xterm):

  • xterm(不可关闭)?xterm(不可关闭)?xterm(不可关闭)?…
  • xterm(不可关闭)?konsole(可关闭) ? xterm(可关闭)?…

我检查了我的 kwin 窗口规则,我没有任何用于 xterm 的规则。

der*_*ert 9

更新:这是 nVidia

Stephen Dowdy 回应了 Debian 错误报告,并表示这可能是 nVidia 错误。它破坏信号掩码的地方。一些搜索发现Debian Bug #728743,并且确实切换到 Nouveau/MESA(开源驱动程序)已经解决了这个问题。

请注意,降级到较旧的 nVidia 驱动程序并没有,这可能意味着它的 nVidia 驱动程序 + 其他东西的一些较新版本,我没有费心去追踪该错误的评论者声称它已在 331.38 中修复。(我现在正在运行 331.49,它确实已修复)。

来自 strace 的结果

我在两个版本上都运行了 strace。经过一些过滤(使 diff 更好地工作),我看到了一堆类似的行:

WORKING  rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
*vs*
BROKEN   rt_sigprocmask(SIG_BLOCK, NULL, [HUP], 8) = 0
Run Code Online (Sandbox Code Playgroud)

似乎损坏的版本已阻止 SIGHUP。单击 X 似乎发送一个 SIGHUP,它被忽略,因此 shell 不会退出。您可以通过在 shell 中捕获 SIGHUP 而不退出(但不是相反,因为 shell 似乎永远不会获得 HUP)来使工作中断。

我已经提交了关于这个的Debian 错误 #733816

作为一种解决方法,您可以使用这个简单的 C 程序包装热键命令:

WORKING  rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
*vs*
BROKEN   rt_sigprocmask(SIG_BLOCK, NULL, [HUP], 8) = 0
Run Code Online (Sandbox Code Playgroud)

通过编译(例如, to ~/bin/unblock-hup)然后调用~/bin/unblock-hup xterm而不是xterm. 请注意,在自定义快捷方式控制模块中,您必须将完整路径放在您的主目录中;~不起作用。