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


8

私は2つのスクリプトを持っています-1つはSSHFS経由でいくつかのフォルダーをマウントするためのもので、もう1つはマウント解除するためのものです。

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

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


タイミングが重要になるとは思いません。重要なのは、ユーザーがインタラクティブにアプリケーションを起動する前に、最初のスクリプトが2秒ほどで実行されることです。ログアウト時には、誰かがコンソールにログインする前に2番目のスクリプトが実行されることが重要です。
aSteve 2014

rootアクセス権があります。パッケージのインストールは問題ありません。可能であれば、ユーザーレベルの特権のみを使用したいのですが、そのためのきちんとした方法があると想定しています。私のスクリプトはルートを必要としません。Unityの起動/停止でスクリプトを開始する最善の方法に関するアドバイスを探しています...私のLinux / Unixエクスペリエンスのほとんどは、非GUIコンテキストで行われています。昔ながらのXWindowsとバニラウィンドウマネージャーがあれば、.xinitrcからこれを実行できたはずです。最新のデフォルトのUnityデスクトップの最良の方法は何ですか?
aSteve 2014

何がマウントされているか、何がマウントされていないかに依存してログオフアクションを作成したくありません...これはすべて、既存のスクリプトによって動的に処理されます。必要なのは、コンソールのGUIセッションで、ログオン時に最初のスクリプトを実行し、ログオフ時に2番目のスクリプトを実行するための適切な方法です。「スタートアップアプリケーション」を見つけましたが、それでも問題の前半しか解決できません。
aSteve 2014

「ログインアプリケーション」がどちらのスクリプトにとっても適切な戦略であるとは思いません。2つのスクリプトがあります... 1つはGUIセッション用に設定します。もう1つはGUIセッションの後でクリーンアップします。どちらもGUIセッションと同じユーザーとして実行する必要があります。どちらも引数を必要としません。スクリプトを起動する適切な方法を見つける必要があります-適切なタイミングでそれがすべてです。スクリプトが実際に行うことについての仮定は必要ありません。この質問は、Unityのログオンとログオフと同時に発生するイベントをフックする方法に関するすべてです。
aSteve 2014

回答:


9

Unityにログインしたときに他のログインではなくジョブを実行するという要件を考慮すると、Upstart セッションジョブは完璧に見えます。

お気づきかもしれませんが、GUIログイン後に実行するinitプロセスは2番目のプロセスの下にあります。これinitは適切なUpstart initであり、それによって発行されたイベントに基づいてセッションジョブを開始および停止できます。ルート権限はまったく必要ありません。しかし、ヘッドレスシステムの方がまだ完全にサポートされていません。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

手動で制御できます。

start myjob 
# or
initctl start myjob

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

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


私は気づかなかった...しかし...私は同意する-スタートアップセッションの仕事は完璧に見える。おそらく明らかなものがないと思いますが、「service myjob start」を実行したときに〜/ .config / upstart / myjob.conf(上記のように)を作成すると、「myjob:unrecognized service」が表示されます。
aSteve 2014

解決済み:「service myjob start」の代わりに「start myjob」を使用する必要がありました。別の便利なコマンドは「initctl list」
でした

@aSteve申し訳ありません。私はそれを修正した
muru

問題ない。アップスタート/セッションのアプローチは間違いなく正しく見えます。とはいえ、個別の(有効期間が短い)開始スクリプトと停止スクリプトを実行するためにそれを使用する最良の方法はまだ特定していません。.confファイルを1つだけ使用できますか、それとも2つ必要ですか?それは「サービス」なのか「タスク」なのか?プリ/ポストスタートとプリ/ポストストップを使用する必要がありますか?起動と停止の間にプロセスを実行する必要はありません/必要はありません...ツールバーにアイコンを配置する簡単な方法がない限り...それはおそらく、やりすぎです-私の目的のためです。
aSteve

1
最終的に。多くのハッキングの後...私はmyendtaskを「デスクトップ側」ではなく「セッション側」で起動する必要があることを発見しました。これは多少直観に反しますが、機能します。(ついに!)
aSteve

1

解決策は、アップスタートタスクを使用することでした。私は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

ログイン後にスクリプトを実行するためのいくつかの提案を次に示します。

起動後のStackOverflow Linuxスクリプト:Cliffのメモは、*。shファイルを/etc/profile.dに置くことです。

起動時にスクリプトを実行する場合、そのためのいくつかの提案を以下に示します。

ブート後のStackOverflow Linuxスクリプト:クリフノートは/etc/rc.localまたはcrontabを使用することです。


1
これらのオプションはどちらも「正しく」見えません。Unityセッションを開始/終了するという意味でログオン/ログオフしたときにのみスクリプトを実行したいと思います。新しいログオンがあるたびにスクリプトを実行したくありません。新しいログオンはsshなどを介してリモートで開始できますが、コンソールで新しいUnityセッションを開始しないため、これらのスクリプトでスクリプトを実行したくありません。
aSteve 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.