Configure BASH, KSH, TCSH, ZSH Shell To Logout User Automatically After Idle Time

in Categories , , , , , , , , last updated March 31, 2015

tmout on a Linux/Unix shell
How can I configure the bash or ksh shell to logout any user automatically after a period of idle time under a Debian Linux or any other UNIX-like operating system?

BASH, zsh, and ksh shell allows to logout all idle user setting a shell variable. The procedure is as follows to automatically log users out after a period of inactivity on a Linux or Unix-like system.

Bash, Zsh or Ksh shell logout inactivity users

You need to set TMOUT variable in seconds. For example, if set TMOUT to 300 seconds (5 minutes) to automatically logout users.

tcsh/csh shell user

You need to set autologout variable in seconds.

Append the following line to your shell startup file (bash/ksh/zsh only):
export TMOUT=300
readonly TMOUT
export TMOUT

If you are using tcsh shell (must be in minutes), enter:
set -r autologout 5

Save and close the file.

Posted by: Vivek Gite

The author is the creator of nixCraft and a seasoned sysadmin, DevOps engineer, and a trainer for the Linux operating system/Unix shell scripting. Get the latest tutorials on SysAdmin, Linux/Unix and open source topics via RSS/XML feed or weekly email newsletter.

Share this on (or read 4 comments/add one below):

4 comment

  1. We run this script from cron every ten minutes, killing off idle sessions that are older than 30 minutes.
    Note the list of exempt users. We wouldn’t want to kill the CEO’s session.

    #########################
    #! /usr/bin/awk -f
    
    BEGIN {
    system("who -u | sort +5 > /tmp/loginfile");
    system("echo User Sessions Killed > /tmp/killedlogins");
    system("echo `date` >> /tmp/killedlogins");
    while (getline = 1) || (timearray[2] >= 30)) &&
    # list of exempt users below
    ($1 != "root") &&
    ($1 != "legacy") &&
    #($1 != "ceo") &&
    #($1 != "cio") &&
    #
     { {
    system("ps -ef | grep " $1 " | awk '{print $2}' | xargs kill -KILL");
    print $1, "[Idle " $6 "] Session terminated from " $8 >> "/tmp/killedlogins";
    };
    };
    }
    system("rm /tmp/loginfile");
    system("chmod 644 /tmp/killedlogins");
    }
    
  2. Note that the tcsh example should be

    set autologout=5

    for consistency – here the time is expressed in minutes, not seconds.

    Have a question? Post it on our forum!