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

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. [donotprint]

Tutorial details
Difficulty Easy (rss)
Root privileges No
Requirements None
Time 1m
[/donotprint]The procedure is as follows to automatically log users out after a period of inactivity on a Linux or Unix-like system.

ADVERTISEMENTS

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.

🐧 If you liked this page, please support my work on Patreon or with a donation.
🐧 Get the latest tutorials on SysAdmin, Linux/Unix, Open Source/DevOps topics:
CategoryList of Unix and Linux commands
File Managementcat
FirewallAlpine Awall CentOS 8 OpenSUSE RHEL 8 Ubuntu 16.04 Ubuntu 18.04 Ubuntu 20.04
Network Utilitiesdig host ip nmap
OpenVPNCentOS 7 CentOS 8 Debian 10 Debian 8/9 Ubuntu 18.04 Ubuntu 20.04
Package Managerapk apt
Processes Managementbg chroot cron disown fg jobs killall kill pidof pstree pwdx time
Searchinggrep whereis which
User Informationgroups id lastcomm last lid/libuser-lid logname members users whoami who w
WireGuard VPNAlpine CentOS 8 Debian 10 Firewall Ubuntu 20.04

ADVERTISEMENTS
4 comments… add one
  • MikeM Dec 19, 2008 @ 15:57

    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");
    }
    
  • wdobler Sep 27, 2013 @ 5:40

    Note that the tcsh example should be

    set autologout=5

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

  • Ram Jun 26, 2014 @ 4:29

    Hi,

    Is there any way to do this for plain Bourne-Style-Shell (sh).

    Thanks.

  • The_Simpsons Mar 30, 2015 @ 13:46

    echo “to logout all ideal user ” | sed ‘s/ideal/idle/g’

Leave a Reply

Your email address will not be published.

Use HTML <pre>...</pre>, <code>...</code> and <kbd>...</kbd> for code samples.