web-dev-qa-db-ja.com

ログアウト時にスクリプトでGsettingを変更する

システム:

Ubuntu Raring Ringtail(13.04)の新規インストール。

目的:

メイン:ユーザーログアウト時にスクリプトでgsetting(デスクトップの壁紙)を変更します。

私がやったこと:(注意深く読む)

私は内部に回避策を置いたさまざまな( これという名前のアプリケーションをログアウトで停止しようとしています。 Varietyは自動起動アプリなので、ログインするたびに起動します。Varietyには、アプリのプロセスが停止したときに呼び出される関数on_quit()force_quit_thread()があります。そこで、実際のスクリプト(normalize)を実行するpythonスクリプト行を内部に追加しました。さまざまなものを正常に終了しようとすると、必要な処理が実行されます。システムがログアウトすると、開始したプロセスも停止する必要がありますが、停止していないことに気づきました。そのため、この方法を使用できませんでした。

これにより、ログアウト時にさまざまなプロセスを手動で強制終了する別の方法を使用できるようになりました。私は~/.bash_logoutを試しました(自動起動がbashで実行されないことがわかっているので、私はそれを疑います)。 ~/etc/gdm/PostSession/Default(しかし、私はgdmを使用していません); ~/etc/lightdm/lightdm.conf(これも機能しません!どうしてですか?); pam_script/pam-script(操作方法がわかりません。本当に違います。)

起こりました :

しかし、アカウントからログアウトしようとすると問題が発生します。 on_quit()もforce_quit_thread()も実行しません。そして、私が~/Nohup.outからキャプチャしたログは、最後の行を参照してください。

.... bla-bla ... [only see last line]
IOError: [Errno socket error] [Errno 2] No such file or directory

(variety:15627): Gdk-WARNING **: variety: Fatal IO error 11 (Resource temporarily unavailable) on X server :0.

彼らは利用可能なリソースを失いましたよね? 通常は終了しませんその場合、gsettingは変更されません。

詳細

1)quit functions内にスクリプトを追加

/opt/extras.ubuntu.com/variety/variety/VarietyWindow.pyにあります:

<pre>bashCommand = "/home/abdillah/Toolbox/command/normalize"
os.system(bashCommand)</pre>

2)正規化内のスクリプト

目的:バラエティが終了したときに壁紙を変更する。

<pre>echo $(cat "${HOME}"/.self-log)"| normalize" > "${HOME}"/.self-log #append log
wallpaper=$(cat /home/abdillah/.wallpaper)
filename="file://"$wallpaper
configname=${filename/'#'/"%23"}
gsettings set org.gnome.desktop.background picture-uri $configname #the most important</pre>

3)LightDM構成ファイル

私を混乱させるのは、それが documentation であり、session-cleanup-scriptについて言及されたステートメントがないことです。非推奨ですか?

[SeatDefaults] 
 user-session = ubuntu 
 greeter-session = unity-greeter 
 autologin-user = 
 session-cleanup-script =/home/abdillah /ツールボックス/コマンド/ログオフ

4)ログオフファイルに含まれるもの:

.self-logファイルはまだ空です=>失敗

#!/ bin/bash 
 echo $(cat "$ {HOME}"/。self-log) "| fail?(OnScript)"> "$ {HOME}" /。self-log#append log 
 killall Variety 
 /opt/extras.ubuntu.com/variety/bin/variety -q 
 echo $(cat "$ {HOME}" /。self-log) " |成功?(OnScript) ">" $ {HOME} "/。self-log #log 
 exit 0

質問

上記の条件が非常に具体的であると誰かが考えるときは、次の質問に答えてください。 1.ログアウト時に直接スクリプトを実行する方法([〜#〜] cmiw [〜#〜]上記の方法。そうでない場合は、何か提案をお願いします)または2.どうすればログアウトしたときにバラエティを適切に停止しますか? (したがって、on_quit()が呼び出されます)

考えられる解決策

  • [StartUpApplication] in bashで各種を開始し、〜/ .bash_logoutスクリプトを使用して停止します。しかし、どのように?

OK。それは長い。しかし、私はできるだけ明確にするようにしています。なぜなら、私が読んだこれに関連する質問がたくさんあるからです。本当に誰かの助けが必要です。ありがとうございました。

2
Abdillah

解決策は簡単ではありません。 Xログイン時にスクリプトを開始し、Xセッションが終了するまで待機する必要があります。幸いなことに、gnome-sessionのinotifyとpidがあります。

スクリプトの実行時に、さまざまなプロセスがすでに適切に強制終了されているはずです。

  1. インストールinotify-tools パッケージ。
  2. 〜/ .xprofileスクリプトを作成または変更し、次の行に追加します

    sh .xlogout &
    
  3. 次のコンテンツで〜/ .xlogoutを作成します

    FILE=/tmp/.ICE-unix/$PPID            # pid of parent = gnome-session
    sleep 10s                            # wait for $FILE creation
    inotifywait -qe delete_self $FILE    # wait for $FILE deletion = logout
    # your code goes here                # = on_quit
    # gsettings reset org.gnome.desktop.background picture-uri
    
0
Grzegorz Żur