【问题标题】:How to execute a script when xfce session endsxfce会话结束时如何执行脚本
【发布时间】:2011-09-28 07:02:53
【问题描述】:

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

【问题讨论】:

  • 你可以试试这个:stackoverflow.com/questions/5033354/…
  • 我也看到了这个问题,但它会为我要启动的任何脚本调用“endscript”。事实上,如果 xfce-session 是一个脚本,我可以这样做,但它是一个编译程序

标签: linux xfce


【解决方案1】:

参见http://mail.xfce.org/pipermail/xfce/2012-November/031694.html - 在那里,Erik Habicht 建议在/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 的顺序)但可能更可口。

注意:我将我的评论提升为答案。

【讨论】:

  • 终于找到了 xfce logout-hooks 的解决方案,非常感谢! ...也许再次添加提示“chmod a+x /usr/local/bin/xfce4-session” .. 错过它给我带来了一些麻烦。我将打开一个 xfce 错误/功能请求以自动触发一个简单的 ~/.logout
  • 剩下的一个问题:看起来该解决方案只有在明确完成“注销”时才有效。如果我直接关闭系统,则不会执行 .logout 脚本。 (发行版:Debian Jessie)
【解决方案2】:

使用运行原始xfce4-session 的shell 脚本更改/usr/bin/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 上测试。)

【讨论】:

  • 我接受了这个答案,因为这是个好主意,但是我更喜欢不影响分发二进制文件的解决方案。
  • 参见mail.xfce.org/pipermail/xfce/2012-November/031694.html - 也就是说,您可以将包装脚本放在 /usr/local/bin 或安装 xfce4-session 的目录之前的另一个目录中,而不更改 /usr/bin/ X11/xfce4 会话。它并不完美(取决于 PATH 顺序)但可能更可口
  • 缺点:每次安装包 xfce4-settings 的更新时都会覆盖新的批处理文件。
【解决方案3】:

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

以下是我的解决方案:

使用以下内容创建~/.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 buttonAlt+f3: "logout" 将带来简单的退出当前会话的对话框

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

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

    • 启动脚本如何处理会话结束的情况?即它是否必须捕获信号、响应 X 事件?
    • 当真正的 xfce 会话结束时它可以做它想做的事:你的脚本必须启动它然后阻塞直到它终止
    猜你喜欢
    • 1970-01-01
    • 2021-01-11
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    相关资源
    最近更新 更多