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

我有两个脚本 – 一个用于在SSHFS上安装一些文件夹 – 另一个用于卸载。

我想在我的默认Ubuntu桌面启动时启动挂载脚本(在我在图形控制台登录后) – 以及当我从“右上角”的齿轮“退出…”时卸载脚本桌面。

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

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

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

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

 tee ~/.config/upstart/myjob.conf < 

你可以手动控制它:

 start myjob # or initctl start myjob 

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 

在〜/ .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 

我的手指交叉,这些事件将继续满足未来Ubuntu版本的要求。 我认为值得在这里发布我的解决方案 – 以防它对别人有用。

以下是登录后运行脚本的一些建议:

启动后的StackOverflow Linux脚本 :Cliff说明是将您的* .sh文件放在/etc/profile.d中。

如果你想在启动时运行脚本,这里有一些建议:

启动后的StackOverflow Linux脚本 :Cliff说明是使用/etc/rc.local或crontab。