Saya sudah menemukan cara untuk melakukan ini, ini sedikit hack menggunakan skrip shell, cron dan sudo, tetapi tampaknya bekerja dengan cukup baik.
Pertama, buat skrip shell yang /bin/usertimeout
dimiliki oleh root, chmod ke 755, dan rekatkan konten berikut ke dalam file
#!/bin/bash
# Timeout is the number of seconds a login session can be idle before it is
# automatically logged out.
timeout=3600
if [ $(stat -f %u /dev/console) == $UID ]
then
if [ -e /tmp/backgroundUserLogout.$UID ]
then
rm /tmp/backgroundUserLogout.$UID
fi
else
if [ ! -e /tmp/backgroundUserLogout.$UID ]
then
touch /tmp/backgroundUserLogout.$UID
else
if [ $(( `date +%s` - `stat -f %m /tmp/backgroundUserLogout.$UID || printf 0` )) -ge $(( $timeout )) ]
then
rm /tmp/backgroundUserLogout.$UID
sudo /sbin/killuser
fi
fi
fi
Selanjutnya, buat file /sbin/killuser
, yang dimiliki oleh root, chmod ke 755 dan rekatkan dalam konten berikut
#!/bin/bash
#
# Logs out the user calling this script
# Get the PID of the loginwindow process for the user executing this
pid=`ps -Axjc | grep ^$SUDO_USER | grep loginwindow | cut -c 14-20 | tr -d /\ /`
# If the PID appears to be valid, kill the process
if [ $pid -gt 0 2>/dev/null ]
then
kill -9 $pid
fi
Selanjutnya tambahkan entri crontab untuk setiap pengguna yang Anda ingin logout otomatis. Ini akan merepotkan jika Anda ingin semua pengguna terpengaruh, tetapi dalam kasus saya, saya hanya meminta sejumlah kecil pengguna untuk logout saat idle.
# Crontab for user that has to be autologged out
* * * * * /bin/usertimeout
Perhatikan bahwa contoh di atas berjalan setiap menit, tergantung pada waktu idle yang Anda izinkan, Anda mungkin ingin meningkatkan ini ke frekuensi yang lebih sesuai (mis. Setiap 15 menit menggunakan */15 * * * * /bin/usertimeout
)
Sekarang mod sederhana untuk menggunakan file sudoers visudo
dan Anda baik untuk pergi.
%users ALL=(ALL) NOPASSWD: /sbin/killuser