如何在 Unity 登录/注销时运行脚本?

aSt*_*eve 8 scripts unity upstart

我有两个脚本——一个用于通过 SSHFS 挂载一些文件夹——另一个用于卸载。

我想在我的默认 Ubuntu 桌面启动时启动挂载脚本(在我登录图形控制台后) - 当我从右上角的齿轮“注销...”时启动卸载脚本桌面。

请有人告诉我如何实现这一目标?在桌面启动/退出时运行命令的最方便/标准的钩子是什么?

mur*_*uru 9

考虑到您需要在登录 Unity 而非其他登录时运行作业,Upstart会话作业似乎是完美的。

您可能已经注意到:您在 GUI 登录后运行的init进程在第二个进程下。这init是一个适当的 Upstart init,您可以根据它发出的事件启动和停止会话作业。根本不需要root权限。更好(或更糟,取决于视角),无头系统尚未完全支持此功能。SSH 登录并没有从我刚刚进行的快速测试中启动用户 init。

要创建会话作业,请.conf~/.config/upstart. 这是 Upstart 会话作业 ( $XDG_CONFIG_HOME/upstart)的默认主目录,如果不存在则创建它。这是一个示例作业:

tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end

script 
       firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF
Run Code Online (Sandbox Code Playgroud)

您可以手动控制它:

start myjob 
# or
initctl start myjob
Run Code Online (Sandbox Code Playgroud)

service命令用于控制系统作业(在/etc/init.d或 中的那些/etc/init)。要控制会话作业,需要使用initctl命令,该命令用于与 Upstart 交互。

有关man upstart-events您可以使用的更多事件,请参阅。


aSt*_*eve 1

解决方案是使用新贵任务。我需要两项任务 - 一项任务在用户桌面初始化时触发;另一项任务在桌面初始化时触发。第二个是当用户会话过期时。以下两个脚本在 Ubuntu 14.04 下适用于我。

在 ~/.config/upstart/desktopOpen.conf 中

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as shell-script.
end script
Run Code Online (Sandbox Code Playgroud)

在 ~/.config/upstart/desktopClose.conf 中

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as shell-script.
end script
Run Code Online (Sandbox Code Playgroud)

我祈祷这些事件将继续满足未来 Ubuntu 版本的要求。我认为值得在这里发布我的解决方案 - 以防它对其他人有用。