aSt*_*eve 8 scripts unity upstart
我有两个脚本——一个用于通过 SSHFS 挂载一些文件夹——另一个用于卸载。
我想在我的默认 Ubuntu 桌面启动时启动挂载脚本(在我登录图形控制台后) - 当我从右上角的齿轮“注销...”时启动卸载脚本桌面。
请有人告诉我如何实现这一目标?在桌面启动/退出时运行命令的最方便/标准的钩子是什么?
考虑到您需要在登录 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您可以使用的更多事件,请参阅。
解决方案是使用新贵任务。我需要两项任务 - 一项任务在用户桌面初始化时触发;另一项任务在桌面初始化时触发。第二个是当用户会话过期时。以下两个脚本在 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 版本的要求。我认为值得在这里发布我的解决方案 - 以防它对其他人有用。