LINUX.ORG.RU

ubuntu unity как выполнить скрипт при выходе пользователя gui

 


0

3

Необходимо при выходе (logout) из gui сессии пользователя (т.е. если он заканчивает сессию, перезагружает или выключает комп, локально или как-либо по ssh) выполнить свой скрипт (там я буду корректно завершать свое gui приложение)
Пытался задействовать systemd, но пока безуспешно, не знаком
Правильно смотрю или еще чтото есть ?
ubuntu 16.04

★★★★★

Ответ на: комментарий от kto_tama

хм, попробую завтра
но получается тут firefox будет запущен и завершен через upstart ?
мне то хотелось свой скрипт до logout

x905 ★★★★★
() автор топика
Ответ на: комментарий от kto_tama

не запускается firefox
в интернетах пишут upstart признан устаревшим

x905 ★★★★★
() автор топика
Ответ на: комментарий от kto_tama

В 16.04 системда уже. Кмк, не прокатит. Нужно systemd.user service писать

Deleted
()

https://linuxmint.com.ru/viewtopic.php?t=900

Вариант 2. Завести фейковый сервис, который ничего не делает, но останов его (Exec_Stop) под общее завершение сессии будет ссылаться на нужный скрипт, например /lib/systemd/system/before_shutdown.service примерно такой конструкции

[Unit]
Description=Script to exec on shutdown

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/home/di_mok/before_shutdown_script.sh

[Install]
WantedBy=multi-user.target

и задействовать его с

sudo systemctl daemon-reload
sudo systemctl enable before_shutdown.service
 sudo systemctl start before_shutdown.service
mandala ★★★★★
()
Ответ на: комментарий от mandala

почти, но не совсем то
скрипт ExecStop вызывается поздно (мое приложение уже прибито), и для logout не вызывается

наверно мне подойдет «свое» меню для выключения и перезагрузки, а имеющееся убрать. пойду поищу как ...

x905 ★★★★★
() автор топика

...выполнить свой скрипт (там я буду корректно завершать свое gui приложение)

Не лучше ли в гуёвом приложении SIGTERM обработать?

debugger ★★★★★
()
Ответ на: комментарий от debugger

Не лучше ли в гуёвом приложении SIGTERM обработать?

мне нужно различить SIGTERM от пользователя (по кресту) и от ОС, что невозможно, и среагировать по разному
программа может SIGINT обработать и быстро выйти, вот его то я и хочу подать, например сделать свою кнопку выход и поместить её на панел unity
может еще чего придумаю, задача не сильно важная, но хотелось бы решить

x905 ★★★★★
() автор топика
Ответ на: комментарий от x905

Если развить эту тему, то можно написать не пустышку, а нормальный юнит для твоего приложения. Стартовать по логину пользователя — After=что_там_стартует_у_пользователя_при_логине, при разлогине он завершиться и выполнит твой скрипт. «After» тоже должен быть юнитом, получается. Пример: DM с автологином, или пускать WM как юнит и от него твое приложение и т.п.

mandala ★★★★★
()
Ответ на: комментарий от x905

мне нужно различить SIGTERM от пользователя (по кресту) и от ОС, что невозможно, и среагировать по разному…

Во-первых, копать надо не в сторону скриптов которые запускаются при выходе (запускать что-либо при выходе — это как-то костыльно), а в сторону интеграции с ДЕ. Наверняка при завершении сесии по дбусу чего-нить прилетает.

А во-вторых, главное: зачем реагировать по-разному? Когда программу просят закрыться из-за того, что сессия завершается, надо быстро сохранять состояние и завершаться. Когда пользователь нажимает крестик или жмёт Ctrl+Q, нужно тоже сохранять состояние и завершаться. Без дурацких вопросов «а вы уверены что действительно хотите выйти?».

debugger ★★★★★
()
Ответ на: комментарий от debugger

А во-вторых, главное: зачем реагировать по-разному?

именно изза вопроса о желании выхода (он настраиваемый, но надо обработать и это)

с эти вопросом тоже странности я обнаружил - обязательно нужно отказать ДЕ о выходе, подождать 1 сек и затем выходить. иначе он меня прибивает слишком быстро.

да, начал «интеграцию» с ДЕ - введу кнопку «выкл» свою и там все что надо сделаю, благо выкл не частое занятие будет.

x905 ★★★★★
() автор топика
Ответ на: комментарий от mandala

Если развить эту тему, то можно написать не пустышку, а нормальный юнит для твоего приложения.

возможно и так, пока думал обойтись по простому, но не вышло

x905 ★★★★★
() автор топика
27 октября 2017 г.

У меня разаботало для логаута, ребута и выключения:

sudo sh -c 'zcat /usr/share/doc/lightdm/lightdm.conf.gz > /etc/lightdm/lightdm.conf'
sudo sh -c 'echo "[SeatDefaults]" >> /etc/lightdm/lightdm.conf'
sudo sh -c 'echo "session-cleanup-script=ПУТЬ_К_СКРИПТУ" >> /etc/lightdm/lightdm.conf'

Для ssh и ввобще шела есть ~/.bash_loguot для этих целей.

Dimarius
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.