【问题标题】:Signal on X11 LogoutX11 注销信号
【发布时间】:2018-11-27 01:39:14
【问题描述】:

我正在编写一个偶尔会保存数据的应用程序。现在的问题是,当用户退出 X11 并且我的应用程序尚未保存更改时,有没有办法检测注销并将更改写入磁盘?我尝试为SIGHUPSIGQUIT 实现信号处理程序,但没有成功。是否有信号发出或者有没有办法让 lsiten 退出?

【问题讨论】:

  • 你的申请是什么?你用的是什么工具包?
  • 考虑升级到 GTK3。
  • 那么你就被卡住了,或者你需要几个月(或几年)的编码来实现它。将您的代码移植到 GTK3 应该更容易。
  • 为什么不能使用GTK3?这应该进入你的问题!
  • 在实践中,这个问题绑定到一个工具包。否则,您需要自己实现所有 EWMH(这需要很多年)。所以改变你的工具包可能更实用。当然,您可以在原始 X11 之上重新实现符合 EWMH 的工具包,但这意味着数十年的工作。你能负担得起吗?解释您的应用程序在做什么。

标签: linux x11 logout


【解决方案1】:

阅读ICCCMEWMH(两者都是相当大的规格,您应该仔细阅读)。

实际上,您的 X11 应用程序可能会使用一些现有的 GUI 工具包,例如QtGTK(确保至少使用 GTK3)。那么该工具包应该有与会话相关的支持。

对于 Qt:查看 QSessionManager

对于 GTK:请参阅 GtkApplication

(如果您坚持使用 GTK2 - 例如使用 lablgtk -,您将花费数月或一两年的时间在代码中实现 EWMH 会话;将其移植到 GTK3 - 甚至 Qt5- 应该是更聪明,可能工作更少)因为 GTK(GTK2 和 GTK3)是free software,你可以研究源代码(也许会受到它的启发,或者根据你的需要调整它,和/或对重写它的努力)。

请记住,X11 是一种网络协议,服务器和客户端(以及窗口管理器)可以在不同机器上运行(例如,通过 ssh -X)。通过网络发送SIGTERM 毫无意义(这可以解释为什么 EWMH 不提及它)。

一种解决方法可能是定期保存状态(例如每两分钟;然后只有两分钟的工作会丢失)。

【讨论】:

    【解决方案2】:

    Basile 建议查看工具包的相关类(QSessionManagerGtkApplication)很好。我很感谢他发布了这个,因为它帮助我找到了我正在寻找的特定内容。

    但如果如你所说,并且你的工具包没有内置会话管理支持,那么相关规范就不是EWMH,而是XSMPICCCM 中包含少量额外信息,您也应该注意。

    这远不是几年的工作。会话管理器协议的相关客户端部分应该只需要几个小时,如果您不熟悉将低级 X11 协议集成到现有应用程序堆栈中,可能需要几天时间。

    【讨论】:

    • 我已经实现了。我从一开始就认为 Basile 过度渲染了这一点。工作量并不大(我想我在大约 30 分钟的阅读和 45 分钟的实施中完成了它)。
    • 我有点假设。 :) 我只是想跟进发现这个问题的其他人,因为我自己需要一个答案。
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2011-03-09
    • 2012-05-21
    • 2020-07-14
    • 2014-03-18
    • 2011-08-28
    • 1970-01-01
    相关资源
    最近更新 更多