gdm の一般ユーザのシャットダウン許可について (2006/05/22)

他ユーザのログインやプロセスなどをあればシャットダウンしない,なければシャットダウンするというコマンドをシェルスクリプトで作成しました.gdm からのシャットダウンはこのコマンドを通じてシャットダウンすれば,一般ユーザのシャットダウンの許可を与えてもよいかと思います.以下が,そのシェルスクリプトです.

#!/bin/sh

PATH=/sbin:/bin:/usr/sbin:/usr/bin
TEMP_FILE=/tmp/shutdown-gdm.$$
PS_FORMAT="user,uid,pid,%cpu,%mem,tname,command"
IGNORE_DAEMON="dbus-daemon|\
gam_server|\
ssh-agent|\
dbus-launch|\
bonobo-activation-server|\
gnome-vfs-daemon"
START_UID=10000
END_UID=15000

# error: gdm startup
gdm_startup() {
  rm $TEMP_FILE
  /etc/init.d/gdm start
  exit 1
}

# interrupt
trap 'gdm_startup' 1 2 3 15

# check login user
who > $TEMP_FILE
if [ -s $TEMP_FILE ]; then
  echo "Users login now. Shutdown is rejected."
  cat $TEMP_FILE
  sleep 5
  gdm_startup
fi

# check running process
ps -eo $PS_FORMAT | \
 egrep -v $IGNORE_DAEMON | \
 gawk '$2>='$START_UID' && $2<'$END_UID > $TEMP_FILE
if [ -s $TEMP_FILE ]; then
  echo "User processes are running. Shutdown is rejected."
  cat $TEMP_FILE
  sleep 5
  gdm_startup
fi

# halt or reboot
sync; sync; sync
shutdown $@

この例では,一般ユーザの uid が,10000 から 14999 までとしています.このシェルスクリプトを /usr/local/sbin/shutdown-gdm とし,実行権限を与えます.そして,/etc/gdm/gdm.conf に次のように記述すれば,他ユーザのログイン及びプロセスをチェックしてからシャットダウンするようになります.

[daemon]
HaltCommand=/usr/local/sbin/shutdown-gdm -h now
RebootCommand=/usr/local/sbin/shutdown-gdm -r now

梅原 大祐 / UMEHARA Daisuke umehara@kit.ac.jp
Last modified: 2020/05/01 15:37
Total Access Count