Paksa pengguna (pada mac) untuk keluar setelah tidak aktif

2

Saya sedang mencari cara di mana saya dapat memaksa akun tetap masuk ke Mac saya untuk keluar otomatis setelah beberapa saat tidak aktif.

Ada pengaturan bawaan untuk sistem operasi (Lion), yang melakukan ini, tetapi ini berlaku untuk semua pengguna, dan saya hanya ingin melakukan ini dengan akun tertentu.

Di Windows, saya bisa menggunakan gpedit untuk memaksa pengguna menggunakan screensaver yang mencatat pengguna. Apakah ada hal serupa yang dapat saya lakukan pada Mac OS X Lion?

ps saya satu-satunya administrator di sistem.

Bryan
sumber
1
Anda bisa mencoba pergi ke arah lain dan menggunakan program seperti Caffeine untuk membuat batas waktu tidak berlaku untuk beberapa pengguna, jika program ini mensimulasikan aktivitas pengguna.
Daniel Beck
Oooh, itu seharusnya melakukan trik dengan baik. Jika Anda memposting ulang sebagai jawaban, saya akan menerima solusi Anda.
Bryan
Nah, apakah itu berhasil? Belum mencoba menggunakannya dengan opsi itu sendiri.
Daniel Beck
Tampaknya bekerja pada awalnya, tetapi saya baru saja keluar karena tidak aktif. Saya pikir saya mungkin telah mengkonfigurasi kafein hanya untuk menjaga sistem tetap terjaga selama durasi yang ditentukan. Saya sekarang telah mengkonfigurasi kafein untuk bekerja tanpa batas waktu, dan saya sedang menguji lebih lanjut, dan akan melaporkan kembali.
Bryan
Sayangnya, sepertinya tidak berhasil. Saya terus keluar meskipun kafein sedang dikonfigurasi untuk menjaga sistem dalam keadaan aktif. Terima kasih banyak atas saran Anda.
Bryan

Jawaban:

3

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/usertimeoutdimiliki 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 visudodan Anda baik untuk pergi.

%users          ALL=(ALL) NOPASSWD: /sbin/killuser
Bryan
sumber
Sebagai info, tujuan menggunakan sudo, adalah itu kill -9 $pidsaja tidak selalu cukup untuk mematikan proses loginwindow. Saya juga mempertimbangkan menggunakan kill -9 -1yang biasanya akan membunuh semua proses milik pengguna, tetapi menurut halaman manual, ketika Anda menjalankan ini dengan sudo, itu malah membunuh semua proses pada sistem.
Bryan
Adakah perubahan yang perlu saya lakukan di sini untuk membuat ini berfungsi di Ubuntu?
DrorCohen
@DCrorCohen Saya tidak berpikir itu akan, karena penggunaan stat -f %u /dev/console. Ini mungkin seharusnya cukup sepele untuk diperbaiki untuk Ubuntu (dengan asumsi itu tidak berfungsi). Jika Anda tidak bisa membuatnya berfungsi, buat pertanyaan baru.
Bryan
dapatkah Anda jelaskan apa yang seharusnya dilakukan $ (stat -f% u / dev / console) == $ UID? jadi saya bisa mengubahnya ke ubuntu? terima kasih
DrorCohen
BAIK. berhasil mendapatkan salinan stat man untuk mac ... Masalah yang saya hadapi sekarang adalah bahwa / dev / console di Ubuntu milik root ...
DrorCohen