修正後のxsessionrcは以下のようになった
#!/bin/bash #xsetroot -solid DarkSlateBlue #hsetroot -full /usr/share/lxde/wallpapers/garasunodice.jpg D_NUM=`echo $DISPLAY | cut -f 2 -d:` PIDFILE=~/.xsession_${D_NUM}.pid for psnum in $(cat $PIDFILE) do cmd=`ps -p $psnum | tail -1 ` if echo $cmd | grep Xsession > /dev/null ; then kill $psnum fi done rm -f $PIDFILE while true do DATE=`date +"%Y/%m/%d %H:%M"` LOAD=`loadav.pl` xsetroot -name "Load Average:$LOAD $DATE" || exit sleep 30s || exit done & echo $! >> $PIDFILE while true do /usr/local/bin/random_wallpaper.pl /jitaku/local/pic/Linux_wallpaper/ || exit sleep 30m || exit done & echo $! >> $PIDFILE
まず不具合の原因はwhileループがXをログオフしても生き続けること
下図参考このように30sの間にログオフ→ログインが行われると2つのプロセスが実行されてしまう
それを防ぐためにwhileのwhileのプロセスを記録しておく
このときディスプレイ番号も記録し他のXセッションも切らないようにする
pstreeでみるとこんな感じ
こうしておけば次にログインするときにWhileプロセスを殺してくれる。whileプロセスが無いので時間が経てば消えるので良しとした
ちなみにこの方法は再起動した時でも前回のプロセス番号をkillしようとするので完全ではない。
たまたま、同じプロセス番号+Xsessionコマンドで実行されていれば間違えてしまう可能性がある
過去記事
Dwmのステータスバーと壁紙を変更してみる
Linuxでランダムに壁紙を変更するスクリプト書いた
0 件のコメント:
コメントを投稿