Как запустить программу с графическим интерфейсом после спящего режима?
Я люблю виртуальные рабочие столы. Я держу полдюжины с каждой программой, которую я использую регулярно, всегда наготове. Это означает, что я боюсь перезапускать свой ПК, поскольку мне приходится все заново настраивать, особенно потому, что KDE прервал управление сессиями с помощью Plasma 5 (я использую Kubuntu 15.10, Wily).
Следовательно, я тоже люблю зимнюю спячку. Но есть одно неудобство: если я перехожу в спящий режим Chrome или Firefox, то при следующем запуске компьютера оттаивание занимает 20-30 минут, все время перегружая систему тяжелыми чтениями с диска, что делает ее непригодной для использования. Зачем? Не знаю. Бывает со многими, кому-то удалось решить, а я нет.
Поэтому в качестве обходного пути я должен закрыть браузер перед переходом в спящий режим и запустить его вручную в следующий раз. Будучи ленивым, как я, я решил позволить машине делать это для меня, но запуск программы с графическим интерфейсом из сценариев сна systemd оказывается трудным.
Убить 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
Кейт умерла ото сна, но никогда не начинала бодрствовать, даже несмотря на то, что "Бег Кейт". действительно появляется в системном журнале.
Я тоже пробовал с runuser -l chema -c kate
, но это всегда терпит неудачу с QXcbConnection: не удалось подключиться к отображению / прерыванию (ядро сброшено), даже после xhost local:
,
Есть идеи?