我可以仅为虚拟控制台设置 bash 超时 (ctrl+alt+{f1-f6})

我可以仅为虚拟控制台设置 bash 超时 (ctrl+alt+{f1-f6})

我知道我可以设置一个TMOUT变量在指定的不活动时间后自动结束 bash 会话。但是,我想要的是应用它仅有的我的 6 个内置虚拟控制台,可以通过ctrl+ alt+{ F1... F6} 访问。

当我想打开终端时,我几乎总是使用终端应用程序。当我离开计算机时,我会锁定屏幕,以防止任何人访问这些终端。所以我不想在这些上有超时。

然而,在极少数情况下,我会使用我的虚拟控制台之一在我的计算机上工作。通常这是由于我的主 Gnome 会话被冻结或无法使用。我杀死了有问题的应用程序,然后切换回我的主会话。

最重要的是,有几次我在恢复 Gnome 会话时忘记退出虚拟控制台。因此,如果我离开,我的计算机将完全不受保护,因为在 Gnome 上锁定屏幕只会锁定 GUI;用户可以切换到虚拟控制台并终止我的 gnome 锁屏或以其他方式弄乱我的计算机。

我是否可以仅为内置虚拟控制台设置超时值,同时允许终端应用程序会话无限期保持不活动状态?

答案1

您可以检查是否在图形终端中运行,只有TMOUT在没有运行时才进行设置。执行此操作的一个简单方法是tty命令:

   tty - print the file name of the terminal connected to standard input

从 GUI 终端模拟器运行时:

$ tty
/dev/pts/5

从虚拟控制台运行时:

$ tty
/dev/tty2

因此,将这些行添加到您的文件中~/.profile应该会在十分钟后终止您的 bash 会话:

tty | grep tty >/dev/null && TMOUT=600

答案2

我从来不喜欢 TMOUT 解决方案。首先,因为它只有在您根据提示离开会话时才有效;如果你把它留在 Vim 中,甚至在 sudo 密码提示符下,它也不会超时。其次,我不希望会话被关闭,我希望它被锁定,就像图形环境一样。

GNU Screen 能够在闲置一段时间后锁定,因此我执行了以下操作。在我的一开始~/.bashrc我添加了这个:

if [ "$TERM" = "linux" ] && tty | egrep -q '^/dev/tty[[:digit:]]+$'
then
    exec screen -c ~/.ttyscreenrc
fi

exec很重要,因为它确保screen替换 Bash,并且当它结束时,TTY 会话将关闭。

我把~/.ttyscreenrc这个:

startup_message off
idle 180 lockscreen

跳过 Screen 的欢迎屏幕并在 3 分钟不活动后锁定。

答案3

这是 PAM 模块的一个很好的例子pam_env.so。虚拟控制台登录使用该login程序,因此您可以打开/etc/pam.d/login并添加如下行:

session  required  pam_env.so  readenv=1 envfile=/etc/vc-environment user_readenv=0

通过随附的新文件,/etc/vc-environment

TMOUT=600

为此使用 PAM 有两个优点:

  • 它适用于登录虚拟控制台的任何用户(尽管它不会阻止他们TMOUT以后进行更改)。
  • 超时也可以应用于其他特定服务,例如sudo

在这里阅读有关此模块的详细信息。

相关内容