【发布时间】:2011-09-28 07:02:53
【问题描述】:
xfce 会话停止时是否可以运行脚本/命令?
【问题讨论】:
-
我也看到了这个问题,但它会为我要启动的任何脚本调用“endscript”。事实上,如果 xfce-session 是一个脚本,我可以这样做,但它是一个编译程序
xfce 会话停止时是否可以运行脚本/命令?
【问题讨论】:
参见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 的顺序)但可能更可口。
(注意:我将我的评论提升为答案。)
【讨论】:
使用运行原始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 上测试。)
【讨论】:
xfce4-settings 的更新时都会覆盖新的批处理文件。
我更喜欢不涉及系统目录或文件并且将在当前用户会话及其权限内运行注销挂钩的解决方案。
以下是我的解决方案:
使用以下内容创建~/.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 用户会提供一些建议
【讨论】:
我验证了上面的答案,因为它不涉及新的代码编写。 然而,我找到了另一种方法:创建一个 X11 程序,该程序将在会话启动时启动:它可以在 X 会话关闭时执行自定义脚本
注意:缺点是使用的脚本无法连接到 X windows,因此此解决方案可能会根据需要执行脚本太晚。
【讨论】: