如何在休眠后启动 GUI 程序?

如何在休眠后启动 GUI 程序?

我喜欢虚拟桌面。我手边有六个虚拟桌面,里面有我经常使用的所有程序。这意味着我恐惧重新启动我的电脑,因为我必须重新设置一切 — — 特别是因为 KDE 破坏了 Plasma 5 的会话管理(我正在运行 Kubuntu 15.10,Wily)。

因此,我也喜欢休眠。但有一个烦恼:如果我将 Chrome 或 Firefox 休眠,它们需要 20-30分钟下次启动机器时解冻,同时大量磁盘读取导致系统崩溃,无法使用。为什么?不知道。很多人都遇到过这种情况,有些人设法解决了,但我没有。

因此,为了解决这个问题,我必须在休眠之前关闭浏览器,下次手动运行。虽然我很懒,但我决定让机器帮我做这件事,但从 systemd 的睡眠脚本启动 GUI 程序却很困难。

优雅地关闭 Chrome 非常简单:

pkill --oldest chromium-browser;

就像从根终端启动一样:

su -l chema -c chromium-browser

(有一个小问题:如果我尝试使用 KDE 程序(如 Kate)进行此操作,它会显示一些默认皮肤,而不是我正在使用的实际主题)

但我没能在实际唤醒时让最后一步工作。这里有一个测试脚本,使用 sleep 代替休眠,使用 Kate 代替 Chrome,以便更快地进行测试:

#!/bin/sh
# Closes Chrome during hibernation to prevent crazy disk reads on thaw
# Systemd version, copy to /lib/systemd/system-sleep/ and chmod +x

if [ $1 = pre ] && [ $2 = suspend ]; then
    killall kate;
fi

if [ $1 = post ] && [ $2 = suspend ]; then
    echo "Running kate."
    su -l chema -c "DISPLAY=:0.0 kate" & 2>>/tmp/wake-log
fi

Kate 在睡眠状态下确实被杀死了,但是在唤醒时从未启动过,尽管系统日志中出现了“Running Kate。”

我也尝试过runuser -l chema -c kate,但总是失败QXcbConnection:无法连接到显示器/中止(核心转储),即使经过了xhost local:

有任何想法吗?

相关内容