Невозможно запустить сценарий на основе systemd после выхода из режима ожидания. Почему?

0

Следующий ответ показывает, как запустить сценарий после выхода из режима ожидания из-за systemd. Я попробовал их, но не смог заставить гном-терминал появиться для запуска команды.

#!/bin/sh
if [ "$1" == "post" ]; then
  gnome-terminal --command 'compiz --replace &' 

Почему они не работают? Я использую Ubuntu 16.04.2 с ядром 4.8.0-45-generic. Мне любопытно, почему мой системный скрипт не работает. Моя команда работает на открытом терминале gnome, но каким-то образом не будет работать с методом systemd-suspend.service. ???

Солнечный медведь
источник

Ответы:

0

Как вы знаете, любые эмуляторы терминала были закрыты после выполнения своей работы.

Но если вы хотите, чтобы gnome-терминал не закрывался с помощью этого скрипта в /etc/pm/sleep.dпути (этот скрипт заставляет терминал оставаться открытым, пока вы не нажмете Enter):

sudo nano /etc/pm/sleep.d/myscript

Затем вставьте этот контент в ваш скрипт:

#!/bin/bash
case $1 in 
     thaw|resume) gnome-terminal --command 'bash -c "compiz --replace &; read line"'
     ;;
esac

Затем сделайте его исполняемым этой командой:

sudo chmod a+x /etc/pm/sleep.d/myscript

Я надеюсь, что это работа для вас.

ОБНОВИТЬ:

Спасибо, что поделился. Мне было любопытно, почему мой системный скрипт не работает. Моя команда работает на открытом терминале gnome, но почему-то не будет работать с решением systemd-suspend.service. Не могли бы вы попробовать на вашей системе, чтобы увидеть, как это влияет? Вы можете заменить команду compriz командой «sleep 20», чтобы попробовать. Цените ваши отзывы. Способ приостановки отличается на многих машинах, некоторые из которых используют, sudo pm-suspendа некоторые используют systemctl suspendкоманду.

Мы можем использовать сценарий на основе systemd, если мы используем systemctl suspendдля сна ОС (не использовать sudo pm-suspend. Но в некоторых системах, когда вы нажимаете на приостановить ботон, команда использования операционной системы pm-suspend). Но сценарии на основе systemd и сценарии на основе управления питанием имеют небольшую разницу между собой:

В сценарии на основе systemd мы не можем запускать приложения с графическим интерфейсом, потому что в этом состоянии нет X-сервера для подключения к нему.

Таким образом, вы не можете использовать gnome-terminalв таких командах, как gnome-terminal --command 'compiz --replace &'. если вы хотите показать gnome-терминал, вы должны использовать сценарии, основанные на powermanagement.

Но в вашем случае достаточно использовать этот скрипт (без gnome-терминала):

#!/bin/sh
if [ $1 = post ] ; then
compiz --replace &
fi

И вы можете проверить свой скрипт, заменив что-то вроде touch /home/YOURUSERNAME/Desktop/test.txtвместо compiz --replace &:

#!/bin/sh
if [ $1 = post ] ; then
touch /home/YOURUSERNAME/Desktop/test.txt
fi

(Имейте в виду, что поскольку в сценариях на основе systemd пользователь root запускает команды, поэтому не используйте его ~/Desktopвместо того, /home/YOURUSERNAME/Desktopпотому что пользователь root ~ не является вашим домашним каталогом!)

Али Размдидех
источник
Спасибо, что поделился. Мне было любопытно, почему мой системный скрипт не работает. Моя команда работает на открытом терминале gnome, но почему-то не будет работать с решением systemd-suspend.service. Не могли бы вы попробовать на вашей системе, чтобы увидеть, как это влияет? Вы можете заменить команду compriz командой «sleep 20», чтобы попробовать. Ценю ваши отзывы.
Солнечный медведь
Я отредактировал свой комментарий и ответил на ваш вопрос
Али Razmdideh
Спасибо @ali. Я обнаружил, что compiz --replace&решает мои проблемы с отображением только при запуске из терминала. Следовательно, я использовал gnome-terminalдля выдачи команды. Возможно, вы захотите перепроверить. Отмечено различие между systemd и powermanagement. ;)
Солнечный Медведь
@ Солнечный Медведь. вместо этого вы можете использовать каталоги ~ / .xsessionrc и ~ / .xsession; но, насколько я знаю, вы не можете запускать приложения с
графическим