Как выполнить скрипт при завершении сеанса xfce

Можно ли запустить сценарий / команду при остановке сеанса xfce?


person Denis R.    schedule 28.09.2011    source источник
comment
вы можете попробовать это: stackoverflow.com/questions/5033354/   -  person maialithar    schedule 28.09.2011
comment
Я тоже видел этот вопрос, но он вызывал бы конечный скрипт для любого скрипта, который я запускал. Фактически, если бы xfce-session был скриптом, я мог бы это сделать, но это скомпилированная программа.   -  person Denis R.    schedule 28.09.2011


Ответы (4)


Замените исполняемый файл /usr/bin/xfce4-session на сценарий оболочки, который запускает исходный xfce4-session и ваш сценарий выхода, если xfce4-session завершился.

# mv /usr/bin/xfce4-session /usr/bin/xfce4-session.orig

Новый файл /usr/bin/xfce4-session:

#!/bin/bash
/usr/bin/xfce4-session.orig
echo "my logout script" > /tmp/testfile

Не забудьте установить права на выполнение:

# chmod a+x /usr/bin/xfce4-session

(Проверено на Debian Squeeze.)

person palacsint    schedule 06.10.2011
comment
Я принял ответ, поскольку это хорошая идея, однако я бы предпочел решение, которое не влияет на двоичные файлы распространения. - person Denis R.; 20.08.2012
comment
См. mail.xfce.org/pipermail/xfce/2012-November/031694. .html - то есть вы можете поместить сценарий оболочки в / usr / local / bin или другой каталог, который предшествует каталогу, в котором установлен xfce4-session, и не изменять / usr / bin / X11 / xfce4-session. Это не идеально (зависит от порядка PATH), но может быть более приемлемым - person djb; 26.07.2013
comment
Недостаток: перезаписывайте новый командный файл каждый раз при установке обновления для пакета xfce4-settings. - person kdg1955; 30.05.2017

См. http://mail.xfce.org/pipermail/xfce/2012-November/031694.html - Там Эрик Хабихт предложил создать сценарий оболочки в /usr/local/bin/xfce4-session (или другом каталоге, предшествующем каталогу, в котором установлен xfce4-session, /usr/bin в вашем PATH). Таким образом, вам не нужно изменять /usr/bin/X11/xfce4-session, поэтому его можно обновлять независимо.

#!/bin/bash
# Add your own pre-session logic here
/usr/bin/xfce4-session
# Add your own logout logic here

тогда

$ chmod +x /usr/local/bin/xfce4-session

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

(Примечание: я превратил свой комментарий в ответ.)

person djb    schedule 12.08.2013
comment
Наконец, решение для хуков выхода из системы xfce, большое спасибо! ... может быть, снова добавить подсказку chmod a + x / usr / local / bin / xfce4-session .. ее отсутствие вызвало у меня проблемы. Я открою запрос на ошибку / функцию xfce, чтобы автоматически запустить простой ~ / .logout - person Alex; 07.08.2015
comment
Одна остающаяся проблема: похоже, решение работает только в том случае, если выполняется явный выход из системы. Если я отключу свою систему напрямую, сценарий .logout не будет выполнен. (Дистрибутив: Debian Jessie) - person Alex; 10.08.2015

Я бы предпочел решение, которое не касается системных каталогов или файлов и будет запускать ловушку выхода в текущем сеансе пользователя и его привилегиях.

ниже мое решение:

создать ~/.local/bin/xfce4-session-logout скрипт со следующим содержанием:

#!/bin/bash
PRELOGOUT=${HOME}/scripts/pre-logout.sh

RESULT=RES_`echo -e "logout\nrestart\nshutdown\nsuspend" | zenity --height=250 --list --title "Logout from $USER" --column "What do You want to do?"`
case $RESULT in
    RES_logout)
        [ -x  $PRELOGOUT] && $PRELOGOUT
        /usr/bin/xfce4-session-logout --fast --logout
        ;;
    RES_restart)
        [ -x  $PRELOGOUT] && $PRELOGOUT
        /usr/bin/xfce4-session-logout --fast --reboot
        ;;
    RES_shutdown)
        [ -x  $PRELOGOUT] && $PRELOGOUT
        /usr/bin/xfce4-session-logout --fast --halt
        ;;
    RES_suspend)
        /usr/bin/xfce4-session-logout --suspend
        ;;
    *)
       exit 1
       ;;
esac

и сделаем его исполняемым:

chmod u+x ~/.local/bin/xfce4-session-logout

Теперь поместите все, что Вам нужно выполнить при выходе из системы, в ~/scripts/pre-logout.sh и сделайте его исполняемым.

chmod u+x ~/scripts/pre-logout.sh

после повторного входа либо menu > logout button, либо Alt+f3: "logout" откроет простой диалог для выхода из текущего сеанса

Примечание: нажатие Alt+F4 не работает с этим, но, возможно, некоторые пользователи xfce4 с черным поясом предложат что-нибудь

person vibrys    schedule 01.05.2019

Я подтвердил ответ выше, поскольку он не требует написания нового кода. Однако я нашел другой способ продолжить: создать программу X11, которая будет запускаться при запуске сеанса: она может выполнять пользовательские сценарии, когда сеанс X закрыт.

Примечание: недостатком является то, что используемые сценарии не могут подключаться к X windows, поэтому это решение может, в зависимости от необходимости, выполнить сценарий слишком поздно.

person Denis R.    schedule 20.08.2012
comment
как сценарий запуска обрабатывает случай завершения сеанса? т.е. он должен улавливать сигнал, реагировать на событие X? - person djb; 11.08.2015
comment
Он может делать то, что хочет, когда реальный сеанс xfce заканчивается: ваш скрипт должен запустить его, а затем заблокировать его, пока он не завершится. - person Denis R.; 12.08.2015