Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在xfce会话结束时执行脚本_Linux_Xfce - Fatal编程技术网

Linux 如何在xfce会话结束时执行脚本

Linux 如何在xfce会话结束时执行脚本,linux,xfce,Linux,Xfce,xfce会话停止时是否可以运行脚本/命令?使用shell脚本更改/usr/bin/xfce4会话可执行文件,该脚本运行原始的xfce4会话,如果xfce4会话完成,则注销脚本 # mv /usr/bin/xfce4-session /usr/bin/xfce4-session.orig 新的/usr/bin/xfce4会话文件: #!/bin/bash /usr/bin/xfce4-session.orig echo "my logout script" > /tmp/testfile

xfce会话停止时是否可以运行脚本/命令?

使用shell脚本更改
/usr/bin/xfce4会话
可执行文件,该脚本运行原始的
xfce4会话
,如果
xfce4会话
完成,则注销脚本

# mv /usr/bin/xfce4-session /usr/bin/xfce4-session.orig
新的
/usr/bin/xfce4会话
文件:

#!/bin/bash
/usr/bin/xfce4-session.orig
echo "my logout script" > /tmp/testfile
不要忘记设置执行权限:

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

(在Debian Squence上测试。)

我验证了上述答案,因为它不涉及新代码编写。 然而,我找到了另一种方法:创建一个X11程序,该程序将在会话启动时启动:它可以在X会话关闭时执行自定义脚本

注意:缺点是使用的脚本无法连接到X windows,因此此解决方案可能会根据需要执行脚本太晚。

请参见-Erik Habicht建议在
/usr/local/bin/xfce4会话中创建包装器脚本
(或安装了
xfce4 session
的目录前面的另一个目录,
/usr/bin
位于
路径中)。这样,您就不必更改
/usr/bin/X11/xfce4 session
,因此它可以独立更新

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

它并不完美(取决于路径的顺序),但可能更令人满意


(注意:我将我的评论升级为答案。)

我更喜欢不涉及系统目录或文件的解决方案,该解决方案将在当前用户会话及其权限内运行注销挂钩

以下是我的解决方案:

使用以下内容创建
~/.local/bin/xfce4会话注销
脚本:

#!/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按钮
Alt+f3:“logout”
将显示退出当前会话的简单对话框


注意:按
Alt+F4
不起作用,但是一些黑带xfce4用户可能会提供一些建议

您可以试试这个:我也看到了这个问题,但它会称为“endscript”事实上,如果xfce会话是一个脚本,我可以这样做,但它是一个编译程序。我接受了这个答案,因为这是一个好主意,但是我更喜欢一个不会影响分发二进制文件的解决方案。请看-也就是说,您可以将包装器脚本放在/usr/local/bin或前面的另一个目录中安装xfce4会话的目录,而不是更改/usr/bin/X11/xfce4会话。它不是完美的(取决于路径顺序)但可能更有利的缺点是:每次安装包
xfce4设置的更新时都会覆盖新批处理文件。最后,xfce注销挂钩的解决方案,非常感谢!…可能再次添加提示“chmod a+x/usr/local/bin/xfce4 session”…丢失它给我带来了一些麻烦。我将打开一个xfce错误/功能请求,自动触发一个简单的~/.logoutOne剩余问题:看起来只有在明确完成“注销”后,解决方案才有效。如果我直接关闭系统,则不会执行.logout脚本。(发行版:Debian Jessie)启动脚本如何处理会话结束的情况?即,它是否必须捕获信号,响应X事件?当真正的xfce会话结束时,它可以做它想做的事情:脚本必须启动它,然后阻塞,直到它终止
chmod u+x ~/scripts/pre-logout.sh