web-dev-qa-db-ja.com

Unityのログイン/ログアウトでスクリプトを実行するにはどうすればよいですか?

SSHFSでいくつかのフォルダーをマウントするスクリプトと、アンマウントするスクリプトの2つがあります。

デフォルトのUbuntuデスクトップが起動したときに(グラフィカルコンソールでログインした後)マウントスクリプトを起動し、右上の歯車から「ログアウト...」するときにマウント解除スクリプトを起動したいデスクトップ。

誰かがこれを達成する方法を教えてもらえますか?デスクトップの起動/終了でコマンドを実行するための最も便利な/標準のフックは何ですか?

8
aSteve

解決策は、スタートアップタスクを使用することでした。私は2つのタスクが必要でした。1つは、ユーザーのデスクトップが初期化されるときに実行されます。 2番目はユーザーセッションの有効期限が切れたときです。次の2つのスクリプトは、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リリースの要件を引き続き満たすという私の指を交差させます。ここに自分の解決策を投稿する価値があると思いました-他の人に役立つ場合。

1
aSteve

他のログインではなく、Unityにログインするときにジョブを実行するという要件を考慮すると、Upstart session job は完璧に思えます。

お気づきかもしれませんが、GUIログイン後に実行するプロセスは、2番目のinitプロセスの下にあります。このinitは適切なUpstart initであり、それによって発行されたイベントに基づいてセッションジョブを開始および停止できます。ルート権限はまったく必要ありません。より良い(または、観点によってはより悪い)が、これはまだヘッドレスシステムでは完全にはサポートされていません。 SSHログインは、今行った簡単なテストからユーザーの初期化を開始しませんでした。

セッションジョブを作成するには、.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

手動で制御できます:

start myjob 
# or
initctl start myjob

serviceコマンドは、システムジョブ(/etc/init.dまたは/etc/initのジョブ)を制御するために使用されます。セッションジョブを制御するには、Upstartと対話するために使用される initctl コマンドを使用する必要があります。

使用できるその他のイベントについては、 man upstart-events を参照してください。

9
muru