-1

/etc/NetworkManager/dispatcher.d のスクリプトは exec を取得し、パラメーターは NetworkManager によってスクリプトに渡されます。

ラップトップの BIOS の 1 つが誤動作しているため、時刻を手動で同期し、システムをアップグレードする必要があります。このタスクを自動化するスクリプトを使用しています。スクリプトは次のとおりです: #!/bin/sh

IF=$1
STATUS=$2

if [ "$STATUS"x != 'up'x -o "$(date +%Y)" -gt "2012"  ] ;then
   exit
fi

logger  "==$0=="
wait_for_process(){
    PNAME=$1
    PID=`pgrep $PNAME`
    while [ -z "$PID" ];do
        logger "waiting $1 running for another 3 sec.."
        sleep 3;
        PID=`pgrep $PNAME`
    done
    logger "$1 is running!"
}
wait_for_process nm-applet
wait_for_process lxpanel

export DISPLAY=$(echo $DISPLAY | cut -c -2)

if [ -z $DISPLAY ];then
    export DISPLAY=:0
fi

#below cmd will yield null string for $user
user=$(who | grep "$DISPLAY" | awk '{print $1}' | tail -n1)
#so I have to hardcode the user name:(
user=xxx
export XAUTHORITY="/home/$user/.Xauthority"

logger "Display $DISPLAY user $user"

su $user -c "xterm -e 'sudo /usr/bin/ntpd -qdg && sudo yaourt -Syua' &" || logger "cannot run xterm"

(スクリプトは x ウィンドウの前に呼び出され、root として実行されます)

user=$(who | grep "$DISPLAY" | awk '{print $1}' | tail -n1)ログインユーザー名が見つかりません。しかし、それはxtermで動作します。誰か助けてくれませんか?

archlinux i686 + openbox + lxpanel を使用しています

編集:スクリプトがルートによって実行されている間に、実際のログインユーザー名を見つけたいです。

4

1 に答える 1

0

スクリプトを実行しているユーザーの名前をお探しですか? どうですか:

user=$( id -un )
于 2012-04-16T13:55:26.027 に答える