web-dev-qa-db-ja.com

Ubuntuからユーザーを自動ログオフするにはどうすればよいですか?

私のUbuntuステーションがマルチユーザーステーション(子供が成長している)に変わったので、非アクティブ期間の後にアカウントを自動的にログオフする方法が必要です(ロック画面だけでなく完全にログオフします)。 Ubuntuでこれを実現するにはどうすればよいですか? autolog を使用してみましたが、次の行を挿入しました:

name=*          idle=15 grace=60

仕事をしていないようです。別のオプションは、これを answer にUbuntu互換に変換することですが、何を変更する必要があるかについて助けが必要です...

4
DrorCohen

これは私が私の問題を解決した方法です(これは少なくとも30分のアイドル時間の後にアイドルユーザーをログアウトします):

最初にファイルを作成し、このコードをその中に入れます(開始する前にxprintidleをインストールする必要があるかもしれません):

#!/bin/bash
# Written by cz0 2010, adapted by dror 2013 
# Distributed under the terms of the GNU General Public License v2 

HALFHOUR=1800000
IDLETIME=`xprintidle`
QDBUS="/usr/bin/qdbus" 

if [ $IDLETIME -gt $HALFHOUR ]
then 
    logger timeout of $HALFHOUR expired. idle is $IDLETIME
    KDEPID=$(ps aux | grep 'startkde' | grep -v 'grep' | awk '{print $2}') 
    KDEUSER=$(ps u $KDEPID | grep 'startkde' | awk '{print $1}') 

# If the DBUS_SESSION_BUS_ADDRESS environment variable is not already set correctly 
# then set it by finding the environment file for the startkde process in proc and 
# parsing it to get get the correct setting. 

    if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then 
        ENVIRON_FILE=/proc/$(ps h --ppid $KDEPID -o pid | awk '{print $1}')/environ 
        CURRENT_DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS $ENVIRON_FILE | sed -e 's/DBUS_SESSION_BUS_ADDRESS=//') 
        export DBUS_SESSION_BUS_ADDRESS=$CURRENT_DBUS_SESSION_BUS_ADDRESS
    fi 
    $QDBUS org.kde.ksmserver /KSMServer logout 1 0 2 
else
    logger timeout is $HALFHOUR not expired $IDLETIME 
fi

今それを/ bin /にcpします

Sudo cp myfile /bin/logoutonidle

次にそれを実行可能にします

Sudo chmod +x /bin/logoutonidle

次に、自動的にログアウトするユーザーごとに実行します(必要に応じて、すべてのユーザーで実行します)。

crontab -e

次の行を追加します(これにより、15分ごとにcronチェックが行われるため、最悪の場合、ユーザーは最大45のアイドル時間後にログアウトされます)。

*/15 * * * * export DISPLAY=:0 && /bin/logoutonidle 2>&1

私を正しい方向に向けてくれたこれらのスレッドの人々 BryanJohanns に感謝します。

2
DrorCohen